diff --git a/.github/scripts/apidb_test.sh b/.github/scripts/apidb_test.sh index 2b2a40f9e..95bf54380 100755 --- a/.github/scripts/apidb_test.sh +++ b/.github/scripts/apidb_test.sh @@ -24,8 +24,8 @@ DOCKER_DATA_DIR=`mktemp -d -t docker-XXXXXX` mkdir -p /var/log/harbor/ -docker run -i --rm --privileged -v `pwd`/harbor:/drone -v /var/log/harbor/:/var/log/harbor/ -v $DOCKER_DATA_DIR:/var/lib/docker -e NOTARY_URL=https://$NOTARY_HOST -w /drone $E2E_IMAGE make swagger_client -docker run -i --rm --privileged -v `pwd`/harbor:/drone -v /var/log/harbor/:/var/log/harbor/ -v $DOCKER_DATA_DIR:/var/lib/docker -e NOTARY_URL=https://$NOTARY_HOST -w /drone $E2E_IMAGE $CMD +docker run -i --rm --privileged -v `pwd`/harbor:/drone -v /var/log/harbor/:/var/log/harbor/ -v $DOCKER_DATA_DIR:/var/lib/docker -w /drone $E2E_IMAGE make swagger_client +docker run -i --rm --privileged -v `pwd`/harbor:/drone -v /var/log/harbor/:/var/log/harbor/ -v $DOCKER_DATA_DIR:/var/lib/docker -w /drone $E2E_IMAGE $CMD rc=$? diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml index 4acfbc302..660a4e337 100644 --- a/.github/workflows/build-dev.yml +++ b/.github/workflows/build-dev.yml @@ -10,23 +10,23 @@ jobs: docker: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.0.0 + uses: docker/setup-buildx-action@v3.7.1 with: driver-opts: image=moby/buildkit:master - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: '${{ secrets.DOCKER_USER }}' password: '${{ secrets.DOCKER_TOKEN }}' - name: Build and push to DockerHub - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v6 with: push: true platforms: | @@ -35,13 +35,13 @@ jobs: file: Dockerfile tags: goharbor/harbor-operator:dev - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: harbor password: '${{ secrets.GHCR_TOKEN }}' - name: Build and push go ghcr - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v6 with: push: true platforms: | @@ -53,13 +53,13 @@ jobs: charts: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - name: Package charts run: make helm-generate - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: charts path: charts/*.tgz diff --git a/.github/workflows/chart-tests.yml b/.github/workflows/chart-tests.yml index d46f50509..d852a9ff6 100644 --- a/.github/workflows/chart-tests.yml +++ b/.github/workflows/chart-tests.yml @@ -37,18 +37,18 @@ jobs: - "1.3.0" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 - - uses: azure/setup-kubectl@v3 + - uses: azure/setup-kubectl@v4 with: version: 'latest' - name: Cache go mod - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -62,9 +62,8 @@ jobs: sudo mount -t tmpfs tmpfs /tmp/lib/etcd - name: Install Kubernetes v${{ matrix.k8sVersion }} - uses: helm/kind-action@v1.3.0 + uses: helm/kind-action@v1.10.0 with: - version: v0.14.0 node_image: kindest/node:v${{ matrix.k8sVersion }} cluster_name: harbor config: .github/kind.yaml @@ -107,13 +106,9 @@ jobs: IP=`hostname -I | awk '{print $1}'` echo "IP=$IP" >> $GITHUB_ENV CORE_HOST=core.$IP.nip.io - NOTARY_HOST=notary.$IP.nip.io echo "CORE_HOST=$CORE_HOST" >> $GITHUB_ENV - echo "NOTARY_HOST=$NOTARY_HOST" >> $GITHUB_ENV sed -i "s/core.harbor.domain/$CORE_HOST/g" config/samples/harborcluster-minimal/*.yaml - sed -i "s/notary.harbor.domain/$NOTARY_HOST/g" config/samples/harborcluster-minimal/*.yaml sed -i "s/core.harbor.domain/$CORE_HOST/g" config/samples/harborcluster-standard/*.yaml - sed -i "s/notary.harbor.domain/$NOTARY_HOST/g" config/samples/harborcluster-standard/*.yaml make sample-harborcluster-standard @@ -169,14 +164,14 @@ jobs: if: ${{ failure() }} run: | mkdir -p /tmp/harbor - for name in core jobservice registry registryctl trivy chartmuseum notaryserver notarysigner portal; do \ + for name in core jobservice registry registryctl trivy portal; do \ kubectl logs -l "goharbor.io/operator-controller=$name" --all-containers > /tmp/harbor/$name.log ; \ done kubectl logs -l "app.kubernetes.io/instance=harbor-database" --all-containers > /tmp/harbor/db.log kubectl logs -l "release=harbor-redis" --all-containers > /tmp/harbor/redis.log ls -l /tmp/harbor - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: harbor_chart @@ -189,7 +184,7 @@ jobs: kind export logs --name harbor /tmp/logs ls -l /tmp/logs - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: kind_chart diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c81df1b12..e84831130 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -35,11 +35,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -50,7 +50,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -64,4 +64,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/contour-tests.yml b/.github/workflows/contour-tests.yml index 46c09d3f3..f19cdface 100644 --- a/.github/workflows/contour-tests.yml +++ b/.github/workflows/contour-tests.yml @@ -39,18 +39,18 @@ jobs: - "full_stack.yaml" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 - - uses: azure/setup-kubectl@v3 + - uses: azure/setup-kubectl@v4 with: version: 'v1.25.4' - name: Cache go mod - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -64,9 +64,8 @@ jobs: sudo mount -t tmpfs tmpfs /tmp/lib/etcd - name: Install Kubernetes v${{ matrix.k8sVersion }} - uses: helm/kind-action@v1.3.0 + uses: helm/kind-action@v1.10.0 with: - version: v0.14.0 node_image: kindest/node:v${{ matrix.k8sVersion }} cluster_name: harbor config: .github/kind.yaml @@ -113,14 +112,11 @@ jobs: IP=`hostname -I | awk '{print $1}'` echo "IP=$IP" >> $GITHUB_ENV CORE_HOST=core.$IP.nip.io - NOTARY_HOST=notary.$IP.nip.io MINIO_HOST=minio.$IP.nip.io echo "CORE_HOST=$CORE_HOST" >> $GITHUB_ENV - echo "NOTARY_HOST=$NOTARY_HOST" >> $GITHUB_ENV echo "MINIO_HOST=$MINIO_HOST" >> $GITHUB_ENV samplefile=${{ matrix.samples }} sed -i "s/core.harbor.domain/$CORE_HOST/g" manifests/samples/$samplefile - sed -i "s/notary.harbor.domain/$NOTARY_HOST/g" manifests/samples/$samplefile sed -i "s/minio.harbor.domain/$MINIO_HOST/g" manifests/samples/$samplefile sed -i "s/controller: default/controller: contour/g" manifests/samples/$samplefile sed -i "s/logLevel: info/logLevel: debug/g" manifests/samples/$samplefile @@ -191,14 +187,14 @@ jobs: df -h free -m mkdir -p /tmp/harbor - for name in core jobservice registry registryctl trivy chartmuseum notaryserver notarysigner portal; do \ + for name in core jobservice registry registryctl trivy portal; do \ kubectl -n cluster-sample-ns logs -l "goharbor.io/operator-controller=$name" --all-containers > /tmp/harbor/$name.log ; \ done kubectl -n cluster-sample-ns logs -l "application=spilo" --all-containers > /tmp/harbor/db.log kubectl -n cluster-sample-ns logs -l "app.kubernetes.io/component=redis" --all-containers > /tmp/harbor/redis.log ls -l /tmp/harbor - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: contour_harbor_v${{ matrix.k8sVersion }}_v${{ matrix.certManager }}_${{ matrix.samples }} @@ -211,7 +207,7 @@ jobs: kind export logs --name harbor /tmp/logs ls -l /tmp/logs - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: contour_kind_v${{ matrix.k8sVersion }}_v${{ matrix.certManager }}_${{ matrix.samples }} diff --git a/.github/workflows/harbor-e2e-tests.yml b/.github/workflows/harbor-e2e-tests.yml index 490319432..169845911 100644 --- a/.github/workflows/harbor-e2e-tests.yml +++ b/.github/workflows/harbor-e2e-tests.yml @@ -42,18 +42,18 @@ jobs: - "standard_stack_fs.yaml" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 - - uses: azure/setup-kubectl@v3 + - uses: azure/setup-kubectl@v4 with: version: 'latest' - name: Cache go mod - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -67,9 +67,8 @@ jobs: sudo mount -t tmpfs tmpfs /tmp/lib/etcd - name: Install Kubernetes v${{ matrix.k8sVersion }} - uses: helm/kind-action@v1.3.0 + uses: helm/kind-action@v1.10.0 with: - version: v0.14.0 node_image: kindest/node:v${{ matrix.k8sVersion }} cluster_name: harbor config: .github/kind_permission.yaml @@ -116,14 +115,11 @@ jobs: IP=`hostname -I | awk '{print $1}'` echo "IP=$IP" >> $GITHUB_ENV CORE_HOST=core.$IP.nip.io - NOTARY_HOST=notary.$IP.nip.io MINIO_HOST=minio.$IP.nip.io echo "CORE_HOST=$CORE_HOST" >> $GITHUB_ENV - echo "NOTARY_HOST=$NOTARY_HOST" >> $GITHUB_ENV echo "MINIO_HOST=$MINIO_HOST" >> $GITHUB_ENV samplefile=${{ matrix.samples }} sed -i "s/core.harbor.domain/$CORE_HOST/g" manifests/samples/$samplefile - sed -i "s/notary.harbor.domain/$NOTARY_HOST/g" manifests/samples/$samplefile sed -i "s/minio.harbor.domain/$MINIO_HOST/g" manifests/samples/$samplefile sed -i "s/logLevel: info/logLevel: debug/g" manifests/samples/$samplefile @@ -194,14 +190,14 @@ jobs: df -h free -m mkdir -p /tmp/harbor - for name in core jobservice registry registryctl trivy chartmuseum notaryserver notarysigner portal; do \ + for name in core jobservice registry registryctl trivy portal; do \ kubectl -n cluster-sample-ns logs -l "goharbor.io/operator-controller=$name" --all-containers > /tmp/harbor/$name.log ; \ done kubectl -n cluster-sample-ns logs -l "application=spilo" --all-containers > /tmp/harbor/db.log kubectl -n cluster-sample-ns logs -l "app.kubernetes.io/component=redis" --all-containers > /tmp/harbor/redis.log ls -l /tmp/harbor - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: harbor_v${{ matrix.k8sVersion }}_v${{ matrix.certManager }}_${{ matrix.samples }} @@ -214,7 +210,7 @@ jobs: kind export logs --name harbor /tmp/logs ls -l /tmp/logs - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: kind_v${{ matrix.k8sVersion }}_v${{ matrix.certManager }}_${{ matrix.samples }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 77fbc6023..5cb52c365 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,12 +9,12 @@ jobs: goreleaser: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - # required for the changelog to work correctly run: git fetch --prune --unshallow - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 - name: prepare changelog run: | tag=${{ github.ref }} @@ -26,9 +26,9 @@ jobs: EOF - name: Import GPG key id: import_gpg - uses: crazy-max/ghaction-import-gpg@v3 + uses: crazy-max/ghaction-import-gpg@v6 with: - gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} - name: Run GoReleaser uses: goreleaser/goreleaser-action@v1 @@ -43,23 +43,23 @@ jobs: docker: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.0.0 + uses: docker/setup-buildx-action@v3.7.1 with: driver-opts: image=moby/buildkit:master - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: '${{ secrets.DOCKER_USER }}' password: '${{ secrets.DOCKER_TOKEN }}' - name: Build and push to DockerHub - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v6 with: push: true platforms: | @@ -74,7 +74,7 @@ jobs: username: harbor password: '${{ secrets.GHCR_TOKEN }}' - name: Build and push go ghcr - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v6 with: push: true platforms: | diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7466a8611..6a70cb5ea 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,10 +17,10 @@ jobs: name: Build docker image steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: | docker buildx create --use make docker-build @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-latest name: 'dockerfile: lint' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - run: make docker-lint # Golang tests @@ -37,30 +37,30 @@ jobs: runs-on: ubuntu-latest name: 'golang: lint' steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: make go-lint go-dependencies: runs-on: ubuntu-latest name: Dependencies are up to date steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: make go-dependencies-test check-generated-files: runs-on: ubuntu-latest name: Generated files are up to date steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: make generated-diff-test go-tests: @@ -71,14 +71,14 @@ jobs: IMAGE_SOURCE_REPOSITORY: ghcr.io/goharbor dockerImage: harbor-operator:dev_test steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 + go-version: 1.23 - name: Cache go mod - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} @@ -92,9 +92,8 @@ jobs: sudo mount -t tmpfs tmpfs /tmp/lib/etcd - name: Install Kubernetes - uses: helm/kind-action@v1.3.0 + uses: helm/kind-action@v1.10.0 with: - version: v0.14.0 cluster_name: harbor node_image: kindest/node:v1.22.9 config: .github/kind.yaml @@ -116,7 +115,7 @@ jobs: kind export logs --name harbor /tmp/logs ls -l /tmp/logs - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: name: kind_go-tests @@ -127,12 +126,12 @@ jobs: runs-on: ubuntu-latest name: 'kubernetes_resources: ./config/crd' steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: make manifests - - uses: azure/k8s-bake@v1 + - uses: azure/k8s-bake@v3 with: renderEngine: 'kustomize' kustomizationPath: './config/crd' @@ -142,12 +141,12 @@ jobs: runs-on: ubuntu-latest name: 'kubernetes_resources: ./config/rbac' steps: - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: - go-version: 1.18 - - uses: actions/checkout@v2 + go-version: 1.23 + - uses: actions/checkout@v4 - run: make manifests - - uses: azure/k8s-bake@v1 + - uses: azure/k8s-bake@v3 with: renderEngine: 'kustomize' kustomizationPath: './config/rbac' @@ -164,8 +163,8 @@ jobs: - harborcluster-standard - harborcluster-fullstack steps: - - uses: actions/checkout@v2 - - uses: azure/k8s-bake@v1 + - uses: actions/checkout@v4 + - uses: azure/k8s-bake@v3 with: renderEngine: 'kustomize' kustomizationPath: './config/samples/${{ matrix.path }}' @@ -176,5 +175,5 @@ jobs: runs-on: ubuntu-latest name: 'documentation: lint' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - run: make md-lint diff --git a/Dockerfile b/Dockerfile index 13d62062e..c2f2d05d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.3 as build +FROM golang:1.23 as build WORKDIR /workspace COPY . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=$(go env GOARCH) go build -o manager main.go diff --git a/PROJECT b/PROJECT index 523a146b3..75968827b 100644 --- a/PROJECT +++ b/PROJECT @@ -14,12 +14,6 @@ resources: - group: goharbor kind: RegistryController version: v1alpha3 -- group: goharbor - kind: NotaryServer - version: v1alpha3 -- group: goharbor - kind: NotarySigner - version: v1alpha3 - group: goharbor kind: Clair version: v1alpha3 @@ -47,12 +41,6 @@ resources: - group: goharbor kind: RegistryController version: v1beta1 -- group: goharbor - kind: NotaryServer - version: v1beta1 -- group: goharbor - kind: NotarySigner - version: v1beta1 - group: goharbor kind: Clair version: v1beta1 diff --git a/README.md b/README.md index f4bcccc26..2c1a8e9f1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Harbor deployment stack is controlled by a custom Harbor resource `HarborCluster * Provides strong flexibility to deploy different stacks of Harbor cluster (identified by `HarborCluster` CR) * **Minimal stack:** only required Harbor components `Core`, `Registry`, `Registry Controller`, `Job Service` and `Portal` are provisioned. - * **Standard stack:** the optional Harbor components `Notary`, `Trivy`, `ChartMuseum` and `Metrics Exporter` can be selected to enable. + * **Standard stack:** the optional Harbor components `Trivy`, and `Metrics Exporter` can be selected to enable. * **Full stack:** both the Harbor components (required+optional) and also the related dependent services including the database (PostgreSQL), cache (Redis) and storage (MinIO) can be deployed into the Kubernetes cluster together with a scalable and high-available way. * Supports configuring either external or in-cluster deployed dependent services * Supports a variety of backend storage configurations @@ -54,7 +54,7 @@ Harbor deployment stack is controlled by a custom Harbor resource `HarborCluster * Robot account * and more * [Auto-scaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) for each component. -* Backup/restore data (registry layer, chartmuseum data, databases content). +* Backup/restore data (registry layer, databases content). * Support services exposed with LoadBalancer ## Release plans diff --git a/apis/goharbor.io/v1alpha3/chartmuseum_conversion.go b/apis/goharbor.io/v1alpha3/chartmuseum_conversion.go deleted file mode 100644 index f5381ff3b..000000000 --- a/apis/goharbor.io/v1alpha3/chartmuseum_conversion.go +++ /dev/null @@ -1,16 +0,0 @@ -package v1alpha3 - -import ( - "github.com/plotly/harbor-operator/pkg/convert" - "sigs.k8s.io/controller-runtime/pkg/conversion" -) - -var _ conversion.Convertible = &ChartMuseum{} - -func (c *ChartMuseum) ConvertTo(dstRaw conversion.Hub) error { - return convert.ConverterObject(c).To(dstRaw) -} - -func (c *ChartMuseum) ConvertFrom(srcRaw conversion.Hub) error { - return convert.ConverterObject(c).From(srcRaw) -} diff --git a/apis/goharbor.io/v1alpha3/chartmuseum_types.go b/apis/goharbor.io/v1alpha3/chartmuseum_types.go deleted file mode 100644 index 58e5c26fb..000000000 --- a/apis/goharbor.io/v1alpha3/chartmuseum_types.go +++ /dev/null @@ -1,361 +0,0 @@ -package v1alpha3 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +k8s:openapi-gen=true -// +resource:path=chartmuseum -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// ChartMuseum is the Schema for the ChartMuseum API. -type ChartMuseum struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec ChartMuseumSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// ChartMuseumList contains a list of ChartMuseum. -type ChartMuseumList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []ChartMuseum `json:"items"` -} - -// ChartMuseumSpec defines the desired state of ChartMuseum. -type ChartMuseumSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - CertificateInjection `json:",inline"` - - // +kubebuilder:validation:Optional - Log ChartMuseumLogSpec `json:"log,omitempty"` - - // +kubebuilder:validation:Optional - Authentication ChartMuseumAuthSpec `json:"authentication,omitempty"` - - // +kubebuilder:validation:Optional - Server ChartMuseumServerSpec `json:"server,omitempty"` - - // +kubebuilder:validation:Optional - // Disable some features - Disable ChartMuseumDisableSpec `json:"disable,omitempty"` - - // +kubebuilder:validation:Optional - // Cache stores - Cache ChartMuseumCacheSpec `json:"cache,omitempty"` - - // +kubebuilder:validation:Required - Chart ChartMuseumChartSpec `json:"chart"` -} - -type ChartMuseumServerSpec struct { - // +kubebuilder:validation:Optional - TLS *harbormetav1.ComponentsTLSSpec `json:"tls,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Socket timeout - ReadTimeout *metav1.Duration `json:"readTimeout,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Socket timeout - WriteTimeout *metav1.Duration `json:"writeTimeout,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:default=20971520 - // Max size of post body (in bytes) - MaxUploadSize *int64 `json:"maxUploadSize,omitempty"` - - // +kubebuilder:validation:Optional - // Value to set in the Access-Control-Allow-Origin HTTP header - CORSAllowOrigin string `json:"corsAllowOrigin,omitempty"` -} - -type ChartMuseumChartSpec struct { - // +kubebuilder:validation:Optional - // Form fields which will be queried - PostFormFieldName ChartMuseumPostFormFieldNameSpec `json:"postFormFieldName,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="https?://.*" - // The absolute url for .tgz files in index.yaml - URL string `json:"url,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // Allow chart versions to be re-uploaded without ?force querystring - AllowOverwrite *bool `json:"allowOverwrite,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Enforce the chart museum server only accepts the valid chart version as Helm does - SemanticVersioning2Only bool `json:"onlySemver2"` - - // +kubebuilder:validation:Required - Storage ChartMuseumChartStorageSpec `json:"storage"` - - // +kubebuilder:validation:Optional - Index ChartMuseumChartIndexSpec `json:"index,omitempty"` - - // +kubebuilder:validation:Optional - Repo ChartMuseumChartRepoSpec `json:"repo,omitempty"` -} - -type ChartMuseumChartRepoSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // The length of repo variable - DepthDynamic bool `json:"depthDynamic"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:default=1 - // Levels of nested repos for multitenancy - // Harbor: must be set to 1 to support project namespace - Depth *int32 `json:"depth,omitempty"` -} - -type ChartMuseumChartStorageSpec struct { - ChartMuseumChartStorageDriverSpec `json:",inline"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // Maximum number of objects allowed in storage (per tenant) - MaxStorageObjects *int64 `json:"maxStorageObject,omitempty"` -} - -type ChartMuseumChartStorageDriverSpec struct { - // +kubebuilder:validation:Optional - Amazon *ChartMuseumChartStorageDriverAmazonSpec `json:"amazon,omitempty"` - - // +kubebuilder:validation:Optional - OpenStack *ChartMuseumChartStorageDriverOpenStackSpec `json:"openstack,omitempty"` - - // +kubebuilder:validation:Optional - FileSystem *ChartMuseumChartStorageDriverFilesystemSpec `json:"filesystem,omitempty"` -} - -type ChartMuseumChartStorageDriverAmazonSpec struct { - // +kubebuilder:validation:Required - // S3 bucket to store charts for amazon storage - Bucket string `json:"bucket"` - - // +kubebuilder:validation:Optional - // Alternative s3 endpoint - Endpoint string `json:"endpoint,omitempty"` - - // +kubebuilder:validation:Optional - // Prefix to store charts for the bucket - Prefix string `json:"prefix,omitempty"` - - // +kubebuilder:validation:Optional - // Region of the bucket - Region string `json:"region,omitempty"` - - // +kubebuilder:validation:Optional - // ServerSideEncryption is the algorithm for server side encryption - ServerSideEncryption string `json:"serverSideEncryption,omitempty"` - - // +kubebuilder:validation:Optional - AccessKeyID string `json:"accessKeyID,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - AccessSecretRef string `json:"accessSecretRef,omitempty"` -} - -type ChartMuseumChartStorageDriverOpenStackSpec struct { - // +kubebuilder:validation:Required - // Container to store charts for openstack storage backend - Container string `json:"container"` - - // +kubebuilder:validation:Optional - // Prefix to store charts for the container - Prefix string `json:"prefix,omitempty"` - - // +kubebuilder:validation:Optional - // Region of the container - Region string `json:"region,omitempty"` - - // +kubebuilder:validation:Required - // URL for obtaining an auth token. - // https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth - AuthenticationURL string `json:"authenticationURL"` - - // +kubebuilder:validation:Optional - // Your Openstack tenant name. - // You can either use tenant or tenantid. - Tenant string `json:"tenant,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack tenant ID. - // You can either use tenant or tenantid. - TenantID string `json:"tenantID,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack domain name for Identity v3 API. You can either use domain or domainid. - Domain string `json:"domain,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack domain ID for Identity v3 API. You can either use domain or domainid. - DomainID string `json:"domainID,omitempty"` - - // +kubebuilder:validation:Optional - // The Openstack user name. You can either use username or userid. - Username string `json:"username,omitempty"` - - // +kubebuilder:validation:Optional - // The Openstack user id. You can either use username or userid. - UserID string `json:"userid,omitempty"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Secret name containing the Openstack password. - PasswordRef string `json:"passwordRef,omitempty"` -} - -type ChartMuseumChartStorageDriverFilesystemSpec struct { - // +kubebuilder:validation:Required - VolumeSource corev1.VolumeSource `json:"volumeSource"` - - // +kubebuilder:validation:Optionel - Prefix string `json:"prefix,omitempty"` -} - -type ChartMuseumChartIndexSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // Parallel scan limit for the repo indexer - ParallelLimit *int32 `json:"parallelLimit,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Timestamp drift tolerated between cached and generated index before invalidation - StorageTimestampTolerance *metav1.Duration `json:"storageTimestampTolerance,omitempty"` -} - -type ChartMuseumPostFormFieldNameSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:validation:MinLength=1 - // +kubebuilder:default="chart" - // Form field which will be queried for the chart file content - // Harbor: Expecting chart to use with Harbor - Chart string `json:"chart,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:MinLength=1 - // +kubebuilder:default="prov" - // Form field which will be queried for the provenance file content - // Harbor: Expecting prov to use with Harbor - Provenance string `json:"provenance,omitempty"` -} - -type ChartMuseumLogSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Output structured logs as json - JSON bool `json:"json"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Show debug messages - Debug bool `json:"debug"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Log inbound /health requests - Health bool `json:"health"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // log latency as an integer instead of a string - LatencyInteger *bool `json:"latencyInteger,omitempty"` -} - -type ChartMuseumAuthSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Allow anonymous GET operations when auth is used - AnonymousGet bool `json:"anonymousGet"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Reference to secret containing basic http authentication - // Harbor: Harbor try to connect using chart_controller username - BasicAuthRef string `json:"basicAuthRef,omitempty"` - - // +kubebuilder:validation:Optional - // Bearer authentication specs - Bearer *ChartMuseumAuthBearerSpec `json:"bearer,omitempty"` -} - -type ChartMuseumAuthBearerSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Reference to secret containing authorization server certificate - CertificateRef string `json:"certificateRef"` - - // +kubebuilder:validation:Required - // Authorization server url - Realm string `json:"realm"` - - // +kubebuilder:validation:Required - // Authorization server service name - Service string `json:"service"` -} - -type ChartMuseumDisableSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable all routes prefixed with - API bool `json:"api"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable use of index-cache.yaml - StateFiles bool `json:"statefiles"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Do not allow chart versions to be re-uploaded, even with ?force querystrin - ForceOverwrite bool `json:"forceOverwrite"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable Prometheus metrics - Metrics bool `json:"metrics"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable DELETE route - Delete bool `json:"delete"` -} - -type ChartMuseumCacheSpec struct { - // +kubebuilder:validation:Optional - // Redis cache store - Redis *harbormetav1.RedisConnection `json:"redis,omitempty"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&ChartMuseum{}, &ChartMuseumList{}) -} diff --git a/apis/goharbor.io/v1alpha3/core_types.go b/apis/goharbor.io/v1alpha3/core_types.go index ad588befe..55c3cbfd1 100644 --- a/apis/goharbor.io/v1alpha3/core_types.go +++ b/apis/goharbor.io/v1alpha3/core_types.go @@ -119,9 +119,6 @@ type CoreComponentsSpec struct { // +kubebuilder:validation:Optional ChartRepository *CoreComponentsChartRepositorySpec `json:"chartRepository,omitempty"` - - // +kubebuilder:validation:Optional - NotaryServer *CoreComponentsNotaryServerSpec `json:"notaryServer,omitempty"` } type CoreComponentPortalSpec struct { @@ -234,12 +231,6 @@ type CoreComponentsTrivySpec struct { AdapterURL string `json:"adapterURL"` } -type CoreComponentsNotaryServerSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="https?://.+" - URL string `json:"url"` -} - type CoreConfig struct { // +kubebuilder:validation:Required // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" diff --git a/apis/goharbor.io/v1alpha3/harbor_types.go b/apis/goharbor.io/v1alpha3/harbor_types.go index 18ef053de..4f8c77c02 100644 --- a/apis/goharbor.io/v1alpha3/harbor_types.go +++ b/apis/goharbor.io/v1alpha3/harbor_types.go @@ -6,9 +6,9 @@ import ( "path" "strings" + cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/pkg/image" - cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" @@ -50,24 +50,12 @@ func (h *Harbor) GetComponentSpec(ctx context.Context, component harbormetav1.Co func (h *Harbor) deepCopyComponentSpecInto(_ context.Context, component harbormetav1.Component, spec *harbormetav1.ComponentSpec) { switch component { - case harbormetav1.ChartMuseumComponent: - if h.Spec.ChartMuseum != nil { - h.Spec.ChartMuseum.ComponentSpec.DeepCopyInto(spec) - } case harbormetav1.CoreComponent: h.Spec.Core.ComponentSpec.DeepCopyInto(spec) case harbormetav1.ExporterComponent: h.Spec.Exporter.ComponentSpec.DeepCopyInto(spec) case harbormetav1.JobServiceComponent: h.Spec.JobService.ComponentSpec.DeepCopyInto(spec) - case harbormetav1.NotaryServerComponent: - if h.Spec.Notary != nil { - h.Spec.Notary.Server.DeepCopyInto(spec) - } - case harbormetav1.NotarySignerComponent: - if h.Spec.Notary != nil { - h.Spec.Notary.Signer.DeepCopyInto(spec) - } case harbormetav1.PortalComponent: h.Spec.Portal.ComponentSpec.DeepCopyInto(spec) case harbormetav1.RegistryComponent: @@ -202,30 +190,6 @@ type HarborSpec struct { Version string `json:"version"` } -func (spec *HarborSpec) ValidateNotary() *field.Error { - if spec.Notary == nil { - return nil - } - - if spec.Expose.Notary == nil { - return required(field.NewPath("spec").Child("expose", "notary")) - } - - if spec.Expose.Notary.Ingress == nil { - return required(field.NewPath("spec").Child("expose", "notary", "ingress")) - } - - if spec.Expose.Notary.TLS == nil { - return required(field.NewPath("spec").Child("expose", "notary", "tls")) - } - - if spec.Expose.Notary.TLS.CertificateRef == "" { - return required(field.NewPath("spec").Child("expose", "notary", "tls", "certificateRef")) - } - - return nil -} - func (spec *HarborSpec) ValidateRegistryController() *field.Error { if spec.RegistryController == nil { return nil @@ -269,18 +233,12 @@ type HarborComponentsSpec struct { // +kubebuilder:validation:Optional RegistryController *harbormetav1.ComponentSpec `json:"registryctl,omitempty"` - // +kubebuilder:validation:Optional - ChartMuseum *ChartMuseumComponentSpec `json:"chartmuseum,omitempty"` - // +kubebuilder:validation:Optional Exporter *ExporterComponentSpec `json:"exporter,omitempty"` // +kubebuilder:validation:Optional Trivy *TrivyComponentSpec `json:"trivy,omitempty"` - // +kubebuilder:validation:Optional - Notary *NotaryComponentSpec `json:"notary,omitempty"` - // Skip OpenAPI schema validation // Use validating webhook to do verification (field required) // +kubebuilder:validation:Optional @@ -317,12 +275,6 @@ func (r *HarborDatabaseSpec) GetPostgresqlConnection(component harbormetav1.Comp case harbormetav1.ExporterComponent: // exporter requires to access the database of core component databaseName = harbormetav1.CoreDatabase - case harbormetav1.NotarySignerComponent: - sslMode = r.getSSLModeForNotary() - databaseName = harbormetav1.NotarySignerDatabase - case harbormetav1.NotaryServerComponent: - sslMode = r.getSSLModeForNotary() - databaseName = harbormetav1.NotaryServerDatabase default: return nil, harbormetav1.ErrUnsupportedComponent } @@ -339,32 +291,6 @@ func (r *HarborDatabaseSpec) GetPostgresqlConnection(component harbormetav1.Comp }, nil } -func (r *HarborDatabaseSpec) getSSLModeForNotary() harbormetav1.PostgresSSLMode { - switch r.SSLMode { //nolint:exhaustive - case harbormetav1.PostgresSSLModeAllow: - return harbormetav1.PostgresSSLModePrefer - default: - return r.SSLMode - } -} - -type NotaryComponentSpec struct { - // +kubebuilder:validation:Optional - Server harbormetav1.ComponentSpec `json:"server"` - - // +kubebuilder:validation:Optional - Signer harbormetav1.ComponentSpec `json:"signer"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // Inject migration configuration to notary resources - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` -} - -func (r *NotaryComponentSpec) IsMigrationEnabled() bool { - return r != nil && (r.MigrationEnabled == nil || *r.MigrationEnabled) -} - type ExternalRedisSpec struct { harbormetav1.RedisHostSpec `json:",inline"` harbormetav1.RedisCredentials `json:",inline"` @@ -421,18 +347,6 @@ type RegistryComponentSpec struct { Metrics *harbormetav1.MetricsSpec `json:"metrics,omitempty"` } -type ChartMuseumComponentSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - CertificateInjection `json:",inline"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Harbor defaults ChartMuseum to returning relative urls, - // if you want using absolute url you should enable it - AbsoluteURL bool `json:"absoluteUrl"` -} - type ExporterComponentSpec struct { harbormetav1.ComponentSpec `json:",inline"` @@ -587,17 +501,6 @@ type HarborStorageImageChartStorageS3Spec struct { RegistryStorageDriverS3Spec `json:",inline"` } -func (r *HarborStorageImageChartStorageS3Spec) ChartMuseum() *ChartMuseumChartStorageDriverAmazonSpec { - return &ChartMuseumChartStorageDriverAmazonSpec{ - AccessKeyID: r.AccessKey, - AccessSecretRef: r.SecretKeyRef, - Bucket: r.Bucket, - Endpoint: r.RegionEndpoint, - Prefix: r.RootDirectory, - Region: r.Region, - } -} - func (r *HarborStorageImageChartStorageS3Spec) Registry() *RegistryStorageDriverS3Spec { return &r.RegistryStorageDriverS3Spec } @@ -606,21 +509,6 @@ type HarborStorageImageChartStorageSwiftSpec struct { RegistryStorageDriverSwiftSpec `json:",inline"` } -func (r *HarborStorageImageChartStorageSwiftSpec) ChartMuseum() *ChartMuseumChartStorageDriverOpenStackSpec { - return &ChartMuseumChartStorageDriverOpenStackSpec{ - AuthenticationURL: r.AuthURL, - Container: r.Container, - Domain: r.Domain, - DomainID: r.DomainID, - PasswordRef: r.PasswordRef, - Prefix: r.Prefix, - Region: r.Region, - Tenant: r.Tenant, - TenantID: r.TenantID, - Username: r.Username, - } -} - func (r *HarborStorageImageChartStorageSwiftSpec) Registry() *RegistryStorageDriverSwiftSpec { return &r.RegistryStorageDriverSwiftSpec } @@ -677,10 +565,6 @@ func (r *HarborInternalTLSSpec) GetComponentTLSSpec(certificateRef string) *harb type HarborExposeSpec struct { // +kubebuilder:validation:Required Core HarborExposeComponentSpec `json:"core"` - - // +kubebuilder:validation:Optional - // The ingress of the notary, required when notary component enabled. - Notary *HarborExposeComponentSpec `json:"notary,omitempty"` } type HarborExposeComponentSpec struct { diff --git a/apis/goharbor.io/v1alpha3/harbor_types_test.go b/apis/goharbor.io/v1alpha3/harbor_types_test.go index 5f6131f69..5d12908c8 100644 --- a/apis/goharbor.io/v1alpha3/harbor_types_test.go +++ b/apis/goharbor.io/v1alpha3/harbor_types_test.go @@ -1,77 +1,15 @@ package v1alpha3_test import ( - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1alpha3" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1alpha3" + harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" corev1 "k8s.io/api/core/v1" ) var _ = Describe("HarborTypes", func() { Describe("HarborSpec", func() { - DescribeTable("ValidateNotary", - func(spec *goharborv1.HarborSpec, wantErr bool) { - err := spec.ValidateNotary() - if wantErr { - Ω(err).ShouldNot(BeNil()) - } else { - Ω(err).Should(BeNil()) - } - }, - Entry("Notary is nil", &goharborv1.HarborSpec{}, false), - Entry("Expose notary is nil", &goharborv1.HarborSpec{ - HarborComponentsSpec: goharborv1.HarborComponentsSpec{ - Notary: &goharborv1.NotaryComponentSpec{}, - }, - Expose: goharborv1.HarborExposeSpec{}, - }, true), - Entry("Expose notary ingress is nil", &goharborv1.HarborSpec{ - HarborComponentsSpec: goharborv1.HarborComponentsSpec{ - Notary: &goharborv1.NotaryComponentSpec{}, - }, - Expose: goharborv1.HarborExposeSpec{ - Notary: &goharborv1.HarborExposeComponentSpec{}, - }, - }, true), - Entry("Expose notary ingress tls is nil", &goharborv1.HarborSpec{ - HarborComponentsSpec: goharborv1.HarborComponentsSpec{ - Notary: &goharborv1.NotaryComponentSpec{}, - }, - Expose: goharborv1.HarborExposeSpec{ - Notary: &goharborv1.HarborExposeComponentSpec{ - Ingress: &goharborv1.HarborExposeIngressSpec{Host: "notary.harbor.domain"}, - }, - }, - }, true), - Entry("Expose notary ingress tls certificateRef is empty", &goharborv1.HarborSpec{ - HarborComponentsSpec: goharborv1.HarborComponentsSpec{ - Notary: &goharborv1.NotaryComponentSpec{}, - }, - Expose: goharborv1.HarborExposeSpec{ - Notary: &goharborv1.HarborExposeComponentSpec{ - Ingress: &goharborv1.HarborExposeIngressSpec{Host: "notary.harbor.domain"}, - TLS: &harbormetav1.ComponentsTLSSpec{ - CertificateRef: "", - }, - }, - }, - }, true), - Entry("Valid", &goharborv1.HarborSpec{ - HarborComponentsSpec: goharborv1.HarborComponentsSpec{ - Notary: &goharborv1.NotaryComponentSpec{}, - }, - Expose: goharborv1.HarborExposeSpec{ - Notary: &goharborv1.HarborExposeComponentSpec{ - Ingress: &goharborv1.HarborExposeIngressSpec{Host: "notary.harbor.domain"}, - TLS: &harbormetav1.ComponentsTLSSpec{ - CertificateRef: "cert", - }, - }, - }, - }, false), - ) - DescribeTable("ValidateRegistryController", func(spec *goharborv1.HarborSpec, wantErr bool) { err := spec.ValidateRegistryController() diff --git a/apis/goharbor.io/v1alpha3/harborcluster_conversion.go b/apis/goharbor.io/v1alpha3/harborcluster_conversion.go index 700d2b7ff..ea72f06fe 100644 --- a/apis/goharbor.io/v1alpha3/harborcluster_conversion.go +++ b/apis/goharbor.io/v1alpha3/harborcluster_conversion.go @@ -85,8 +85,6 @@ func Convert_v1alpha3_HarborSpec_To_v1beta1_HarborSpec(src *HarborSpec, dst *v1b } } - Convert_v1alpha3_HarborExposeSpec_To_v1beta1_HarborExposeSpec(&src.Expose, &dst.Expose) - Convert_v1alpha3_HarborComponentSpec_To_v1beta1_EmbeddedHarborComponentsSpec(&src.HarborComponentsSpec, &dst.EmbeddedHarborComponentsSpec) } @@ -97,16 +95,6 @@ func Convert_v1alpha3_HarborComponentSpec_To_v1beta1_EmbeddedHarborComponentsSpe Convert_v1alpha3_JobServiceComponentSpec_To_v1beta1_JobServiceComponentSpec(&src.JobService, &dst.JobService) - if src.ChartMuseum != nil { - dst.ChartMuseum = &v1beta1.ChartMuseumComponentSpec{} - Convert_v1alpha3_ChartMuseumComponentSpec_To_v1beta1_ChartMuseumComponentSpec(src.ChartMuseum, dst.ChartMuseum) - } - - if src.Notary != nil { - dst.Notary = &v1beta1.NotaryComponentSpec{} - Convert_v1alpha3_NotaryComponentSpec_To_v1beta1_NotaryComponentSpec(src.Notary, dst.Notary) - } - if src.Trivy != nil { dst.Trivy = &v1beta1.TrivyComponentSpec{} Convert_v1alpha3_TrivyComponentSpec_To_v1beta1_TrivyComponentSpec(src.Trivy, dst.Trivy) @@ -154,14 +142,6 @@ func Convert_v1alpha3_JobServiceComponentSpec_To_v1beta1_JobServiceComponentSpec } } -func Convert_v1alpha3_ChartMuseumComponentSpec_To_v1beta1_ChartMuseumComponentSpec(src *ChartMuseumComponentSpec, dst *v1beta1.ChartMuseumComponentSpec) { //nolint - dst.AbsoluteURL = src.AbsoluteURL - dst.ComponentSpec = src.ComponentSpec - dst.CertificateInjection = v1beta1.CertificateInjection{ - CertificateRefs: src.CertificateInjection.CertificateRefs, - } -} - func Convert_v1alpha3_ExporterComponentSpec_To_v1beta1_ExporterComponentSpec(src *ExporterComponentSpec, dst *v1beta1.ExporterComponentSpec) { //nolint dst.ComponentSpec = src.ComponentSpec dst.Port = src.Port @@ -200,12 +180,6 @@ func Convert_v1alpha3_HarborStorageTrivyStorageSpec_To_v1beta1_HarborStorageTriv } } -func Convert_v1alpha3_NotaryComponentSpec_To_v1beta1_NotaryComponentSpec(src *NotaryComponentSpec, dst *v1beta1.NotaryComponentSpec) { //nolint - dst.Server = src.Server - dst.Signer = src.Signer - dst.MigrationEnabled = src.MigrationEnabled -} - func Convert_v1alpha3_Cache_To_v1beta1_Cache(src *Cache, dst *v1beta1.Cache) { //nolint if src.RedisSpec != nil { dst.Kind = v1beta1.KindCacheRedisFailover @@ -345,15 +319,6 @@ func Convert_v1alpha3_MinIOSpec_to_v1beta1_MinIOSpec(src *MinIOSpec, dst *v1beta } } -func Convert_v1alpha3_HarborExposeSpec_To_v1beta1_HarborExposeSpec(src *HarborExposeSpec, dst *v1beta1.HarborExposeSpec) { //nolint - Convert_v1alpha3_HarborExposeComponentSpec_To_v1beta1_HarborExposeComponentSpec(&src.Core, &dst.Core) - - if src.Notary != nil { - dst.Notary = &v1beta1.HarborExposeComponentSpec{} - Convert_v1alpha3_HarborExposeComponentSpec_To_v1beta1_HarborExposeComponentSpec(src.Notary, dst.Notary) - } -} - func Convert_v1alpha3_HarborExposeComponentSpec_To_v1beta1_HarborExposeComponentSpec(src *HarborExposeComponentSpec, dst *v1beta1.HarborExposeComponentSpec) { //nolint if src.Ingress != nil { dst.Ingress = &v1beta1.HarborExposeIngressSpec{} @@ -548,8 +513,6 @@ func Convert_v1beta1_EmbeddedHarborSpec_To_v1alpha3_HarborSpec(src *v1beta1.Embe } } - Convert_v1beta1_HarborExposeSpec_To_v1alpha3_HarborExposeSpec(&src.Expose, &dst.Expose) - Convert_v1beta1_EmbeddedHarborComponentsSpec_To_v1alpha3_HarborComponentSpec(&src.EmbeddedHarborComponentsSpec, &dst.HarborComponentsSpec) } @@ -560,16 +523,6 @@ func Convert_v1beta1_EmbeddedHarborComponentsSpec_To_v1alpha3_HarborComponentSpe Convert_v1beta1_JobServiceComponentSpec_To_v1alpha3_JobServiceComponentSpec(&src.JobService, &dst.JobService) - if src.ChartMuseum != nil { - dst.ChartMuseum = &ChartMuseumComponentSpec{} - Convert_v1beta1_ChartMuseumComponentSpec_To_v1alpha3_ChartMuseumComponentSpec(src.ChartMuseum, dst.ChartMuseum) - } - - if src.Notary != nil { - dst.Notary = &NotaryComponentSpec{} - Convert_v1beta1_NotaryComponentSpec_To_v1alpha3_NotaryComponentSpec(src.Notary, dst.Notary) - } - if src.Trivy != nil { dst.Trivy = &TrivyComponentSpec{} Convert_v1beta1_TrivyComponentSpec_To_v1alpha3_TrivyComponentSpec(src.Trivy, dst.Trivy) @@ -611,12 +564,6 @@ func Convert_v1beta1_JobServiceComponentSpec_To_v1alpha3_JobServiceComponentSpec dst.CertificateInjection = CertificateInjection{CertificateRefs: src.CertificateInjection.CertificateRefs} } -func Convert_v1beta1_ChartMuseumComponentSpec_To_v1alpha3_ChartMuseumComponentSpec(src *v1beta1.ChartMuseumComponentSpec, dst *ChartMuseumComponentSpec) { //nolint - dst.AbsoluteURL = src.AbsoluteURL - dst.ComponentSpec = src.ComponentSpec - dst.CertificateInjection = CertificateInjection{CertificateRefs: src.CertificateInjection.CertificateRefs} -} - func Convert_v1beta1_ExporterComponentSpec_To_v1alpha3_ExporterComponentSpec(src *v1beta1.ExporterComponentSpec, dst *ExporterComponentSpec) { //nolint dst.ComponentSpec = src.ComponentSpec dst.Port = src.Port @@ -655,12 +602,6 @@ func Convert_v1beta1_HarborStorageTrivyStorageSpec_To_v1alpha3_HarborStorageTriv } } -func Convert_v1beta1_NotaryComponentSpec_To_v1alpha3_NotaryComponentSpec(src *v1beta1.NotaryComponentSpec, dst *NotaryComponentSpec) { //nolint - dst.Server = src.Server - dst.Signer = src.Signer - dst.MigrationEnabled = src.MigrationEnabled -} - func Convert_v1beta1_ExternalRedisSpec_To_v1alpha3_ExternalRedisSpec(src *v1beta1.ExternalRedisSpec, dst *ExternalRedisSpec) { //nolint dst.RedisCredentials = src.RedisCredentials dst.RedisHostSpec = src.RedisHostSpec @@ -746,15 +687,6 @@ func Convert_v1beta1_MinIOSpec_To_v1alpha3_MinIOSpec(src *v1beta1.MinIOSpec, dst } } -func Convert_v1beta1_HarborExposeSpec_To_v1alpha3_HarborExposeSpec(src *v1beta1.HarborExposeSpec, dst *HarborExposeSpec) { //nolint - Convert_v1beta1_HarborExposeComponentSpec_To_v1alpha3_HarborExposeComponentSpec(&src.Core, &dst.Core) - - if src.Notary != nil { - dst.Notary = &HarborExposeComponentSpec{} - Convert_v1beta1_HarborExposeComponentSpec_To_v1alpha3_HarborExposeComponentSpec(src.Notary, dst.Notary) - } -} - func Convert_v1beta1_HarborExposeComponentSpec_To_v1alpha3_HarborExposeComponentSpec(src *v1beta1.HarborExposeComponentSpec, dst *HarborExposeComponentSpec) { //nolint if src.Ingress != nil { dst.Ingress = &HarborExposeIngressSpec{} diff --git a/apis/goharbor.io/v1alpha3/notary_types.go b/apis/goharbor.io/v1alpha3/notary_types.go deleted file mode 100644 index 76ef8bf14..000000000 --- a/apis/goharbor.io/v1alpha3/notary_types.go +++ /dev/null @@ -1,22 +0,0 @@ -package v1alpha3 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" -) - -type NotaryLoggingSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default="info" - Level harbormetav1.NotaryLogLevel `json:"level,omitempty"` -} - -type NotaryStorageSpec struct { - // +kubebuilder:validation:Required - Postgres harbormetav1.PostgresConnectionWithParameters `json:"postgres"` - - // TODO Add support for mysql and memory -} - -func (n *NotaryStorageSpec) GetPasswordFieldKey() string { - return harbormetav1.PostgresqlPasswordKey -} diff --git a/apis/goharbor.io/v1alpha3/notaryserver_conversion.go b/apis/goharbor.io/v1alpha3/notaryserver_conversion.go deleted file mode 100644 index 9ec09518a..000000000 --- a/apis/goharbor.io/v1alpha3/notaryserver_conversion.go +++ /dev/null @@ -1,16 +0,0 @@ -package v1alpha3 - -import ( - "github.com/plotly/harbor-operator/pkg/convert" - "sigs.k8s.io/controller-runtime/pkg/conversion" -) - -var _ conversion.Convertible = &NotaryServer{} - -func (n *NotaryServer) ConvertTo(dstRaw conversion.Hub) error { - return convert.ConverterObject(n).To(dstRaw) -} - -func (n *NotaryServer) ConvertFrom(srcRaw conversion.Hub) error { - return convert.ConverterObject(n).From(srcRaw) -} diff --git a/apis/goharbor.io/v1alpha3/notaryserver_types.go b/apis/goharbor.io/v1alpha3/notaryserver_types.go deleted file mode 100644 index 567c0dd2b..000000000 --- a/apis/goharbor.io/v1alpha3/notaryserver_types.go +++ /dev/null @@ -1,111 +0,0 @@ -package v1alpha3 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +k8s:openapi-gen=true -// +resource:path=notaryserver -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// NotaryServer is the Schema for the NotaryServer API. -type NotaryServer struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec NotaryServerSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// NotaryServerList contains a list of NotaryServer. -type NotaryServerList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []NotaryServer `json:"items"` -} - -// NotaryServerSpec defines the desired state of NotaryServer. -type NotaryServerSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - // +kubebuilder:validation:Optional - TLS *harbormetav1.ComponentsTLSSpec `json:"tls,omitempty"` - - // +kubebuilder:validation:Required - TrustService NotaryServerTrustServiceSpec `json:"trustService"` - - // +kubebuilder:validation:Optional - Logging NotaryLoggingSpec `json:"logging,omitempty"` - - // +kubebuilder:validation:Required - Storage NotaryStorageSpec `json:"storage,omitempty"` - - // +kubebuilder:validation:Optional - Authentication *NotaryServerAuthSpec `json:"authentication,omitempty"` - - // +kubebuilder:validation:Optional - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` -} - -type NotaryServerTrustServiceSpec struct { - // +kubebuilder:validation:Optional - Remote *NotaryServerTrustServiceRemoteSpec `json:"remote,omitempty"` -} - -type NotaryServerTrustServiceRemoteSpec struct { - // +kubebuilder:validation:Required - Host string `json:"host"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:validation:ExclusiveMinimum=true - // +kubebuilder:default=443 - Port int64 `json:"port,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=ecdsa - // +kubebuilder:validation:Enum=ecdsa;rsa;ed25519 - KeyAlgorithm string `json:"keyAlgorithm,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef,omitempty"` -} - -type NotaryServerAuthSpec struct { - // +kubebuilder:validation:Required - Token NotaryServerAuthTokenSpec `json:"token"` -} - -type NotaryServerAuthTokenSpec struct { - // +kubebuilder:validation:Required - Realm string `json:"realm"` - - // +kubebuilder:validation:Required - Service string `json:"service"` - - // +kubebuilder:validation:Required - Issuer string `json:"issuer"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - AutoRedirect *bool `json:"autoredirect,omitempty"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&NotaryServer{}, &NotaryServerList{}) -} diff --git a/apis/goharbor.io/v1alpha3/notarysigner_conversion.go b/apis/goharbor.io/v1alpha3/notarysigner_conversion.go deleted file mode 100644 index edda230c7..000000000 --- a/apis/goharbor.io/v1alpha3/notarysigner_conversion.go +++ /dev/null @@ -1,16 +0,0 @@ -package v1alpha3 - -import ( - "github.com/plotly/harbor-operator/pkg/convert" - "sigs.k8s.io/controller-runtime/pkg/conversion" -) - -var _ conversion.Convertible = &NotarySigner{} - -func (n *NotarySigner) ConvertTo(dstRaw conversion.Hub) error { - return convert.ConverterObject(n).To(dstRaw) -} - -func (n *NotarySigner) ConvertFrom(srcRaw conversion.Hub) error { - return convert.ConverterObject(n).From(srcRaw) -} diff --git a/apis/goharbor.io/v1alpha3/notarysigner_types.go b/apis/goharbor.io/v1alpha3/notarysigner_types.go deleted file mode 100644 index 72d7972c1..000000000 --- a/apis/goharbor.io/v1alpha3/notarysigner_types.go +++ /dev/null @@ -1,72 +0,0 @@ -package v1alpha3 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const NotarySignerAPIPort = 7899 - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +k8s:openapi-gen=true -// +resource:path=notarysigner -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// NotarySigner is the Schema for the NotarySigner API. -type NotarySigner struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec NotarySignerSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// NotarySignerList contains a list of NotarySigner. -type NotarySignerList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []NotarySigner `json:"items"` -} - -// NotarySignerSpec defines the desired state of NotarySigner. -type NotarySignerSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - // +kubebuilder:validation:Required - Authentication NotarySignerAuthenticationSpec `json:"authentatication"` - - // +kubebuilder:validation:Optional - Logging NotaryLoggingSpec `json:"logging,omitempty"` - - // +kubebuilder:validation:Required - Storage NotarySignerStorageSpec `json:"storage"` - - // +kubebuilder:validation:Optional - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` -} - -type NotarySignerAuthenticationSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef"` -} - -type NotarySignerStorageSpec struct { - NotaryStorageSpec `json:",inline"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - AliasesRef string `json:"aliasesRef"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&NotarySigner{}, &NotarySignerList{}) -} diff --git a/apis/goharbor.io/v1alpha3/zz_generated.deepcopy.go b/apis/goharbor.io/v1alpha3/zz_generated.deepcopy.go index ffb9b1318..6f0eb2f6a 100644 --- a/apis/goharbor.io/v1alpha3/zz_generated.deepcopy.go +++ b/apis/goharbor.io/v1alpha3/zz_generated.deepcopy.go @@ -51,411 +51,6 @@ func (in *CertificateInjection) DeepCopy() *CertificateInjection { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseum) DeepCopyInto(out *ChartMuseum) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseum. -func (in *ChartMuseum) DeepCopy() *ChartMuseum { - if in == nil { - return nil - } - out := new(ChartMuseum) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartMuseum) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumAuthBearerSpec) DeepCopyInto(out *ChartMuseumAuthBearerSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumAuthBearerSpec. -func (in *ChartMuseumAuthBearerSpec) DeepCopy() *ChartMuseumAuthBearerSpec { - if in == nil { - return nil - } - out := new(ChartMuseumAuthBearerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumAuthSpec) DeepCopyInto(out *ChartMuseumAuthSpec) { - *out = *in - if in.Bearer != nil { - in, out := &in.Bearer, &out.Bearer - *out = new(ChartMuseumAuthBearerSpec) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumAuthSpec. -func (in *ChartMuseumAuthSpec) DeepCopy() *ChartMuseumAuthSpec { - if in == nil { - return nil - } - out := new(ChartMuseumAuthSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumCacheSpec) DeepCopyInto(out *ChartMuseumCacheSpec) { - *out = *in - if in.Redis != nil { - in, out := &in.Redis, &out.Redis - *out = new(v1alpha1.RedisConnection) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumCacheSpec. -func (in *ChartMuseumCacheSpec) DeepCopy() *ChartMuseumCacheSpec { - if in == nil { - return nil - } - out := new(ChartMuseumCacheSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartIndexSpec) DeepCopyInto(out *ChartMuseumChartIndexSpec) { - *out = *in - if in.ParallelLimit != nil { - in, out := &in.ParallelLimit, &out.ParallelLimit - *out = new(int32) - **out = **in - } - if in.StorageTimestampTolerance != nil { - in, out := &in.StorageTimestampTolerance, &out.StorageTimestampTolerance - *out = new(v1.Duration) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartIndexSpec. -func (in *ChartMuseumChartIndexSpec) DeepCopy() *ChartMuseumChartIndexSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartIndexSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartRepoSpec) DeepCopyInto(out *ChartMuseumChartRepoSpec) { - *out = *in - if in.Depth != nil { - in, out := &in.Depth, &out.Depth - *out = new(int32) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartRepoSpec. -func (in *ChartMuseumChartRepoSpec) DeepCopy() *ChartMuseumChartRepoSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartRepoSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartSpec) DeepCopyInto(out *ChartMuseumChartSpec) { - *out = *in - out.PostFormFieldName = in.PostFormFieldName - if in.AllowOverwrite != nil { - in, out := &in.AllowOverwrite, &out.AllowOverwrite - *out = new(bool) - **out = **in - } - in.Storage.DeepCopyInto(&out.Storage) - in.Index.DeepCopyInto(&out.Index) - in.Repo.DeepCopyInto(&out.Repo) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartSpec. -func (in *ChartMuseumChartSpec) DeepCopy() *ChartMuseumChartSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverAmazonSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverAmazonSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverAmazonSpec. -func (in *ChartMuseumChartStorageDriverAmazonSpec) DeepCopy() *ChartMuseumChartStorageDriverAmazonSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverAmazonSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverFilesystemSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverFilesystemSpec) { - *out = *in - in.VolumeSource.DeepCopyInto(&out.VolumeSource) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverFilesystemSpec. -func (in *ChartMuseumChartStorageDriverFilesystemSpec) DeepCopy() *ChartMuseumChartStorageDriverFilesystemSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverFilesystemSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverOpenStackSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverOpenStackSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverOpenStackSpec. -func (in *ChartMuseumChartStorageDriverOpenStackSpec) DeepCopy() *ChartMuseumChartStorageDriverOpenStackSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverOpenStackSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverSpec) { - *out = *in - if in.Amazon != nil { - in, out := &in.Amazon, &out.Amazon - *out = new(ChartMuseumChartStorageDriverAmazonSpec) - **out = **in - } - if in.OpenStack != nil { - in, out := &in.OpenStack, &out.OpenStack - *out = new(ChartMuseumChartStorageDriverOpenStackSpec) - **out = **in - } - if in.FileSystem != nil { - in, out := &in.FileSystem, &out.FileSystem - *out = new(ChartMuseumChartStorageDriverFilesystemSpec) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverSpec. -func (in *ChartMuseumChartStorageDriverSpec) DeepCopy() *ChartMuseumChartStorageDriverSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageSpec) DeepCopyInto(out *ChartMuseumChartStorageSpec) { - *out = *in - in.ChartMuseumChartStorageDriverSpec.DeepCopyInto(&out.ChartMuseumChartStorageDriverSpec) - if in.MaxStorageObjects != nil { - in, out := &in.MaxStorageObjects, &out.MaxStorageObjects - *out = new(int64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageSpec. -func (in *ChartMuseumChartStorageSpec) DeepCopy() *ChartMuseumChartStorageSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumComponentSpec) DeepCopyInto(out *ChartMuseumComponentSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - in.CertificateInjection.DeepCopyInto(&out.CertificateInjection) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumComponentSpec. -func (in *ChartMuseumComponentSpec) DeepCopy() *ChartMuseumComponentSpec { - if in == nil { - return nil - } - out := new(ChartMuseumComponentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumDisableSpec) DeepCopyInto(out *ChartMuseumDisableSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumDisableSpec. -func (in *ChartMuseumDisableSpec) DeepCopy() *ChartMuseumDisableSpec { - if in == nil { - return nil - } - out := new(ChartMuseumDisableSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumList) DeepCopyInto(out *ChartMuseumList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ChartMuseum, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumList. -func (in *ChartMuseumList) DeepCopy() *ChartMuseumList { - if in == nil { - return nil - } - out := new(ChartMuseumList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartMuseumList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumLogSpec) DeepCopyInto(out *ChartMuseumLogSpec) { - *out = *in - if in.LatencyInteger != nil { - in, out := &in.LatencyInteger, &out.LatencyInteger - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumLogSpec. -func (in *ChartMuseumLogSpec) DeepCopy() *ChartMuseumLogSpec { - if in == nil { - return nil - } - out := new(ChartMuseumLogSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumPostFormFieldNameSpec) DeepCopyInto(out *ChartMuseumPostFormFieldNameSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumPostFormFieldNameSpec. -func (in *ChartMuseumPostFormFieldNameSpec) DeepCopy() *ChartMuseumPostFormFieldNameSpec { - if in == nil { - return nil - } - out := new(ChartMuseumPostFormFieldNameSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumServerSpec) DeepCopyInto(out *ChartMuseumServerSpec) { - *out = *in - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(v1alpha1.ComponentsTLSSpec) - **out = **in - } - if in.ReadTimeout != nil { - in, out := &in.ReadTimeout, &out.ReadTimeout - *out = new(v1.Duration) - **out = **in - } - if in.WriteTimeout != nil { - in, out := &in.WriteTimeout, &out.WriteTimeout - *out = new(v1.Duration) - **out = **in - } - if in.MaxUploadSize != nil { - in, out := &in.MaxUploadSize, &out.MaxUploadSize - *out = new(int64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumServerSpec. -func (in *ChartMuseumServerSpec) DeepCopy() *ChartMuseumServerSpec { - if in == nil { - return nil - } - out := new(ChartMuseumServerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumSpec) DeepCopyInto(out *ChartMuseumSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - in.CertificateInjection.DeepCopyInto(&out.CertificateInjection) - in.Log.DeepCopyInto(&out.Log) - in.Authentication.DeepCopyInto(&out.Authentication) - in.Server.DeepCopyInto(&out.Server) - out.Disable = in.Disable - in.Cache.DeepCopyInto(&out.Cache) - in.Chart.DeepCopyInto(&out.Chart) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumSpec. -func (in *ChartMuseumSpec) DeepCopy() *ChartMuseumSpec { - if in == nil { - return nil - } - out := new(ChartMuseumSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Core) DeepCopyInto(out *Core) { *out = *in @@ -546,22 +141,7 @@ func (in *CoreComponentsJobServiceSpec) DeepCopy() *CoreComponentsJobServiceSpec if in == nil { return nil } - out := new(CoreComponentsJobServiceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CoreComponentsNotaryServerSpec) DeepCopyInto(out *CoreComponentsNotaryServerSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreComponentsNotaryServerSpec. -func (in *CoreComponentsNotaryServerSpec) DeepCopy() *CoreComponentsNotaryServerSpec { - if in == nil { - return nil - } - out := new(CoreComponentsNotaryServerSpec) + out := new(CoreComponentsJobServiceSpec) in.DeepCopyInto(out) return out } @@ -624,11 +204,6 @@ func (in *CoreComponentsSpec) DeepCopyInto(out *CoreComponentsSpec) { *out = new(CoreComponentsChartRepositorySpec) **out = **in } - if in.NotaryServer != nil { - in, out := &in.NotaryServer, &out.NotaryServer - *out = new(CoreComponentsNotaryServerSpec) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreComponentsSpec. @@ -1232,11 +807,6 @@ func (in *HarborComponentsSpec) DeepCopyInto(out *HarborComponentsSpec) { *out = new(v1alpha1.ComponentSpec) (*in).DeepCopyInto(*out) } - if in.ChartMuseum != nil { - in, out := &in.ChartMuseum, &out.ChartMuseum - *out = new(ChartMuseumComponentSpec) - (*in).DeepCopyInto(*out) - } if in.Exporter != nil { in, out := &in.Exporter, &out.Exporter *out = new(ExporterComponentSpec) @@ -1247,11 +817,6 @@ func (in *HarborComponentsSpec) DeepCopyInto(out *HarborComponentsSpec) { *out = new(TrivyComponentSpec) (*in).DeepCopyInto(*out) } - if in.Notary != nil { - in, out := &in.Notary, &out.Notary - *out = new(NotaryComponentSpec) - (*in).DeepCopyInto(*out) - } if in.Redis != nil { in, out := &in.Redis, &out.Redis *out = new(ExternalRedisSpec) @@ -1371,11 +936,6 @@ func (in *HarborExposeIngressSpec) DeepCopy() *HarborExposeIngressSpec { func (in *HarborExposeSpec) DeepCopyInto(out *HarborExposeSpec) { *out = *in in.Core.DeepCopyInto(&out.Core) - if in.Notary != nil { - in, out := &in.Notary, &out.Notary - *out = new(HarborExposeComponentSpec) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HarborExposeSpec. @@ -1953,337 +1513,6 @@ func (in *MinIOSpec) DeepCopy() *MinIOSpec { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryComponentSpec) DeepCopyInto(out *NotaryComponentSpec) { - *out = *in - in.Server.DeepCopyInto(&out.Server) - in.Signer.DeepCopyInto(&out.Signer) - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryComponentSpec. -func (in *NotaryComponentSpec) DeepCopy() *NotaryComponentSpec { - if in == nil { - return nil - } - out := new(NotaryComponentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryLoggingSpec) DeepCopyInto(out *NotaryLoggingSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryLoggingSpec. -func (in *NotaryLoggingSpec) DeepCopy() *NotaryLoggingSpec { - if in == nil { - return nil - } - out := new(NotaryLoggingSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServer) DeepCopyInto(out *NotaryServer) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServer. -func (in *NotaryServer) DeepCopy() *NotaryServer { - if in == nil { - return nil - } - out := new(NotaryServer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotaryServer) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerAuthSpec) DeepCopyInto(out *NotaryServerAuthSpec) { - *out = *in - in.Token.DeepCopyInto(&out.Token) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerAuthSpec. -func (in *NotaryServerAuthSpec) DeepCopy() *NotaryServerAuthSpec { - if in == nil { - return nil - } - out := new(NotaryServerAuthSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerAuthTokenSpec) DeepCopyInto(out *NotaryServerAuthTokenSpec) { - *out = *in - if in.AutoRedirect != nil { - in, out := &in.AutoRedirect, &out.AutoRedirect - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerAuthTokenSpec. -func (in *NotaryServerAuthTokenSpec) DeepCopy() *NotaryServerAuthTokenSpec { - if in == nil { - return nil - } - out := new(NotaryServerAuthTokenSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerList) DeepCopyInto(out *NotaryServerList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]NotaryServer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerList. -func (in *NotaryServerList) DeepCopy() *NotaryServerList { - if in == nil { - return nil - } - out := new(NotaryServerList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotaryServerList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerSpec) DeepCopyInto(out *NotaryServerSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(v1alpha1.ComponentsTLSSpec) - **out = **in - } - in.TrustService.DeepCopyInto(&out.TrustService) - out.Logging = in.Logging - in.Storage.DeepCopyInto(&out.Storage) - if in.Authentication != nil { - in, out := &in.Authentication, &out.Authentication - *out = new(NotaryServerAuthSpec) - (*in).DeepCopyInto(*out) - } - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerSpec. -func (in *NotaryServerSpec) DeepCopy() *NotaryServerSpec { - if in == nil { - return nil - } - out := new(NotaryServerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerTrustServiceRemoteSpec) DeepCopyInto(out *NotaryServerTrustServiceRemoteSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerTrustServiceRemoteSpec. -func (in *NotaryServerTrustServiceRemoteSpec) DeepCopy() *NotaryServerTrustServiceRemoteSpec { - if in == nil { - return nil - } - out := new(NotaryServerTrustServiceRemoteSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerTrustServiceSpec) DeepCopyInto(out *NotaryServerTrustServiceSpec) { - *out = *in - if in.Remote != nil { - in, out := &in.Remote, &out.Remote - *out = new(NotaryServerTrustServiceRemoteSpec) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerTrustServiceSpec. -func (in *NotaryServerTrustServiceSpec) DeepCopy() *NotaryServerTrustServiceSpec { - if in == nil { - return nil - } - out := new(NotaryServerTrustServiceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySigner) DeepCopyInto(out *NotarySigner) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySigner. -func (in *NotarySigner) DeepCopy() *NotarySigner { - if in == nil { - return nil - } - out := new(NotarySigner) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotarySigner) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerAuthenticationSpec) DeepCopyInto(out *NotarySignerAuthenticationSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerAuthenticationSpec. -func (in *NotarySignerAuthenticationSpec) DeepCopy() *NotarySignerAuthenticationSpec { - if in == nil { - return nil - } - out := new(NotarySignerAuthenticationSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerList) DeepCopyInto(out *NotarySignerList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]NotarySigner, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerList. -func (in *NotarySignerList) DeepCopy() *NotarySignerList { - if in == nil { - return nil - } - out := new(NotarySignerList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotarySignerList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerSpec) DeepCopyInto(out *NotarySignerSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - out.Authentication = in.Authentication - out.Logging = in.Logging - in.Storage.DeepCopyInto(&out.Storage) - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerSpec. -func (in *NotarySignerSpec) DeepCopy() *NotarySignerSpec { - if in == nil { - return nil - } - out := new(NotarySignerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerStorageSpec) DeepCopyInto(out *NotarySignerStorageSpec) { - *out = *in - in.NotaryStorageSpec.DeepCopyInto(&out.NotaryStorageSpec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerStorageSpec. -func (in *NotarySignerStorageSpec) DeepCopy() *NotarySignerStorageSpec { - if in == nil { - return nil - } - out := new(NotarySignerStorageSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryStorageSpec) DeepCopyInto(out *NotaryStorageSpec) { - *out = *in - in.Postgres.DeepCopyInto(&out.Postgres) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryStorageSpec. -func (in *NotaryStorageSpec) DeepCopy() *NotaryStorageSpec { - if in == nil { - return nil - } - out := new(NotaryStorageSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Portal) DeepCopyInto(out *Portal) { *out = *in diff --git a/apis/goharbor.io/v1beta1/chartmuseum_conversion.go b/apis/goharbor.io/v1beta1/chartmuseum_conversion.go deleted file mode 100644 index f2ca1f517..000000000 --- a/apis/goharbor.io/v1beta1/chartmuseum_conversion.go +++ /dev/null @@ -1,7 +0,0 @@ -package v1beta1 - -import "sigs.k8s.io/controller-runtime/pkg/conversion" - -var _ conversion.Hub = &ChartMuseum{} - -func (c *ChartMuseum) Hub() {} diff --git a/apis/goharbor.io/v1beta1/chartmuseum_types.go b/apis/goharbor.io/v1beta1/chartmuseum_types.go deleted file mode 100644 index 7b347dc2a..000000000 --- a/apis/goharbor.io/v1beta1/chartmuseum_types.go +++ /dev/null @@ -1,426 +0,0 @@ -package v1beta1 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +kubebuilder:storageversion -// +k8s:openapi-gen=true -// +resource:path=chartmuseum -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// ChartMuseum is the Schema for the ChartMuseum API. -type ChartMuseum struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec ChartMuseumSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// ChartMuseumList contains a list of ChartMuseum. -type ChartMuseumList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []ChartMuseum `json:"items"` -} - -// ChartMuseumSpec defines the desired state of ChartMuseum. -type ChartMuseumSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - CertificateInjection `json:",inline"` - - // +kubebuilder:validation:Optional - Log ChartMuseumLogSpec `json:"log,omitempty"` - - // +kubebuilder:validation:Optional - Authentication ChartMuseumAuthSpec `json:"authentication,omitempty"` - - // +kubebuilder:validation:Optional - Server ChartMuseumServerSpec `json:"server,omitempty"` - - // +kubebuilder:validation:Optional - // Disable some features - Disable ChartMuseumDisableSpec `json:"disable,omitempty"` - - // +kubebuilder:validation:Optional - // Cache stores - Cache ChartMuseumCacheSpec `json:"cache,omitempty"` - - // +kubebuilder:validation:Required - Chart ChartMuseumChartSpec `json:"chart"` - - // +kubebuilder:validation:Optional - Network *harbormetav1.Network `json:"network,omitempty"` -} - -type ChartMuseumServerSpec struct { - // +kubebuilder:validation:Optional - TLS *harbormetav1.ComponentsTLSSpec `json:"tls,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Socket timeout - ReadTimeout *metav1.Duration `json:"readTimeout,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Socket timeout - WriteTimeout *metav1.Duration `json:"writeTimeout,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:default=20971520 - // Max size of post body (in bytes) - MaxUploadSize *int64 `json:"maxUploadSize,omitempty"` - - // +kubebuilder:validation:Optional - // Value to set in the Access-Control-Allow-Origin HTTP header - CORSAllowOrigin string `json:"corsAllowOrigin,omitempty"` -} - -type ChartMuseumChartSpec struct { - // +kubebuilder:validation:Optional - // Form fields which will be queried - PostFormFieldName ChartMuseumPostFormFieldNameSpec `json:"postFormFieldName,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="https?://.*" - // The absolute url for .tgz files in index.yaml - URL string `json:"url,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // Allow chart versions to be re-uploaded without ?force querystring - AllowOverwrite *bool `json:"allowOverwrite,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Enforce the chart museum server only accepts the valid chart version as Helm does - SemanticVersioning2Only bool `json:"onlySemver2"` - - // +kubebuilder:validation:Required - Storage ChartMuseumChartStorageSpec `json:"storage"` - - // +kubebuilder:validation:Optional - Index ChartMuseumChartIndexSpec `json:"index,omitempty"` - - // +kubebuilder:validation:Optional - Repo ChartMuseumChartRepoSpec `json:"repo,omitempty"` -} - -type ChartMuseumChartRepoSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // The length of repo variable - DepthDynamic bool `json:"depthDynamic"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:default=1 - // Levels of nested repos for multitenancy - // Harbor: must be set to 1 to support project namespace - Depth *int32 `json:"depth,omitempty"` -} - -type ChartMuseumChartStorageSpec struct { - ChartMuseumChartStorageDriverSpec `json:",inline"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // Maximum number of objects allowed in storage (per tenant) - MaxStorageObjects *int64 `json:"maxStorageObject,omitempty"` -} - -type ChartMuseumChartStorageDriverSpec struct { - // +kubebuilder:validation:Optional - Amazon *ChartMuseumChartStorageDriverAmazonSpec `json:"amazon,omitempty"` - - // +kubebuilder:validation:Optional - OpenStack *ChartMuseumChartStorageDriverOpenStackSpec `json:"openstack,omitempty"` - - // +kubebuilder:validation:Optional - FileSystem *ChartMuseumChartStorageDriverFilesystemSpec `json:"filesystem,omitempty"` - - // +kubebuilder:validation:Optional - Azure *ChartMuseumChartStorageDriverAzureSpec `json:"azure,omitempty"` - - // +kubebuilder:validation:Optional - Gcs *ChartMuseumChartStorageDriverGcsSpec `json:"gcs,omitempty"` - - // +kubebuilder:validation:Optional - Oss *ChartMuseumChartStorageDriverOssSpec `json:"oss,omitempty"` -} - -type ChartMuseumChartStorageDriverOssSpec struct { - // +kubebuilder:validation:Required - Endpoint string `json:"endpoint"` - - // +kubebuilder:validation:Required - AccessKeyID string `json:"accessKeyID"` - - // +kubebuilder:validation:Required - AccessSecretRef string `json:"accessSecretRef"` - - // +kubebuilder:validation:Required - Bucket string `json:"bucket"` - - // +kubebuilder:validation:Optional - PathPrefix string `json:"pathPrefix,omitempty"` -} - -type ChartMuseumChartStorageDriverGcsSpec struct { - // +kubebuilder:validation:Required - // bucket to store charts for Gcs storage - Bucket string `json:"bucket"` - - // +kubebuilder:validation:Required - // The base64 encoded json file which contains the key - KeyDataSecretRef string `json:"keyDataSecretRef"` - - // +kubebuilder:validation:Optional - PathPrefix string `json:"pathPrefix,omitempty"` - - // +kubebuilder:validation:Optional - ChunkSize string `json:"chunksize,omitempty"` -} - -type ChartMuseumChartStorageDriverAzureSpec struct { - // +kubebuilder:validation:Optional - AccountName string `json:"accountname,omitempty"` - - // +kubebuilder:validation:Optional - AccountKeyRef string `json:"accountkeyRef,omitempty"` - - // +kubebuilder:validation:Optional - Container string `json:"container,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=core.windows.net - BaseURL string `json:"baseURL,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=/azure/harbor/charts - PathPrefix string `json:"pathPrefix,omitempty"` -} - -type ChartMuseumChartStorageDriverAmazonSpec struct { - // +kubebuilder:validation:Required - // S3 bucket to store charts for amazon storage - Bucket string `json:"bucket"` - - // +kubebuilder:validation:Optional - // Alternative s3 endpoint - Endpoint string `json:"endpoint,omitempty"` - - // +kubebuilder:validation:Optional - // Prefix to store charts for the bucket - Prefix string `json:"prefix,omitempty"` - - // +kubebuilder:validation:Optional - // Region of the bucket - Region string `json:"region,omitempty"` - - // +kubebuilder:validation:Optional - // ServerSideEncryption is the algorithm for server side encryption - ServerSideEncryption string `json:"serverSideEncryption,omitempty"` - - // +kubebuilder:validation:Optional - AccessKeyID string `json:"accessKeyID,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - AccessSecretRef string `json:"accessSecretRef,omitempty"` -} - -type ChartMuseumChartStorageDriverOpenStackSpec struct { - // +kubebuilder:validation:Required - // Container to store charts for openstack storage backend - Container string `json:"container"` - - // +kubebuilder:validation:Optional - // Prefix to store charts for the container - Prefix string `json:"prefix,omitempty"` - - // +kubebuilder:validation:Optional - // Region of the container - Region string `json:"region,omitempty"` - - // +kubebuilder:validation:Required - // URL for obtaining an auth token. - // https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth - AuthenticationURL string `json:"authenticationURL"` - - // +kubebuilder:validation:Optional - // Your Openstack tenant name. - // You can either use tenant or tenantid. - Tenant string `json:"tenant,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack tenant ID. - // You can either use tenant or tenantid. - TenantID string `json:"tenantID,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack domain name for Identity v3 API. You can either use domain or domainid. - Domain string `json:"domain,omitempty"` - - // +kubebuilder:validation:Optional - // Your Openstack domain ID for Identity v3 API. You can either use domain or domainid. - DomainID string `json:"domainID,omitempty"` - - // +kubebuilder:validation:Optional - // The Openstack user name. You can either use username or userid. - Username string `json:"username,omitempty"` - - // +kubebuilder:validation:Optional - // The Openstack user id. You can either use username or userid. - UserID string `json:"userid,omitempty"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Secret name containing the Openstack password. - PasswordRef string `json:"passwordRef,omitempty"` -} - -type ChartMuseumChartStorageDriverFilesystemSpec struct { - // +kubebuilder:validation:Required - VolumeSource corev1.VolumeSource `json:"volumeSource"` - - // +kubebuilder:validation:Optionel - Prefix string `json:"prefix,omitempty"` -} - -type ChartMuseumChartIndexSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // Parallel scan limit for the repo indexer - ParallelLimit *int32 `json:"parallelLimit,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Type="string" - // +kubebuilder:validation:Pattern="([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)?" - // Timestamp drift tolerated between cached and generated index before invalidation - StorageTimestampTolerance *metav1.Duration `json:"storageTimestampTolerance,omitempty"` -} - -type ChartMuseumPostFormFieldNameSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:validation:MinLength=1 - // +kubebuilder:default="chart" - // Form field which will be queried for the chart file content - // Harbor: Expecting chart to use with Harbor - Chart string `json:"chart,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:MinLength=1 - // +kubebuilder:default="prov" - // Form field which will be queried for the provenance file content - // Harbor: Expecting prov to use with Harbor - Provenance string `json:"provenance,omitempty"` -} - -type ChartMuseumLogSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Output structured logs as json - JSON bool `json:"json"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Show debug messages - Debug bool `json:"debug"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Log inbound /health requests - Health bool `json:"health"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // log latency as an integer instead of a string - LatencyInteger *bool `json:"latencyInteger,omitempty"` -} - -type ChartMuseumAuthSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Allow anonymous GET operations when auth is used - AnonymousGet bool `json:"anonymousGet"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Reference to secret containing basic http authentication - // Harbor: Harbor try to connect using chart_controller username - BasicAuthRef string `json:"basicAuthRef,omitempty"` - - // +kubebuilder:validation:Optional - // Bearer authentication specs - Bearer *ChartMuseumAuthBearerSpec `json:"bearer,omitempty"` -} - -type ChartMuseumAuthBearerSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - // Reference to secret containing authorization server certificate - CertificateRef string `json:"certificateRef"` - - // +kubebuilder:validation:Required - // Authorization server url - Realm string `json:"realm"` - - // +kubebuilder:validation:Required - // Authorization server service name - Service string `json:"service"` -} - -type ChartMuseumDisableSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable all routes prefixed with - API bool `json:"api"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable use of index-cache.yaml - StateFiles bool `json:"statefiles"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Do not allow chart versions to be re-uploaded, even with ?force querystrin - ForceOverwrite bool `json:"forceOverwrite"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable Prometheus metrics - Metrics bool `json:"metrics"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Disable DELETE route - Delete bool `json:"delete"` -} - -type ChartMuseumCacheSpec struct { - // +kubebuilder:validation:Optional - // Redis cache store - Redis *harbormetav1.RedisConnection `json:"redis,omitempty"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&ChartMuseum{}, &ChartMuseumList{}) -} diff --git a/apis/goharbor.io/v1beta1/chartmuseum_webhook.go b/apis/goharbor.io/v1beta1/chartmuseum_webhook.go deleted file mode 100644 index 9736b0eea..000000000 --- a/apis/goharbor.io/v1beta1/chartmuseum_webhook.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1beta1 - -import ( - "context" - - ctrl "sigs.k8s.io/controller-runtime" -) - -func (c *ChartMuseum) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(c). - Complete() -} - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! diff --git a/apis/goharbor.io/v1beta1/core_types.go b/apis/goharbor.io/v1beta1/core_types.go index 80b8de349..7b3dff174 100644 --- a/apis/goharbor.io/v1beta1/core_types.go +++ b/apis/goharbor.io/v1beta1/core_types.go @@ -126,9 +126,6 @@ type CoreComponentsSpec struct { // +kubebuilder:validation:Optional ChartRepository *CoreComponentsChartRepositorySpec `json:"chartRepository,omitempty"` - - // +kubebuilder:validation:Optional - NotaryServer *CoreComponentsNotaryServerSpec `json:"notaryServer,omitempty"` } type CoreComponentPortalSpec struct { @@ -241,12 +238,6 @@ type CoreComponentsTrivySpec struct { AdapterURL string `json:"adapterURL"` } -type CoreComponentsNotaryServerSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="https?://.+" - URL string `json:"url"` -} - type CoreConfig struct { // +kubebuilder:validation:Required // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" diff --git a/apis/goharbor.io/v1beta1/harbor_types.go b/apis/goharbor.io/v1beta1/harbor_types.go index 2f2e2643c..f507ecac9 100644 --- a/apis/goharbor.io/v1beta1/harbor_types.go +++ b/apis/goharbor.io/v1beta1/harbor_types.go @@ -6,9 +6,9 @@ import ( "path" "strings" + cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/pkg/image" - cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" @@ -51,24 +51,12 @@ func (h *Harbor) GetComponentSpec(ctx context.Context, component harbormetav1.Co func (h *Harbor) deepCopyComponentSpecInto(_ context.Context, component harbormetav1.Component, spec *harbormetav1.ComponentSpec) { switch component { - case harbormetav1.ChartMuseumComponent: - if h.Spec.ChartMuseum != nil { - h.Spec.ChartMuseum.ComponentSpec.DeepCopyInto(spec) - } case harbormetav1.CoreComponent: h.Spec.Core.ComponentSpec.DeepCopyInto(spec) case harbormetav1.ExporterComponent: h.Spec.Exporter.ComponentSpec.DeepCopyInto(spec) case harbormetav1.JobServiceComponent: h.Spec.JobService.ComponentSpec.DeepCopyInto(spec) - case harbormetav1.NotaryServerComponent: - if h.Spec.Notary != nil { - h.Spec.Notary.Server.DeepCopyInto(spec) - } - case harbormetav1.NotarySignerComponent: - if h.Spec.Notary != nil { - h.Spec.Notary.Signer.DeepCopyInto(spec) - } case harbormetav1.PortalComponent: h.Spec.Portal.ComponentSpec.DeepCopyInto(spec) case harbormetav1.RegistryComponent: @@ -209,10 +197,6 @@ type HarborSpec struct { Trace *harbormetav1.TraceSpec `json:"trace,omitempty"` } -func (spec *HarborSpec) ValidateNotary() *field.Error { - return nil -} - func (spec *HarborSpec) ValidateRegistryController() *field.Error { if spec.RegistryController == nil { return nil @@ -256,18 +240,12 @@ type HarborComponentsSpec struct { // +kubebuilder:validation:Optional RegistryController *harbormetav1.ComponentSpec `json:"registryctl,omitempty"` - // +kubebuilder:validation:Optional - ChartMuseum *ChartMuseumComponentSpec `json:"chartmuseum,omitempty"` - // +kubebuilder:validation:Optional Exporter *ExporterComponentSpec `json:"exporter,omitempty"` // +kubebuilder:validation:Optional Trivy *TrivyComponentSpec `json:"trivy,omitempty"` - // +kubebuilder:validation:Optional - Notary *NotaryComponentSpec `json:"notary,omitempty"` - // +kubebuilder:validation:Required Redis *ExternalRedisSpec `json:"redis"` @@ -299,12 +277,6 @@ func (r *HarborDatabaseSpec) GetPostgresqlConnection(component harbormetav1.Comp case harbormetav1.ExporterComponent: // exporter requires to access the database of core component databaseName = harbormetav1.CoreDatabase - case harbormetav1.NotarySignerComponent: - sslMode = r.getSSLModeForNotary() - databaseName = harbormetav1.NotarySignerDatabase - case harbormetav1.NotaryServerComponent: - sslMode = r.getSSLModeForNotary() - databaseName = harbormetav1.NotaryServerDatabase default: return nil, harbormetav1.ErrUnsupportedComponent } @@ -321,32 +293,6 @@ func (r *HarborDatabaseSpec) GetPostgresqlConnection(component harbormetav1.Comp }, nil } -func (r *HarborDatabaseSpec) getSSLModeForNotary() harbormetav1.PostgresSSLMode { - switch r.SSLMode { //nolint:exhaustive - case harbormetav1.PostgresSSLModeAllow: - return harbormetav1.PostgresSSLModePrefer - default: - return r.SSLMode - } -} - -type NotaryComponentSpec struct { - // +kubebuilder:validation:Optional - Server harbormetav1.ComponentSpec `json:"server"` - - // +kubebuilder:validation:Optional - Signer harbormetav1.ComponentSpec `json:"signer"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - // Inject migration configuration to notary resources - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` -} - -func (r *NotaryComponentSpec) IsMigrationEnabled() bool { - return r != nil && (r.MigrationEnabled == nil || *r.MigrationEnabled) -} - type ExternalRedisSpec struct { harbormetav1.RedisHostSpec `json:",inline"` harbormetav1.RedisCredentials `json:",inline"` @@ -419,18 +365,6 @@ type RegistryComponentSpec struct { Metrics *harbormetav1.MetricsSpec `json:"metrics,omitempty"` } -type ChartMuseumComponentSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - CertificateInjection `json:",inline"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=false - // Harbor defaults ChartMuseum to returning relative urls, - // if you want using absolute url you should enable it - AbsoluteURL bool `json:"absoluteUrl"` -} - type ExporterComponentSpec struct { harbormetav1.ComponentSpec `json:",inline"` @@ -644,16 +578,6 @@ type HarborStorageImageChartStorageOssSpec struct { RegistryStorageDriverOssSpec `json:",inline"` } -func (r *HarborStorageImageChartStorageOssSpec) ChartMuseum() *ChartMuseumChartStorageDriverOssSpec { - return &ChartMuseumChartStorageDriverOssSpec{ - Endpoint: r.getEndpoint(), - AccessKeyID: r.AccessKeyID, - AccessSecretRef: r.AccessSecretRef, - Bucket: r.Bucket, - PathPrefix: r.PathPrefix, - } -} - func (r *HarborStorageImageChartStorageOssSpec) Registry() *RegistryStorageDriverOssSpec { return &r.RegistryStorageDriverOssSpec } @@ -674,29 +598,10 @@ type HarborStorageImageChartStorageGcsSpec struct { RegistryStorageDriverGcsSpec `json:",inline"` } -func (r *HarborStorageImageChartStorageGcsSpec) ChartMuseum() *ChartMuseumChartStorageDriverGcsSpec { - return &ChartMuseumChartStorageDriverGcsSpec{ - KeyDataSecretRef: r.KeyDataRef, - Bucket: r.Bucket, - PathPrefix: r.PathPrefix, - ChunkSize: r.ChunkSize, - } -} - func (r *HarborStorageImageChartStorageGcsSpec) Registry() *RegistryStorageDriverGcsSpec { return &r.RegistryStorageDriverGcsSpec } -func (r *HarborStorageImageChartStorageAzureSpec) ChartMuseum() *ChartMuseumChartStorageDriverAzureSpec { - return &ChartMuseumChartStorageDriverAzureSpec{ - AccountName: r.AccountName, - AccountKeyRef: r.AccountKeyRef, - Container: r.Container, - BaseURL: r.BaseURL, - PathPrefix: r.PathPrefix, - } -} - func (r *HarborStorageImageChartStorageAzureSpec) Registry() *RegistryStorageDriverAzureSpec { return &r.RegistryStorageDriverAzureSpec } @@ -705,17 +610,6 @@ type HarborStorageImageChartStorageS3Spec struct { RegistryStorageDriverS3Spec `json:",inline"` } -func (r *HarborStorageImageChartStorageS3Spec) ChartMuseum() *ChartMuseumChartStorageDriverAmazonSpec { - return &ChartMuseumChartStorageDriverAmazonSpec{ - AccessKeyID: r.AccessKey, - AccessSecretRef: r.SecretKeyRef, - Bucket: r.Bucket, - Endpoint: r.RegionEndpoint, - Prefix: r.RootDirectory, - Region: r.Region, - } -} - func (r *HarborStorageImageChartStorageS3Spec) Registry() *RegistryStorageDriverS3Spec { return &r.RegistryStorageDriverS3Spec } @@ -724,21 +618,6 @@ type HarborStorageImageChartStorageSwiftSpec struct { RegistryStorageDriverSwiftSpec `json:",inline"` } -func (r *HarborStorageImageChartStorageSwiftSpec) ChartMuseum() *ChartMuseumChartStorageDriverOpenStackSpec { - return &ChartMuseumChartStorageDriverOpenStackSpec{ - AuthenticationURL: r.AuthURL, - Container: r.Container, - Domain: r.Domain, - DomainID: r.DomainID, - PasswordRef: r.PasswordRef, - Prefix: r.Prefix, - Region: r.Region, - Tenant: r.Tenant, - TenantID: r.TenantID, - Username: r.Username, - } -} - func (r *HarborStorageImageChartStorageSwiftSpec) Registry() *RegistryStorageDriverSwiftSpec { return &r.RegistryStorageDriverSwiftSpec } @@ -795,10 +674,6 @@ func (r *HarborInternalTLSSpec) GetComponentTLSSpec(certificateRef string) *harb type HarborExposeSpec struct { // +kubebuilder:validation:Required Core HarborExposeComponentSpec `json:"core"` - - // +kubebuilder:validation:Optional - // The ingress of the notary, required when notary component enabled. - Notary *HarborExposeComponentSpec `json:"notary,omitempty"` } type HarborExposeComponentSpec struct { diff --git a/apis/goharbor.io/v1beta1/harbor_webhook.go b/apis/goharbor.io/v1beta1/harbor_webhook.go index 6315c67ff..59c2cbd92 100644 --- a/apis/goharbor.io/v1beta1/harbor_webhook.go +++ b/apis/goharbor.io/v1beta1/harbor_webhook.go @@ -13,6 +13,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) // log is for logging in this package. @@ -29,32 +30,32 @@ func (h *Harbor) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) er var _ webhook.Validator = &Harbor{} // ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (h *Harbor) ValidateCreate() error { +func (h *Harbor) ValidateCreate() (admission.Warnings, error) { harborlog.Info("validate create", "name", h.Name) return h.Validate(nil) } // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (h *Harbor) ValidateUpdate(old runtime.Object) error { +func (h *Harbor) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { harborlog.Info("validate update", "name", h.Name) obj, ok := old.(*Harbor) if !ok { - return errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) + return nil, errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) } return h.Validate(obj) } // ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (h *Harbor) ValidateDelete() error { +func (h *Harbor) ValidateDelete() (admission.Warnings, error) { harborlog.Info("validate delete", "name", h.Name) - return nil + return nil, nil } -func (h *Harbor) Validate(old *Harbor) error { +func (h *Harbor) Validate(old *Harbor) (admission.Warnings, error) { var allErrs field.ErrorList if err := h.Spec.Network.Validate(nil); err != nil { @@ -83,10 +84,6 @@ func (h *Harbor) Validate(old *Harbor) error { allErrs = append(allErrs, required(field.NewPath("spec").Child("redis"))) } - if err := h.Spec.ValidateNotary(); err != nil { - allErrs = append(allErrs, err) - } - if err := h.Spec.ValidateRegistryController(); err != nil { allErrs = append(allErrs, err) } @@ -102,8 +99,8 @@ func (h *Harbor) Validate(old *Harbor) error { } if len(allErrs) == 0 { - return nil + return nil, nil } - return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Harbor"}, h.Name, allErrs) + return nil, apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Harbor"}, h.Name, allErrs) } diff --git a/apis/goharbor.io/v1beta1/harborcluster_types.go b/apis/goharbor.io/v1beta1/harborcluster_types.go index 31e0bf7ec..db391d1f7 100644 --- a/apis/goharbor.io/v1beta1/harborcluster_types.go +++ b/apis/goharbor.io/v1beta1/harborcluster_types.go @@ -111,17 +111,11 @@ type EmbeddedHarborComponentsSpec struct { // +kubebuilder:validation:Optional RegistryController *harbormetav1.ComponentSpec `json:"registryctl,omitempty"` - // +kubebuilder:validation:Optional - ChartMuseum *ChartMuseumComponentSpec `json:"chartmuseum,omitempty"` - // +kubebuilder:validation:Optional Exporter *ExporterComponentSpec `json:"exporter,omitempty"` // +kubebuilder:validation:Optional Trivy *TrivyComponentSpec `json:"trivy,omitempty"` - - // +kubebuilder:validation:Optional - Notary *NotaryComponentSpec `json:"notary,omitempty"` } type Cache struct { diff --git a/apis/goharbor.io/v1beta1/harborcluster_webhook.go b/apis/goharbor.io/v1beta1/harborcluster_webhook.go index 6b240ebd5..480266325 100644 --- a/apis/goharbor.io/v1beta1/harborcluster_webhook.go +++ b/apis/goharbor.io/v1beta1/harborcluster_webhook.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/plotly/harbor-operator/pkg/version" "github.com/pkg/errors" + "github.com/plotly/harbor-operator/pkg/version" apierrors "k8s.io/apimachinery/pkg/api/errors" runtime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -13,6 +13,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) func (harborcluster *HarborCluster) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) error { @@ -107,30 +108,30 @@ func (harborcluster *HarborCluster) Default() { //nolint:funlen var _ webhook.Validator = &HarborCluster{} -func (harborcluster *HarborCluster) ValidateCreate() error { +func (harborcluster *HarborCluster) ValidateCreate() (admission.Warnings, error) { clog.Info("validate creation", "name", harborcluster.Name, "namespace", harborcluster.Namespace) return harborcluster.validate(harborcluster) } -func (harborcluster *HarborCluster) ValidateUpdate(old runtime.Object) error { +func (harborcluster *HarborCluster) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { clog.Info("validate updating", "name", harborcluster.Name, "namespace", harborcluster.Namespace) obj, ok := old.(*HarborCluster) if !ok { - return errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) + return nil, errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) } return harborcluster.validate(obj) } -func (harborcluster *HarborCluster) ValidateDelete() error { +func (harborcluster *HarborCluster) ValidateDelete() (admission.Warnings, error) { clog.Info("validate deletion", "name", harborcluster.Name, "namespace", harborcluster.Namespace) - return nil + return nil, nil } -func (harborcluster *HarborCluster) validate(old *HarborCluster) error { +func (harborcluster *HarborCluster) validate(old *HarborCluster) (admission.Warnings, error) { var allErrs field.ErrorList if err := harborcluster.Spec.Network.Validate(nil); err != nil { @@ -183,10 +184,10 @@ func (harborcluster *HarborCluster) validate(old *HarborCluster) error { } if len(allErrs) == 0 { - return nil + return nil, nil } - return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "HarborCluster"}, harborcluster.Name, allErrs) + return nil, apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "HarborCluster"}, harborcluster.Name, allErrs) } func (harborcluster *HarborCluster) validateStorage() *field.Error { //nolint:funlen,gocognit diff --git a/apis/goharbor.io/v1beta1/harborproject_webhook.go b/apis/goharbor.io/v1beta1/harborproject_webhook.go index 2dbcfe2b2..9e02f7357 100644 --- a/apis/goharbor.io/v1beta1/harborproject_webhook.go +++ b/apis/goharbor.io/v1beta1/harborproject_webhook.go @@ -11,6 +11,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) // log is for logging in this package. @@ -27,32 +28,32 @@ func (hp *HarborProject) SetupWebhookWithManager(_ context.Context, mgr ctrl.Man var _ webhook.Validator = &HarborProject{} // ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (hp *HarborProject) ValidateCreate() error { +func (hp *HarborProject) ValidateCreate() (admission.Warnings, error) { hplog.Info("validate create", "name", hp.Name) return hp.Validate(nil) } // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (hp *HarborProject) ValidateUpdate(old runtime.Object) error { +func (hp *HarborProject) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { hplog.Info("validate update", "name", hp.Name) obj, ok := old.(*HarborProject) if !ok { - return errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) + return nil, errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) } return hp.Validate(obj) } // ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (hp *HarborProject) ValidateDelete() error { +func (hp *HarborProject) ValidateDelete() (admission.Warnings, error) { hplog.Info("validate delete", "name", hp.Name) - return nil + return nil, nil } -func (hp *HarborProject) Validate(old *HarborProject) error { +func (hp *HarborProject) Validate(old *HarborProject) (admission.Warnings, error) { var allErrs field.ErrorList if old != nil { // update harborproject resource @@ -66,8 +67,8 @@ func (hp *HarborProject) Validate(old *HarborProject) error { } if len(allErrs) == 0 { - return nil + return nil, nil } - return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "HarborProject"}, hp.Name, allErrs) + return nil, apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "HarborProject"}, hp.Name, allErrs) } diff --git a/apis/goharbor.io/v1beta1/jobservice_webhook.go b/apis/goharbor.io/v1beta1/jobservice_webhook.go index 93f0eb1e1..8832dcf1e 100644 --- a/apis/goharbor.io/v1beta1/jobservice_webhook.go +++ b/apis/goharbor.io/v1beta1/jobservice_webhook.go @@ -10,6 +10,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) // log is for logging in this package. @@ -26,27 +27,27 @@ func (jobservice *JobService) SetupWebhookWithManager(_ context.Context, mgr ctr var _ webhook.Validator = &JobService{} // ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (jobservice *JobService) ValidateCreate() error { +func (jobservice *JobService) ValidateCreate() (admission.Warnings, error) { jobservicelog.Info("validate create", "name", jobservice.Name) return jobservice.Validate() } // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (jobservice *JobService) ValidateUpdate(old runtime.Object) error { +func (jobservice *JobService) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { jobservicelog.Info("validate update", "name", jobservice.Name) return jobservice.Validate() } // ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (jobservice *JobService) ValidateDelete() error { +func (jobservice *JobService) ValidateDelete() (admission.Warnings, error) { jobservicelog.Info("validate delete", "name", jobservice.Name) - return nil + return nil, nil } -func (jobservice *JobService) Validate() error { +func (jobservice *JobService) Validate() (admission.Warnings, error) { var allErrs field.ErrorList err := jobservice.Spec.JobLoggers.Validate() @@ -60,8 +61,8 @@ func (jobservice *JobService) Validate() error { } if len(allErrs) == 0 { - return nil + return nil, nil } - return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "JobService"}, jobservice.Name, allErrs) + return nil, apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "JobService"}, jobservice.Name, allErrs) } diff --git a/apis/goharbor.io/v1beta1/notary_types.go b/apis/goharbor.io/v1beta1/notary_types.go deleted file mode 100644 index e7aac3d13..000000000 --- a/apis/goharbor.io/v1beta1/notary_types.go +++ /dev/null @@ -1,22 +0,0 @@ -package v1beta1 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" -) - -type NotaryLoggingSpec struct { - // +kubebuilder:validation:Optional - // +kubebuilder:default="info" - Level harbormetav1.NotaryLogLevel `json:"level,omitempty"` -} - -type NotaryStorageSpec struct { - // +kubebuilder:validation:Required - Postgres harbormetav1.PostgresConnectionWithParameters `json:"postgres"` - - // TODO Add support for mysql and memory -} - -func (n *NotaryStorageSpec) GetPasswordFieldKey() string { - return harbormetav1.PostgresqlPasswordKey -} diff --git a/apis/goharbor.io/v1beta1/notaryserver_conversion.go b/apis/goharbor.io/v1beta1/notaryserver_conversion.go deleted file mode 100644 index 9b97112d9..000000000 --- a/apis/goharbor.io/v1beta1/notaryserver_conversion.go +++ /dev/null @@ -1,10 +0,0 @@ -package v1beta1 - -import ( - "sigs.k8s.io/controller-runtime/pkg/conversion" -) - -var _ conversion.Hub = &NotaryServer{} - -func (*NotaryServer) Hub() { -} diff --git a/apis/goharbor.io/v1beta1/notaryserver_types.go b/apis/goharbor.io/v1beta1/notaryserver_types.go deleted file mode 100644 index 62efcf1ab..000000000 --- a/apis/goharbor.io/v1beta1/notaryserver_types.go +++ /dev/null @@ -1,115 +0,0 @@ -package v1beta1 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +kubebuilder:storageversion -// +k8s:openapi-gen=true -// +resource:path=notaryserver -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// NotaryServer is the Schema for the NotaryServer API. -type NotaryServer struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec NotaryServerSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// NotaryServerList contains a list of NotaryServer. -type NotaryServerList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []NotaryServer `json:"items"` -} - -// NotaryServerSpec defines the desired state of NotaryServer. -type NotaryServerSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - // +kubebuilder:validation:Optional - TLS *harbormetav1.ComponentsTLSSpec `json:"tls,omitempty"` - - // +kubebuilder:validation:Required - TrustService NotaryServerTrustServiceSpec `json:"trustService"` - - // +kubebuilder:validation:Optional - Logging NotaryLoggingSpec `json:"logging,omitempty"` - - // +kubebuilder:validation:Required - Storage NotaryStorageSpec `json:"storage,omitempty"` - - // +kubebuilder:validation:Optional - Authentication *NotaryServerAuthSpec `json:"authentication,omitempty"` - - // +kubebuilder:validation:Optional - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` - - // +kubebuilder:validation:Optional - Network *harbormetav1.Network `json:"network,omitempty"` -} - -type NotaryServerTrustServiceSpec struct { - // +kubebuilder:validation:Optional - Remote *NotaryServerTrustServiceRemoteSpec `json:"remote,omitempty"` -} - -type NotaryServerTrustServiceRemoteSpec struct { - // +kubebuilder:validation:Required - Host string `json:"host"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:validation:ExclusiveMinimum=true - // +kubebuilder:default=443 - Port int64 `json:"port,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=ecdsa - // +kubebuilder:validation:Enum=ecdsa;rsa;ed25519 - KeyAlgorithm string `json:"keyAlgorithm,omitempty"` - - // +kubebuilder:validation:Optional - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef,omitempty"` -} - -type NotaryServerAuthSpec struct { - // +kubebuilder:validation:Required - Token NotaryServerAuthTokenSpec `json:"token"` -} - -type NotaryServerAuthTokenSpec struct { - // +kubebuilder:validation:Required - Realm string `json:"realm"` - - // +kubebuilder:validation:Required - Service string `json:"service"` - - // +kubebuilder:validation:Required - Issuer string `json:"issuer"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef"` - - // +kubebuilder:validation:Optional - // +kubebuilder:default=true - AutoRedirect *bool `json:"autoredirect,omitempty"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&NotaryServer{}, &NotaryServerList{}) -} diff --git a/apis/goharbor.io/v1beta1/notaryserver_webhook.go b/apis/goharbor.io/v1beta1/notaryserver_webhook.go deleted file mode 100644 index 39aaed7c4..000000000 --- a/apis/goharbor.io/v1beta1/notaryserver_webhook.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1beta1 - -import ( - "context" - - ctrl "sigs.k8s.io/controller-runtime" -) - -func (n *NotaryServer) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(n). - Complete() -} - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! diff --git a/apis/goharbor.io/v1beta1/notarysigner_conversion.go b/apis/goharbor.io/v1beta1/notarysigner_conversion.go deleted file mode 100644 index f520ee463..000000000 --- a/apis/goharbor.io/v1beta1/notarysigner_conversion.go +++ /dev/null @@ -1,10 +0,0 @@ -package v1beta1 - -import ( - "sigs.k8s.io/controller-runtime/pkg/conversion" -) - -var _ conversion.Hub = &NotaryServer{} - -func (*NotarySigner) Hub() { -} diff --git a/apis/goharbor.io/v1beta1/notarysigner_types.go b/apis/goharbor.io/v1beta1/notarysigner_types.go deleted file mode 100644 index 1f957ce6b..000000000 --- a/apis/goharbor.io/v1beta1/notarysigner_types.go +++ /dev/null @@ -1,76 +0,0 @@ -package v1beta1 - -import ( - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const NotarySignerAPIPort = 7899 - -// +genclient - -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// +kubebuilder:object:root=true -// +kubebuilder:storageversion -// +k8s:openapi-gen=true -// +resource:path=notarysigner -// +kubebuilder:subresource:status -// +kubebuilder:resource:categories="goharbor" -// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.",priority=1 -// +kubebuilder:printcolumn:name="Failure",type=string,JSONPath=`.status.conditions[?(@.type=="Failed")].message`,description="Human readable message describing the failure",priority=5 -// NotarySigner is the Schema for the NotarySigner API. -type NotarySigner struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec NotarySignerSpec `json:"spec,omitempty"` - - Status harbormetav1.ComponentStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true -// NotarySignerList contains a list of NotarySigner. -type NotarySignerList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []NotarySigner `json:"items"` -} - -// NotarySignerSpec defines the desired state of NotarySigner. -type NotarySignerSpec struct { - harbormetav1.ComponentSpec `json:",inline"` - - // +kubebuilder:validation:Required - Authentication NotarySignerAuthenticationSpec `json:"authentatication"` - - // +kubebuilder:validation:Optional - Logging NotaryLoggingSpec `json:"logging,omitempty"` - - // +kubebuilder:validation:Required - Storage NotarySignerStorageSpec `json:"storage"` - - // +kubebuilder:validation:Optional - MigrationEnabled *bool `json:"migrationEnabled,omitempty"` - - // +kubebuilder:validation:Optional - Network *harbormetav1.Network `json:"network,omitempty"` -} - -type NotarySignerAuthenticationSpec struct { - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - CertificateRef string `json:"certificateRef"` -} - -type NotarySignerStorageSpec struct { - NotaryStorageSpec `json:",inline"` - - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" - AliasesRef string `json:"aliasesRef"` -} - -func init() { //nolint:gochecknoinits - SchemeBuilder.Register(&NotarySigner{}, &NotarySignerList{}) -} diff --git a/apis/goharbor.io/v1beta1/notarysigner_webhook.go b/apis/goharbor.io/v1beta1/notarysigner_webhook.go deleted file mode 100644 index d9344c2d8..000000000 --- a/apis/goharbor.io/v1beta1/notarysigner_webhook.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1beta1 - -import ( - "context" - - ctrl "sigs.k8s.io/controller-runtime" -) - -func (n *NotarySigner) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(n). - Complete() -} - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! diff --git a/apis/goharbor.io/v1beta1/registry_webhook.go b/apis/goharbor.io/v1beta1/registry_webhook.go index fb7046a53..379e78c74 100644 --- a/apis/goharbor.io/v1beta1/registry_webhook.go +++ b/apis/goharbor.io/v1beta1/registry_webhook.go @@ -10,6 +10,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) // log is for logging in this package. @@ -26,27 +27,27 @@ func (r *Registry) SetupWebhookWithManager(_ context.Context, mgr ctrl.Manager) var _ webhook.Validator = &Registry{} // ValidateCreate implements webhook.Validator so a webhook will be registered for the type. -func (r *Registry) ValidateCreate() error { +func (r *Registry) ValidateCreate() (admission.Warnings, error) { registrylog.Info("validate create", "name", r.Name) return r.Validate() } // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type. -func (r *Registry) ValidateUpdate(old runtime.Object) error { +func (r *Registry) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { registrylog.Info("validate update", "name", r.Name) return r.Validate() } // ValidateDelete implements webhook.Validator so a webhook will be registered for the type. -func (r *Registry) ValidateDelete() error { +func (r *Registry) ValidateDelete() (admission.Warnings, error) { registrylog.Info("validate delete", "name", r.Name) - return nil + return nil, nil } -func (r *Registry) Validate() error { +func (r *Registry) Validate() (admission.Warnings, error) { var allErrs field.ErrorList err := r.Spec.Storage.Driver.Validate() @@ -55,8 +56,8 @@ func (r *Registry) Validate() error { } if len(allErrs) == 0 { - return nil + return nil, nil } - return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Registry"}, r.Name, allErrs) + return nil, apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Registry"}, r.Name, allErrs) } diff --git a/apis/goharbor.io/v1beta1/zz_generated.deepcopy.go b/apis/goharbor.io/v1beta1/zz_generated.deepcopy.go index d59259fcd..ad10019ef 100644 --- a/apis/goharbor.io/v1beta1/zz_generated.deepcopy.go +++ b/apis/goharbor.io/v1beta1/zz_generated.deepcopy.go @@ -107,476 +107,6 @@ func (in *CertificateInjection) DeepCopy() *CertificateInjection { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseum) DeepCopyInto(out *ChartMuseum) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseum. -func (in *ChartMuseum) DeepCopy() *ChartMuseum { - if in == nil { - return nil - } - out := new(ChartMuseum) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartMuseum) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumAuthBearerSpec) DeepCopyInto(out *ChartMuseumAuthBearerSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumAuthBearerSpec. -func (in *ChartMuseumAuthBearerSpec) DeepCopy() *ChartMuseumAuthBearerSpec { - if in == nil { - return nil - } - out := new(ChartMuseumAuthBearerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumAuthSpec) DeepCopyInto(out *ChartMuseumAuthSpec) { - *out = *in - if in.Bearer != nil { - in, out := &in.Bearer, &out.Bearer - *out = new(ChartMuseumAuthBearerSpec) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumAuthSpec. -func (in *ChartMuseumAuthSpec) DeepCopy() *ChartMuseumAuthSpec { - if in == nil { - return nil - } - out := new(ChartMuseumAuthSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumCacheSpec) DeepCopyInto(out *ChartMuseumCacheSpec) { - *out = *in - if in.Redis != nil { - in, out := &in.Redis, &out.Redis - *out = new(v1alpha1.RedisConnection) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumCacheSpec. -func (in *ChartMuseumCacheSpec) DeepCopy() *ChartMuseumCacheSpec { - if in == nil { - return nil - } - out := new(ChartMuseumCacheSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartIndexSpec) DeepCopyInto(out *ChartMuseumChartIndexSpec) { - *out = *in - if in.ParallelLimit != nil { - in, out := &in.ParallelLimit, &out.ParallelLimit - *out = new(int32) - **out = **in - } - if in.StorageTimestampTolerance != nil { - in, out := &in.StorageTimestampTolerance, &out.StorageTimestampTolerance - *out = new(v1.Duration) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartIndexSpec. -func (in *ChartMuseumChartIndexSpec) DeepCopy() *ChartMuseumChartIndexSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartIndexSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartRepoSpec) DeepCopyInto(out *ChartMuseumChartRepoSpec) { - *out = *in - if in.Depth != nil { - in, out := &in.Depth, &out.Depth - *out = new(int32) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartRepoSpec. -func (in *ChartMuseumChartRepoSpec) DeepCopy() *ChartMuseumChartRepoSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartRepoSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartSpec) DeepCopyInto(out *ChartMuseumChartSpec) { - *out = *in - out.PostFormFieldName = in.PostFormFieldName - if in.AllowOverwrite != nil { - in, out := &in.AllowOverwrite, &out.AllowOverwrite - *out = new(bool) - **out = **in - } - in.Storage.DeepCopyInto(&out.Storage) - in.Index.DeepCopyInto(&out.Index) - in.Repo.DeepCopyInto(&out.Repo) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartSpec. -func (in *ChartMuseumChartSpec) DeepCopy() *ChartMuseumChartSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverAmazonSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverAmazonSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverAmazonSpec. -func (in *ChartMuseumChartStorageDriverAmazonSpec) DeepCopy() *ChartMuseumChartStorageDriverAmazonSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverAmazonSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverAzureSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverAzureSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverAzureSpec. -func (in *ChartMuseumChartStorageDriverAzureSpec) DeepCopy() *ChartMuseumChartStorageDriverAzureSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverAzureSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverFilesystemSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverFilesystemSpec) { - *out = *in - in.VolumeSource.DeepCopyInto(&out.VolumeSource) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverFilesystemSpec. -func (in *ChartMuseumChartStorageDriverFilesystemSpec) DeepCopy() *ChartMuseumChartStorageDriverFilesystemSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverFilesystemSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverGcsSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverGcsSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverGcsSpec. -func (in *ChartMuseumChartStorageDriverGcsSpec) DeepCopy() *ChartMuseumChartStorageDriverGcsSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverGcsSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverOpenStackSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverOpenStackSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverOpenStackSpec. -func (in *ChartMuseumChartStorageDriverOpenStackSpec) DeepCopy() *ChartMuseumChartStorageDriverOpenStackSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverOpenStackSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverOssSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverOssSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverOssSpec. -func (in *ChartMuseumChartStorageDriverOssSpec) DeepCopy() *ChartMuseumChartStorageDriverOssSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverOssSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageDriverSpec) DeepCopyInto(out *ChartMuseumChartStorageDriverSpec) { - *out = *in - if in.Amazon != nil { - in, out := &in.Amazon, &out.Amazon - *out = new(ChartMuseumChartStorageDriverAmazonSpec) - **out = **in - } - if in.OpenStack != nil { - in, out := &in.OpenStack, &out.OpenStack - *out = new(ChartMuseumChartStorageDriverOpenStackSpec) - **out = **in - } - if in.FileSystem != nil { - in, out := &in.FileSystem, &out.FileSystem - *out = new(ChartMuseumChartStorageDriverFilesystemSpec) - (*in).DeepCopyInto(*out) - } - if in.Azure != nil { - in, out := &in.Azure, &out.Azure - *out = new(ChartMuseumChartStorageDriverAzureSpec) - **out = **in - } - if in.Gcs != nil { - in, out := &in.Gcs, &out.Gcs - *out = new(ChartMuseumChartStorageDriverGcsSpec) - **out = **in - } - if in.Oss != nil { - in, out := &in.Oss, &out.Oss - *out = new(ChartMuseumChartStorageDriverOssSpec) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageDriverSpec. -func (in *ChartMuseumChartStorageDriverSpec) DeepCopy() *ChartMuseumChartStorageDriverSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageDriverSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumChartStorageSpec) DeepCopyInto(out *ChartMuseumChartStorageSpec) { - *out = *in - in.ChartMuseumChartStorageDriverSpec.DeepCopyInto(&out.ChartMuseumChartStorageDriverSpec) - if in.MaxStorageObjects != nil { - in, out := &in.MaxStorageObjects, &out.MaxStorageObjects - *out = new(int64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumChartStorageSpec. -func (in *ChartMuseumChartStorageSpec) DeepCopy() *ChartMuseumChartStorageSpec { - if in == nil { - return nil - } - out := new(ChartMuseumChartStorageSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumComponentSpec) DeepCopyInto(out *ChartMuseumComponentSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - in.CertificateInjection.DeepCopyInto(&out.CertificateInjection) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumComponentSpec. -func (in *ChartMuseumComponentSpec) DeepCopy() *ChartMuseumComponentSpec { - if in == nil { - return nil - } - out := new(ChartMuseumComponentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumDisableSpec) DeepCopyInto(out *ChartMuseumDisableSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumDisableSpec. -func (in *ChartMuseumDisableSpec) DeepCopy() *ChartMuseumDisableSpec { - if in == nil { - return nil - } - out := new(ChartMuseumDisableSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumList) DeepCopyInto(out *ChartMuseumList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ChartMuseum, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumList. -func (in *ChartMuseumList) DeepCopy() *ChartMuseumList { - if in == nil { - return nil - } - out := new(ChartMuseumList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartMuseumList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumLogSpec) DeepCopyInto(out *ChartMuseumLogSpec) { - *out = *in - if in.LatencyInteger != nil { - in, out := &in.LatencyInteger, &out.LatencyInteger - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumLogSpec. -func (in *ChartMuseumLogSpec) DeepCopy() *ChartMuseumLogSpec { - if in == nil { - return nil - } - out := new(ChartMuseumLogSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumPostFormFieldNameSpec) DeepCopyInto(out *ChartMuseumPostFormFieldNameSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumPostFormFieldNameSpec. -func (in *ChartMuseumPostFormFieldNameSpec) DeepCopy() *ChartMuseumPostFormFieldNameSpec { - if in == nil { - return nil - } - out := new(ChartMuseumPostFormFieldNameSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumServerSpec) DeepCopyInto(out *ChartMuseumServerSpec) { - *out = *in - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(v1alpha1.ComponentsTLSSpec) - **out = **in - } - if in.ReadTimeout != nil { - in, out := &in.ReadTimeout, &out.ReadTimeout - *out = new(v1.Duration) - **out = **in - } - if in.WriteTimeout != nil { - in, out := &in.WriteTimeout, &out.WriteTimeout - *out = new(v1.Duration) - **out = **in - } - if in.MaxUploadSize != nil { - in, out := &in.MaxUploadSize, &out.MaxUploadSize - *out = new(int64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumServerSpec. -func (in *ChartMuseumServerSpec) DeepCopy() *ChartMuseumServerSpec { - if in == nil { - return nil - } - out := new(ChartMuseumServerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartMuseumSpec) DeepCopyInto(out *ChartMuseumSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - in.CertificateInjection.DeepCopyInto(&out.CertificateInjection) - in.Log.DeepCopyInto(&out.Log) - in.Authentication.DeepCopyInto(&out.Authentication) - in.Server.DeepCopyInto(&out.Server) - out.Disable = in.Disable - in.Cache.DeepCopyInto(&out.Cache) - in.Chart.DeepCopyInto(&out.Chart) - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(v1alpha1.Network) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartMuseumSpec. -func (in *ChartMuseumSpec) DeepCopy() *ChartMuseumSpec { - if in == nil { - return nil - } - out := new(ChartMuseumSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Core) DeepCopyInto(out *Core) { *out = *in @@ -682,21 +212,6 @@ func (in *CoreComponentsJobServiceSpec) DeepCopy() *CoreComponentsJobServiceSpec return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CoreComponentsNotaryServerSpec) DeepCopyInto(out *CoreComponentsNotaryServerSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreComponentsNotaryServerSpec. -func (in *CoreComponentsNotaryServerSpec) DeepCopy() *CoreComponentsNotaryServerSpec { - if in == nil { - return nil - } - out := new(CoreComponentsNotaryServerSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CoreComponentsRegistryCredentialsSpec) DeepCopyInto(out *CoreComponentsRegistryCredentialsSpec) { *out = *in @@ -755,11 +270,6 @@ func (in *CoreComponentsSpec) DeepCopyInto(out *CoreComponentsSpec) { *out = new(CoreComponentsChartRepositorySpec) **out = **in } - if in.NotaryServer != nil { - in, out := &in.NotaryServer, &out.NotaryServer - *out = new(CoreComponentsNotaryServerSpec) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreComponentsSpec. @@ -1036,11 +546,6 @@ func (in *EmbeddedHarborComponentsSpec) DeepCopyInto(out *EmbeddedHarborComponen *out = new(v1alpha1.ComponentSpec) (*in).DeepCopyInto(*out) } - if in.ChartMuseum != nil { - in, out := &in.ChartMuseum, &out.ChartMuseum - *out = new(ChartMuseumComponentSpec) - (*in).DeepCopyInto(*out) - } if in.Exporter != nil { in, out := &in.Exporter, &out.Exporter *out = new(ExporterComponentSpec) @@ -1051,11 +556,6 @@ func (in *EmbeddedHarborComponentsSpec) DeepCopyInto(out *EmbeddedHarborComponen *out = new(TrivyComponentSpec) (*in).DeepCopyInto(*out) } - if in.Notary != nil { - in, out := &in.Notary, &out.Notary - *out = new(NotaryComponentSpec) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EmbeddedHarborComponentsSpec. @@ -1530,11 +1030,6 @@ func (in *HarborComponentsSpec) DeepCopyInto(out *HarborComponentsSpec) { *out = new(v1alpha1.ComponentSpec) (*in).DeepCopyInto(*out) } - if in.ChartMuseum != nil { - in, out := &in.ChartMuseum, &out.ChartMuseum - *out = new(ChartMuseumComponentSpec) - (*in).DeepCopyInto(*out) - } if in.Exporter != nil { in, out := &in.Exporter, &out.Exporter *out = new(ExporterComponentSpec) @@ -1545,11 +1040,6 @@ func (in *HarborComponentsSpec) DeepCopyInto(out *HarborComponentsSpec) { *out = new(TrivyComponentSpec) (*in).DeepCopyInto(*out) } - if in.Notary != nil { - in, out := &in.Notary, &out.Notary - *out = new(NotaryComponentSpec) - (*in).DeepCopyInto(*out) - } if in.Redis != nil { in, out := &in.Redis, &out.Redis *out = new(ExternalRedisSpec) @@ -1933,11 +1423,6 @@ func (in *HarborExposeIngressSpec) DeepCopy() *HarborExposeIngressSpec { func (in *HarborExposeSpec) DeepCopyInto(out *HarborExposeSpec) { *out = *in in.Core.DeepCopyInto(&out.Core) - if in.Notary != nil { - in, out := &in.Notary, &out.Notary - *out = new(HarborExposeComponentSpec) - (*in).DeepCopyInto(*out) - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HarborExposeSpec. @@ -2952,347 +2437,6 @@ func (in *MinIOSpec) DeepCopy() *MinIOSpec { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryComponentSpec) DeepCopyInto(out *NotaryComponentSpec) { - *out = *in - in.Server.DeepCopyInto(&out.Server) - in.Signer.DeepCopyInto(&out.Signer) - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryComponentSpec. -func (in *NotaryComponentSpec) DeepCopy() *NotaryComponentSpec { - if in == nil { - return nil - } - out := new(NotaryComponentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryLoggingSpec) DeepCopyInto(out *NotaryLoggingSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryLoggingSpec. -func (in *NotaryLoggingSpec) DeepCopy() *NotaryLoggingSpec { - if in == nil { - return nil - } - out := new(NotaryLoggingSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServer) DeepCopyInto(out *NotaryServer) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServer. -func (in *NotaryServer) DeepCopy() *NotaryServer { - if in == nil { - return nil - } - out := new(NotaryServer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotaryServer) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerAuthSpec) DeepCopyInto(out *NotaryServerAuthSpec) { - *out = *in - in.Token.DeepCopyInto(&out.Token) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerAuthSpec. -func (in *NotaryServerAuthSpec) DeepCopy() *NotaryServerAuthSpec { - if in == nil { - return nil - } - out := new(NotaryServerAuthSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerAuthTokenSpec) DeepCopyInto(out *NotaryServerAuthTokenSpec) { - *out = *in - if in.AutoRedirect != nil { - in, out := &in.AutoRedirect, &out.AutoRedirect - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerAuthTokenSpec. -func (in *NotaryServerAuthTokenSpec) DeepCopy() *NotaryServerAuthTokenSpec { - if in == nil { - return nil - } - out := new(NotaryServerAuthTokenSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerList) DeepCopyInto(out *NotaryServerList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]NotaryServer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerList. -func (in *NotaryServerList) DeepCopy() *NotaryServerList { - if in == nil { - return nil - } - out := new(NotaryServerList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotaryServerList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerSpec) DeepCopyInto(out *NotaryServerSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - if in.TLS != nil { - in, out := &in.TLS, &out.TLS - *out = new(v1alpha1.ComponentsTLSSpec) - **out = **in - } - in.TrustService.DeepCopyInto(&out.TrustService) - out.Logging = in.Logging - in.Storage.DeepCopyInto(&out.Storage) - if in.Authentication != nil { - in, out := &in.Authentication, &out.Authentication - *out = new(NotaryServerAuthSpec) - (*in).DeepCopyInto(*out) - } - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(v1alpha1.Network) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerSpec. -func (in *NotaryServerSpec) DeepCopy() *NotaryServerSpec { - if in == nil { - return nil - } - out := new(NotaryServerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerTrustServiceRemoteSpec) DeepCopyInto(out *NotaryServerTrustServiceRemoteSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerTrustServiceRemoteSpec. -func (in *NotaryServerTrustServiceRemoteSpec) DeepCopy() *NotaryServerTrustServiceRemoteSpec { - if in == nil { - return nil - } - out := new(NotaryServerTrustServiceRemoteSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryServerTrustServiceSpec) DeepCopyInto(out *NotaryServerTrustServiceSpec) { - *out = *in - if in.Remote != nil { - in, out := &in.Remote, &out.Remote - *out = new(NotaryServerTrustServiceRemoteSpec) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryServerTrustServiceSpec. -func (in *NotaryServerTrustServiceSpec) DeepCopy() *NotaryServerTrustServiceSpec { - if in == nil { - return nil - } - out := new(NotaryServerTrustServiceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySigner) DeepCopyInto(out *NotarySigner) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySigner. -func (in *NotarySigner) DeepCopy() *NotarySigner { - if in == nil { - return nil - } - out := new(NotarySigner) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotarySigner) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerAuthenticationSpec) DeepCopyInto(out *NotarySignerAuthenticationSpec) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerAuthenticationSpec. -func (in *NotarySignerAuthenticationSpec) DeepCopy() *NotarySignerAuthenticationSpec { - if in == nil { - return nil - } - out := new(NotarySignerAuthenticationSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerList) DeepCopyInto(out *NotarySignerList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]NotarySigner, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerList. -func (in *NotarySignerList) DeepCopy() *NotarySignerList { - if in == nil { - return nil - } - out := new(NotarySignerList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NotarySignerList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerSpec) DeepCopyInto(out *NotarySignerSpec) { - *out = *in - in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) - out.Authentication = in.Authentication - out.Logging = in.Logging - in.Storage.DeepCopyInto(&out.Storage) - if in.MigrationEnabled != nil { - in, out := &in.MigrationEnabled, &out.MigrationEnabled - *out = new(bool) - **out = **in - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(v1alpha1.Network) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerSpec. -func (in *NotarySignerSpec) DeepCopy() *NotarySignerSpec { - if in == nil { - return nil - } - out := new(NotarySignerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotarySignerStorageSpec) DeepCopyInto(out *NotarySignerStorageSpec) { - *out = *in - in.NotaryStorageSpec.DeepCopyInto(&out.NotaryStorageSpec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotarySignerStorageSpec. -func (in *NotarySignerStorageSpec) DeepCopy() *NotarySignerStorageSpec { - if in == nil { - return nil - } - out := new(NotarySignerStorageSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NotaryStorageSpec) DeepCopyInto(out *NotaryStorageSpec) { - *out = *in - in.Postgres.DeepCopyInto(&out.Postgres) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotaryStorageSpec. -func (in *NotaryStorageSpec) DeepCopy() *NotaryStorageSpec { - if in == nil { - return nil - } - out := new(NotaryStorageSpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OssSpec) DeepCopyInto(out *OssSpec) { *out = *in diff --git a/apis/meta/v1alpha1/component.go b/apis/meta/v1alpha1/component.go index 2ad238b09..188bf2ecb 100644 --- a/apis/meta/v1alpha1/component.go +++ b/apis/meta/v1alpha1/component.go @@ -20,10 +20,7 @@ const ( PortalComponent // portal RegistryComponent // registry RegistryControllerComponent // registryctl - ChartMuseumComponent // chartmuseum ExporterComponent // exporter - NotaryServerComponent // notaryserver - NotarySignerComponent // notarysigner TrivyComponent // trivy componentCount diff --git a/apis/meta/v1alpha1/component_string.go b/apis/meta/v1alpha1/component_string.go index 80ae1cdd4..9372932e7 100644 --- a/apis/meta/v1alpha1/component_string.go +++ b/apis/meta/v1alpha1/component_string.go @@ -13,17 +13,14 @@ func _() { _ = x[PortalComponent-2] _ = x[RegistryComponent-3] _ = x[RegistryControllerComponent-4] - _ = x[ChartMuseumComponent-5] - _ = x[ExporterComponent-6] - _ = x[NotaryServerComponent-7] - _ = x[NotarySignerComponent-8] - _ = x[TrivyComponent-9] - _ = x[componentCount-10] + _ = x[ExporterComponent-5] + _ = x[TrivyComponent-6] + _ = x[componentCount-7] } -const _Component_name = "corejobserviceportalregistryregistryctlchartmuseumexporternotaryservernotarysignertrivycomponentCount" +const _Component_name = "corejobserviceportalregistryregistryctlexportertrivycomponentCount" -var _Component_index = [...]uint8{0, 4, 14, 20, 28, 39, 50, 58, 70, 82, 87, 101} +var _Component_index = [...]uint8{0, 4, 14, 20, 28, 39, 47, 52} func (i Component) String() string { if i < 0 || i >= Component(len(_Component_index)-1) { diff --git a/apis/meta/v1alpha1/logs.go b/apis/meta/v1alpha1/logs.go index c881779ef..1b691576f 100644 --- a/apis/meta/v1alpha1/logs.go +++ b/apis/meta/v1alpha1/logs.go @@ -176,38 +176,6 @@ func (l HarborLogLevel) JobService() JobServiceLogLevel { } } -// +kubebuilder:validation:Type=string -// +kubebuilder:validation:Enum={"debug","info","warning","error","fatal","panic"} -// NotaryLogLevel is the log level for NotaryServer and NotarySigner. -type NotaryLogLevel string - -const ( - NotaryDebug NotaryLogLevel = "debug" - NotaryInfo NotaryLogLevel = "info" - NotaryWarning NotaryLogLevel = "warning" - NotaryError NotaryLogLevel = "error" - NotaryFatal NotaryLogLevel = "fatal" - NotaryPanic NotaryLogLevel = "panic" -) - -// Notary get the log level for Notary component. -func (l HarborLogLevel) Notary() NotaryLogLevel { - switch l { - default: - return NotaryInfo - case HarborDebug: - return NotaryDebug - case HarborInfo: - return NotaryInfo - case HarborWarning: - return NotaryWarning - case HarborError: - return NotaryError - case HarborFatal: - return NotaryFatal - } -} - // +kubebuilder:validation:Type=string // +kubebuilder:validation:Enum={"debug","info","warning","error","fatal","panic"} // TrivyLogLevel is the log level for Trivy. diff --git a/apis/meta/v1alpha1/ports.go b/apis/meta/v1alpha1/ports.go index 19c5414c2..07887f611 100644 --- a/apis/meta/v1alpha1/ports.go +++ b/apis/meta/v1alpha1/ports.go @@ -5,11 +5,6 @@ const ( PortalHTTPSPortName = "https" ) -const ( - ChartMuseumHTTPPortName = "http" - ChartMuseumHTTPSPortName = "https" -) - const ( CoreHTTPPortName = "http" CoreHTTPSPortName = "https" @@ -36,14 +31,6 @@ const ( RegistryMetricsPortName = "metrics" ) -const ( - NotaryServerAPIPortName = "api" -) - -const ( - NotarySignerAPIPortName = "api" -) - const ( TrivyHTTPPortName = "http" TrivyHTTPSPortName = "https" diff --git a/apis/meta/v1alpha1/postgres.go b/apis/meta/v1alpha1/postgres.go index fcc9d679e..c30a2eb99 100644 --- a/apis/meta/v1alpha1/postgres.go +++ b/apis/meta/v1alpha1/postgres.go @@ -13,9 +13,7 @@ import ( type DatabaseName string const ( - CoreDatabase = "core" - NotaryServerDatabase = "notaryserver" - NotarySignerDatabase = "notarysigner" + CoreDatabase = "core" ) type ErrPostgresNoHost bool diff --git a/apis/meta/v1alpha1/redis.go b/apis/meta/v1alpha1/redis.go index 68608eb72..82152d94d 100644 --- a/apis/meta/v1alpha1/redis.go +++ b/apis/meta/v1alpha1/redis.go @@ -10,11 +10,10 @@ import ( type ComponentWithRedis Component const ( - CoreRedis = ComponentWithRedis(CoreComponent) - JobServiceRedis = ComponentWithRedis(JobServiceComponent) - RegistryRedis = ComponentWithRedis(RegistryComponent) - ChartMuseumRedis = ComponentWithRedis(ChartMuseumComponent) - TrivyRedis = ComponentWithRedis(TrivyComponent) + CoreRedis = ComponentWithRedis(CoreComponent) + JobServiceRedis = ComponentWithRedis(JobServiceComponent) + RegistryRedis = ComponentWithRedis(RegistryComponent) + TrivyRedis = ComponentWithRedis(TrivyComponent) ) type RedisHostSpec struct { @@ -112,20 +111,18 @@ func (c *RedisConnection) GetDSNStringWithRawPassword(password string) string { } const ( - coreRedisDatabaseIndex = 0 - registryRedisDatabaseIndex = 1 - jobServiceRedisDatabaseIndex = 2 - chartMuseumRedisDatabaseIndex = 3 - trivyRedisDatabaseIndex = 5 + coreRedisDatabaseIndex = 0 + registryRedisDatabaseIndex = 1 + jobServiceRedisDatabaseIndex = 2 + trivyRedisDatabaseIndex = 5 ) func (r ComponentWithRedis) Index() int32 { return map[ComponentWithRedis]int32{ - CoreRedis: coreRedisDatabaseIndex, - JobServiceRedis: jobServiceRedisDatabaseIndex, - RegistryRedis: registryRedisDatabaseIndex, - ChartMuseumRedis: chartMuseumRedisDatabaseIndex, - TrivyRedis: trivyRedisDatabaseIndex, + CoreRedis: coreRedisDatabaseIndex, + JobServiceRedis: jobServiceRedisDatabaseIndex, + RegistryRedis: registryRedisDatabaseIndex, + TrivyRedis: trivyRedisDatabaseIndex, }[r] } diff --git a/apis/meta/v1alpha1/secrets.go b/apis/meta/v1alpha1/secrets.go index 25a008849..d0fbce308 100644 --- a/apis/meta/v1alpha1/secrets.go +++ b/apis/meta/v1alpha1/secrets.go @@ -60,15 +60,6 @@ const ( ) const ( - // SecretTypeNotarySignerAliases contains aliases for encryption keys. - // Only "default" key is required. - // Keys must match [a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])? - // Passwords may be any string. - // - // Required field: - // - Secret.Data["default"] - The default password. - SecretTypeNotarySignerAliases corev1.SecretType = "goharbor.io/notary-signer-aliases" - // SharedSecretKey is the default password to use. DefaultAliasSecretKey = "default" ) diff --git a/apis/meta/v1alpha1/tls.go b/apis/meta/v1alpha1/tls.go index cf3a12f04..9d852c251 100644 --- a/apis/meta/v1alpha1/tls.go +++ b/apis/meta/v1alpha1/tls.go @@ -8,13 +8,11 @@ type ComponentWithTLS Component const ( CoreTLS = ComponentWithTLS(CoreComponent) - ChartMuseumTLS = ComponentWithTLS(ChartMuseumComponent) ExporterTLS = ComponentWithTLS(ExporterComponent) JobServiceTLS = ComponentWithTLS(JobServiceComponent) PortalTLS = ComponentWithTLS(PortalComponent) RegistryTLS = ComponentWithTLS(RegistryComponent) RegistryControllerTLS = ComponentWithTLS(RegistryControllerComponent) - NotaryServerTLS = ComponentWithTLS(NotaryServerComponent) TrivyTLS = ComponentWithTLS(TrivyComponent) ) diff --git a/charts/harbor-operator/README.md b/charts/harbor-operator/README.md index 6a6f5e0ad..6186cb68c 100644 --- a/charts/harbor-operator/README.md +++ b/charts/harbor-operator/README.md @@ -17,7 +17,6 @@ Deploy Harbor Operator | autoscaling.minReplicas | int | `1` | Minimum conroller replicas | | autoscaling.targetCPUUtilizationPercentage | int | `80` | CPU usage target for autoscaling | | autoscaling.targetMemoryUtilizationPercentage | int | No target | Memory usage target for autoscaling | -| controllers.chartmuseum.maxReconcile | int | `1` | Max parallel reconciliation for ChartMuseum controller | | controllers.common.classname | string | `""` | Harbor class handled by the operator. An empty class means watch all resources | | controllers.common.networkPolicies | bool | `false` | Whether the operator should manage network policies | | controllers.common.watchChildren | bool | `true` | Whether the operator should watch children | @@ -28,8 +27,6 @@ Deploy Harbor Operator | controllers.harborProject.requeueAfterMinutes | int | `5` | How often to reconcile HarborProjects | | controllers.harborcluster.maxReconcile | int | `1` | Max parallel reconciliation for HarborCluster controller | | controllers.jobservice.maxReconcile | int | `1` | Max parallel reconciliation for JobService controller | -| controllers.notaryserver.maxReconcile | int | `1` | Max parallel reconciliation for NotaryServer controller | -| controllers.notarysigner.maxReconcile | int | `1` | Max parallel reconciliation for NotarySigner controller | | controllers.portal.maxReconcile | int | `1` | Max parallel reconciliation for Portal controller | | controllers.registry.maxReconcile | int | `1` | Max parallel reconciliation for Registry controller | | controllers.registryctl.maxReconcile | int | `1` | Max parallel reconciliation for RegistryCtl controller | diff --git a/charts/harbor-operator/templates/clusterrole.yaml b/charts/harbor-operator/templates/clusterrole.yaml index 2b80d1f85..3f6f0fa25 100644 --- a/charts/harbor-operator/templates/clusterrole.yaml +++ b/charts/harbor-operator/templates/clusterrole.yaml @@ -243,20 +243,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums - verbs: - - get - - list - - watch -- apiGroups: - - goharbor.io - resources: - - chartmuseums - cores - exporters - jobservices - - notaryservers - - notarysigners - portals - registries - registrycontrollers @@ -272,12 +261,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums/finalizers - cores/finalizers - exporters/finalizers - jobservices/finalizers - - notaryservers/finalizers - - notarysigners/finalizers - portals/finalizers - registries/finalizers - registrycontrollers/finalizers @@ -290,14 +276,6 @@ rules: - patch - update - watch -- apiGroups: - - goharbor.io - resources: - - chartmuseums/status - verbs: - - get - - patch - - update - apiGroups: - goharbor.io resources: @@ -498,38 +476,6 @@ rules: - get - patch - update -- apiGroups: - - goharbor.io - resources: - - notaryservers - verbs: - - get - - list - - watch -- apiGroups: - - goharbor.io - resources: - - notaryservers/status - verbs: - - get - - patch - - update -- apiGroups: - - goharbor.io - resources: - - notarysigners - verbs: - - get - - list - - watch -- apiGroups: - - goharbor.io - resources: - - notarysigners/status - verbs: - - get - - patch - - update - apiGroups: - goharbor.io resources: diff --git a/charts/harbor-operator/templates/configmap.yaml b/charts/harbor-operator/templates/configmap.yaml index 971e9a4cb..1929c4e29 100644 --- a/charts/harbor-operator/templates/configmap.yaml +++ b/charts/harbor-operator/templates/configmap.yaml @@ -28,13 +28,6 @@ data: value: {{ . | quote }} {{- end}} - chartmuseum-ctrl.yaml: |- - {{- with .Values.controllers.chartmuseum.maxReconcile }} - - key: max-reconcile - priority: 200 - value: {{ . | quote }} - {{- end}} - harborconfiguration-ctrl.yaml: |- {{- with .Values.controllers.harborConfiguration.maxReconcile }} - key: max-reconcile @@ -82,20 +75,6 @@ data: value: {{ . | quote }} {{- end}} - notaryserver-ctrl.yaml: |- - {{- with .Values.controllers.notaryserver.maxReconcile }} - - key: max-reconcile - priority: 200 - value: {{ . | quote }} - {{- end}} - - notarysigner-ctrl.yaml: |- - {{- with .Values.controllers.notarysigner.maxReconcile }} - - key: max-reconcile - priority: 200 - value: {{ . | quote }} - {{- end}} - portal-ctrl.yaml: |- {{- with .Values.controllers.portal.maxReconcile }} - key: max-reconcile diff --git a/charts/harbor-operator/values.yaml b/charts/harbor-operator/values.yaml index 851f9291a..289aefbfc 100644 --- a/charts/harbor-operator/values.yaml +++ b/charts/harbor-operator/values.yaml @@ -72,10 +72,6 @@ controllers: # controllers.common.watchChildren -- Whether the operator should watch children watchChildren: true - chartmuseum: - # controllers.chartmuseum.maxReconcile -- Max parallel reconciliation for ChartMuseum controller - maxReconcile: 1 - harborConfiguration: # controllers.harborConfiguration.maxReconcile -- Max parallel reconciliation for HarborConfiguration controller maxReconcile: 1 @@ -102,14 +98,6 @@ controllers: # controllers.jobservice.maxReconcile -- Max parallel reconciliation for JobService controller maxReconcile: 1 - notaryserver: - # controllers.notaryserver.maxReconcile -- Max parallel reconciliation for NotaryServer controller - maxReconcile: 1 - - notarysigner: - # controllers.notarysigner.maxReconcile -- Max parallel reconciliation for NotarySigner controller - maxReconcile: 1 - portal: # controllers.portal.maxReconcile -- Max parallel reconciliation for Portal controller maxReconcile: 1 diff --git a/config/config/assets/chartmuseum-config.yaml.tmpl b/config/config/assets/chartmuseum-config.yaml.tmpl deleted file mode 100644 index d2a92734e..000000000 --- a/config/config/assets/chartmuseum-config.yaml.tmpl +++ /dev/null @@ -1,77 +0,0 @@ -{{- if .Spec.Server.TLS.Enabled }} -port: 8443 - -tls: - ca.cert: /etc/chartmuseum/ssl/ca.crt - cert: /etc/chartmuseum/ssl/tls.crt - key: /etc/chartmuseum/ssl/tls.key -{{- else }} -port: 8080 -{{- end }} - -allow.overwrite: {{ .Spec.Chart.AllowOverwrite }} - -auth: - anonymous.get: {{ .Spec.Authentication.AnonymousGet }} -{{- if .Spec.Authentication.Bearer }} - {{- if .Spec.Authentication.Bearer.CertificateRef }} - cert-path: /etc/chartmuseum/auth-certificates/tls.crt - {{- end }} - {{- if .Spec.Authentication.Bearer.Realm }} - realm: {{ .Spec.Authentication.Bearer.Realm }} - service: {{ .Spec.Authentication.Bearer.Service }} - {{- end }} -{{- end }} - -{{- if .Spec.Authentication.Bearer }} -bearer.auth: 1 -{{- end }} - -{{- if .Spec.Cache.Redis }} -{{- if .Spec.Cache.Redis.SentinelMasterSet }} -cache: redis_sentinel -{{- else }} -cache: redis -{{- end }} -cache.redis: - {{- if .Spec.Cache.Redis.SentinelMasterSet }} - mastername: {{ .Spec.Cache.Redis.SentinelMasterSet | quote }} - {{- end }} - {{- if .Spec.Cache.Redis.Port }} - addr: {{ printf "%s:%d" .Spec.Cache.Redis.Host .Spec.Cache.Redis.Port | quote }} - {{- else }} - addr: {{ .Spec.Cache.Redis.Host | quote }} - {{- end }} - # password: setted through environment variable - db: {{ .Spec.Cache.Redis.Database }} -{{- end }} - -context.path: '' - -debug: {{ .Spec.Log.Debug }} - -{{- if .Spec.Chart.Repo.DepthDynamic }} -depth.dynamic: {{ .Spec.Chart.Repo.DepthDynamic }} -{{- else }} -depth: {{ .Spec.Chart.Repo.Depth }} -{{- end }} - -disable: - api: {{ .Spec.Disable.API }} - delete: {{ .Spec.Disable.Delete }} - force.overwrite: {{ .Spec.Disable.ForceOverwrite }} - metrics: {{ .Spec.Disable.Metrics }} - statefiles: {{ .Spec.Disable.StateFiles }} - -index.limit: {{ .Spec.Chart.Index.ParallelLimit }} - -log: - health: {{ .Spec.Log.Health }} - json: {{ .Spec.Log.JSON }} - -max: - storage.objects: {{ .Spec.Chart.Storage.MaxStorageObjects }} - upload.size: {{ .Spec.Server.MaxUploadSize }} - -chart.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Chart }} -prov.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Provenance }} diff --git a/config/config/assets/notaryserver-config.json.tmpl b/config/config/assets/notaryserver-config.json.tmpl deleted file mode 100644 index effd64285..000000000 --- a/config/config/assets/notaryserver-config.json.tmpl +++ /dev/null @@ -1,58 +0,0 @@ -{{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} -{ - "server": { - {{- if .Spec.TLS }} - "tls_cert_file": "/etc/notary-server/certificates/tls.crt", - "tls_key_file": "/etc/notary-server/certificates/tls.key", - {{- end }} - "http_addr": ":4443" - }, - "trust_service": { - {{- if .Spec.TrustService.Remote }} - {{- if .Spec.TrustService.Remote.Host }} - "hostname": "{{ .Spec.TrustService.Remote.Host }}", - {{- end }} - {{- if .Spec.TrustService.Remote.Port }} - "port": "{{ .Spec.TrustService.Remote.Port }}", - {{- end }} - {{- if .Spec.TrustService.Remote.CertificateRef }} - "tls_ca_file": "/etc/notary-server/trust-certificates/ca.crt", - "tls_client_cert": "/etc/notary-server/trust-certificates/tls.crt", - "tls_client_key": "/etc/notary-server/trust-certificates/tls.key", - {{- end }} - {{- if .Spec.TrustService.Remote.KeyAlgorithm }} - "key_algorithm": "{{ .Spec.TrustService.Remote.KeyAlgorithm }}", - {{- end }} - "type": "remote" - {{- else }} - "type": "local" - {{- end }} - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}" - }, - {{- if .Spec.Authentication }} - "auth": { - "type": "token", - "options": { - "realm": "{{ .Spec.Authentication.Token.Realm }}", - "service": "{{ .Spec.Authentication.Token.Service }}", - "issuer": "{{ .Spec.Authentication.Token.Issuer }}", - "rootcertbundle": "/etc/notary-server/auth-certificates/tls.crt", - "autoredirect": "{{ .Spec.Authentication.Token.AutoRedirect }}" - } - }, - {{- end }} - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } -} diff --git a/config/config/assets/notarysigner-config.json.tmpl b/config/config/assets/notarysigner-config.json.tmpl deleted file mode 100644 index a401be983..000000000 --- a/config/config/assets/notarysigner-config.json.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -{{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} -{ - "server": { - "tls_cert_file": "/etc/notary-signer/certificates/tls.crt", - "tls_key_file": "/etc/notary-signer/certificates/tls.key", - "client_ca_file": "/etc/notary-signer/certificates/ca.crt", - "grpc_addr": ":7899" - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}", - "default_alias": "default" - }, - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } -} diff --git a/config/config/kustomization.yaml b/config/config/kustomization.yaml index 8c23e2904..e819567b9 100644 --- a/config/config/kustomization.yaml +++ b/config/config/kustomization.yaml @@ -8,11 +8,8 @@ configMapGenerator: - name: config-template behavior: create files: - - assets/chartmuseum-config.yaml.tmpl - assets/core-config.conf.tmpl - assets/jobservice-config.yaml.tmpl - - assets/notaryserver-config.json.tmpl - - assets/notarysigner-config.json.tmpl - assets/portal-config.conf.tmpl - assets/registry-config.yaml.tmpl - assets/registryctl-config.yaml.tmpl @@ -21,15 +18,12 @@ configMapGenerator: behavior: create files: - controllers/core-ctrl.yaml - - controllers/chartmuseum-ctrl.yaml - controllers/exporter-ctrl.yaml - controllers/harbor-ctrl.yaml - controllers/harborcluster-ctrl.yaml - controllers/harborconfiguration-ctrl.yaml - controllers/harborproject-ctrl.yaml - controllers/jobservice-ctrl.yaml - - controllers/notaryserver-ctrl.yaml - - controllers/notarysigner-ctrl.yaml - controllers/portal-ctrl.yaml - controllers/registry-ctrl.yaml - controllers/registryctl-ctrl.yaml diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml index c8f5d6017..69cd3e35a 100644 --- a/config/crd/kustomization.yaml +++ b/config/crd/kustomization.yaml @@ -2,13 +2,10 @@ # since it depends on service name and namespace that are out of this kustomize package. # It should be run by config/default resources: - - bases/goharbor.io_chartmuseums.yaml - bases/goharbor.io_cores.yaml - bases/goharbor.io_exporters.yaml - bases/goharbor.io_harbors.yaml - bases/goharbor.io_jobservices.yaml - - bases/goharbor.io_notaryservers.yaml - - bases/goharbor.io_notarysigners.yaml - bases/goharbor.io_portals.yaml - bases/goharbor.io_registries.yaml - bases/goharbor.io_registrycontrollers.yaml @@ -23,13 +20,10 @@ resources: patchesStrategicMerge: # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. # patches here are for enabling the conversion webhook for each CRD - - patches/webhook_in_chartmuseums.yaml - patches/webhook_in_cores.yaml - patches/webhook_in_exporters.yaml - patches/webhook_in_harbors.yaml - patches/webhook_in_jobservices.yaml - - patches/webhook_in_notaryservers.yaml - - patches/webhook_in_notarysigners.yaml - patches/webhook_in_portals.yaml - patches/webhook_in_registries.yaml - patches/webhook_in_registrycontrollers.yaml @@ -39,13 +33,10 @@ patchesStrategicMerge: # [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix. # patches here are for enabling the CA injection for each CRD - - patches/cainjection_in_chartmuseums.yaml - patches/cainjection_in_cores.yaml - patches/cainjection_in_exporters.yaml - patches/cainjection_in_harbors.yaml - patches/cainjection_in_jobservices.yaml - - patches/cainjection_in_notaryservers.yaml - - patches/cainjection_in_notarysigners.yaml - patches/cainjection_in_portals.yaml - patches/cainjection_in_registries.yaml - patches/cainjection_in_registrycontrollers.yaml diff --git a/config/crd/patches/cainjection_in_chartmuseums.yaml b/config/crd/patches/cainjection_in_chartmuseums.yaml deleted file mode 100644 index eb92aafe3..000000000 --- a/config/crd/patches/cainjection_in_chartmuseums.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# The following patch adds a directive for certmanager to inject CA into the CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) - name: chartmuseums.goharbor.io diff --git a/config/crd/patches/cainjection_in_notaryservers.yaml b/config/crd/patches/cainjection_in_notaryservers.yaml deleted file mode 100644 index f68bdfa42..000000000 --- a/config/crd/patches/cainjection_in_notaryservers.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# The following patch adds a directive for certmanager to inject CA into the CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) - name: notaryservers.goharbor.io diff --git a/config/crd/patches/cainjection_in_notarysigners.yaml b/config/crd/patches/cainjection_in_notarysigners.yaml deleted file mode 100644 index e1b0e2280..000000000 --- a/config/crd/patches/cainjection_in_notarysigners.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# The following patch adds a directive for certmanager to inject CA into the CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) - name: notarysigners.goharbor.io diff --git a/config/crd/patches/webhook_in_chartmuseums.yaml b/config/crd/patches/webhook_in_chartmuseums.yaml deleted file mode 100644 index 044673567..000000000 --- a/config/crd/patches/webhook_in_chartmuseums.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: chartmuseums.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: webhook-service - path: /convert diff --git a/config/crd/patches/webhook_in_notaryservers.yaml b/config/crd/patches/webhook_in_notaryservers.yaml deleted file mode 100644 index 521416a93..000000000 --- a/config/crd/patches/webhook_in_notaryservers.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: notaryservers.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: webhook-service - path: /convert diff --git a/config/crd/patches/webhook_in_notarysigners.yaml b/config/crd/patches/webhook_in_notarysigners.yaml deleted file mode 100644 index 7bf1b5104..000000000 --- a/config/crd/patches/webhook_in_notarysigners.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: notarysigners.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: webhook-service - path: /convert diff --git a/config/helm/crds/kustomization.yaml b/config/helm/crds/kustomization.yaml index 48ae06283..be5b2a3d6 100644 --- a/config/helm/crds/kustomization.yaml +++ b/config/helm/crds/kustomization.yaml @@ -9,12 +9,9 @@ commonAnnotations: cert-manager.io/inject-ca-from: 'harbor-operator-ns/harbor-operator-serving-cert' patchesStrategicMerge: -- patches/chartmuseums_service.yaml - patches/cores_service.yaml - patches/harbors_service.yaml - patches/jobservices_service.yaml -- patches/notarysigners_service.yaml -- patches/notaryservers_service.yaml - patches/portals_service.yaml - patches/registries_service.yaml - patches/registrycontrollers_service.yaml diff --git a/config/helm/crds/patches/chartmuseums_service.yaml b/config/helm/crds/patches/chartmuseums_service.yaml deleted file mode 100644 index d153c77b5..000000000 --- a/config/helm/crds/patches/chartmuseums_service.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: chartmuseums.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: 'harbor-operator' - path: /convert diff --git a/config/helm/crds/patches/notaryservers_service.yaml b/config/helm/crds/patches/notaryservers_service.yaml deleted file mode 100644 index b941cc3c2..000000000 --- a/config/helm/crds/patches/notaryservers_service.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: notaryservers.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: 'harbor-operator' - path: /convert diff --git a/config/helm/crds/patches/notarysigners_service.yaml b/config/helm/crds/patches/notarysigners_service.yaml deleted file mode 100644 index a0fab46ba..000000000 --- a/config/helm/crds/patches/notarysigners_service.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: notarysigners.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - conversionReviewVersions: - - v1 - clientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: 'harbor-operator' - path: /convert diff --git a/config/kustomizeconfig/chartmuseum.yaml b/config/kustomizeconfig/chartmuseum.yaml deleted file mode 100644 index 1abc0a1ca..000000000 --- a/config/kustomizeconfig/chartmuseum.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# This file is for teaching kustomize how to substitute name in ChartMuseum -nameReference: -- kind: Secret - version: v1 - fieldSpecs: - - kind: ChartMuseum - group: goharbor.io - path: spec/auth/basicAuthRef - - kind: ChartMuseum - group: goharbor.io - path: spec/auth/bearer/certificateRef - - kind: ChartMuseum - group: goharbor.io - path: spec/cache/redis/passwordRef - - kind: ChartMuseum - group: goharbor.io - path: spec/chart/storage/amazon/accessSecretRef - - kind: ChartMuseum - group: goharbor.io - path: spec/chart/storage/openstack/passwordRef - - kind: ChartMuseum - group: goharbor.io - path: spec/server/tls/certificateRef - - kind: ChartMuseum - group: goharbor.io - path: spec/imagePullSecrets/items/name - -- kind: PersistentVolumeClaim - version: v1 - fieldSpecs: - - kind: ChartMuseum - group: goharbor.io - path: spec/chart/storage/filesystem/volumeSource/persistentVolumeClaim/claimName - -- kind: ServiceAccount - version: v1 - fieldSpecs: - - kind: ChartMuseum - group: goharbor.io - path: spec/serviceAccountName diff --git a/config/kustomizeconfig/harbor.yaml b/config/kustomizeconfig/harbor.yaml index ed72145a3..6b321dde7 100644 --- a/config/kustomizeconfig/harbor.yaml +++ b/config/kustomizeconfig/harbor.yaml @@ -6,9 +6,6 @@ nameReference: - kind: Harbor group: goharbor.io path: spec/adminInitialPasswordRef - - kind: Harbor - group: goharbor.io - path: spec/chartmuseum/imagePullSecrets/items/name - kind: Harbor group: goharbor.io path: spec/core/imagePullSecrets/items/name @@ -18,9 +15,6 @@ nameReference: - kind: Harbor group: goharbor.io path: spec/expose/core/tls/certificateRef - - kind: Harbor - group: goharbor.io - path: spec/expose/notary/tls/certificateRef - kind: Harbor group: goharbor.io path: spec/harborAdminPasswordRef @@ -36,12 +30,6 @@ nameReference: - kind: Harbor group: goharbor.io path: spec/jobservice/imagePullSecrets/items/name - - kind: Harbor - group: goharbor.io - path: spec/notary/server/imagePullSecrets/items/name - - kind: Harbor - group: goharbor.io - path: spec/notary/signer/imagePullSecrets/items/name - kind: Harbor group: goharbor.io path: spec/portal/imagePullSecrets/items/name @@ -84,21 +72,12 @@ nameReference: - kind: ServiceAccount version: v1 fieldSpecs: - - kind: Harbor - group: goharbor.io - path: spec/chartmuseum/serviceAccountName - kind: Harbor group: goharbor.io path: spec/core/serviceAccountName - kind: Harbor group: goharbor.io path: spec/jobservice/serviceAccountName - - kind: Harbor - group: goharbor.io - path: spec/notary/server/serviceAccountName - - kind: Harbor - group: goharbor.io - path: spec/notary/signer/serviceAccountName - kind: Harbor group: goharbor.io path: spec/portal/serviceAccountName diff --git a/config/kustomizeconfig/harborcluster.yaml b/config/kustomizeconfig/harborcluster.yaml index 4f95fde94..bf9166dcb 100644 --- a/config/kustomizeconfig/harborcluster.yaml +++ b/config/kustomizeconfig/harborcluster.yaml @@ -6,9 +6,6 @@ nameReference: - kind: HarborCluster group: goharbor.io path: spec/adminInitialPasswordRef - - kind: HarborCluster - group: goharbor.io - path: spec/chartmuseum/imagePullSecrets/items/name - kind: HarborCluster group: goharbor.io path: spec/core/imagePullSecrets/items/name @@ -18,9 +15,6 @@ nameReference: - kind: HarborCluster group: goharbor.io path: spec/expose/core/tls/certificateRef - - kind: HarborCluster - group: goharbor.io - path: spec/expose/notary/tls/certificateRef - kind: HarborCluster group: goharbor.io path: spec/harborAdminPasswordRef @@ -36,12 +30,6 @@ nameReference: - kind: HarborCluster group: goharbor.io path: spec/jobservice/imagePullSecrets/items/name - - kind: HarborCluster - group: goharbor.io - path: spec/notary/server/imagePullSecrets/items/name - - kind: HarborCluster - group: goharbor.io - path: spec/notary/signer/imagePullSecrets/items/name - kind: HarborCluster group: goharbor.io path: spec/portal/imagePullSecrets/items/name @@ -84,21 +72,12 @@ nameReference: - kind: ServiceAccount version: v1 fieldSpecs: - - kind: HarborCluster - group: goharbor.io - path: spec/chartmuseum/serviceAccountName - kind: HarborCluster group: goharbor.io path: spec/core/serviceAccountName - kind: HarborCluster group: goharbor.io path: spec/jobservice/serviceAccountName - - kind: HarborCluster - group: goharbor.io - path: spec/notary/server/serviceAccountName - - kind: HarborCluster - group: goharbor.io - path: spec/notary/signer/serviceAccountName - kind: HarborCluster group: goharbor.io path: spec/portal/serviceAccountName diff --git a/config/kustomizeconfig/kustomization.yaml b/config/kustomizeconfig/kustomization.yaml index 982cffd66..f8e7ae4fb 100644 --- a/config/kustomizeconfig/kustomization.yaml +++ b/config/kustomizeconfig/kustomization.yaml @@ -1,7 +1,6 @@ # the following config is for teaching kustomize how to do kustomization for new CRDs. configurations: - certificate.yaml -- chartmuseum.yaml - core.yaml - harbor.yaml - harborcluster.yaml diff --git a/config/kustomizeconfig/notaryserver.yaml b/config/kustomizeconfig/notaryserver.yaml deleted file mode 100644 index 8e5ead0dd..000000000 --- a/config/kustomizeconfig/notaryserver.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# This file is for teaching kustomize how to substitute name in NotaryServer - -# TODO Add configuration for spec/migration/fileSystem - -nameReference: -- kind: Secret - version: v1 - fieldSpecs: - - kind: NotaryServer - group: goharbor.io - path: spec/authentication/token/certificateRef - - kind: NotaryServer - group: goharbor.io - path: spec/imagePullSecrets/items/name - - kind: NotaryServer - group: goharbor.io - path: spec/migration/github/personalAccessTokenRef - - kind: NotaryServer - group: goharbor.io - path: spec/storage/aliasesRef - - kind: NotaryServer - group: goharbor.io - path: spec/storage/postgres/passwordRef - - kind: NotaryServer - group: goharbor.io - path: spec/tls/certificateRef - - kind: NotaryServer - group: goharbor.io - path: spec/trustService/certificateRef - -- kind: ServiceAccount - version: v1 - fieldSpecs: - - kind: NotaryServer - group: goharbor.io - path: spec/serviceAccountName - -- kind: Service - version: v1 - fieldSpecs: - - kind: NotaryServer - group: goharbor.io - path: spec/storage/postgres/hosts/host - - kind: NotaryServer - group: goharbor.io - path: spec/trustService/remote/host diff --git a/config/kustomizeconfig/notarysigner.yaml b/config/kustomizeconfig/notarysigner.yaml deleted file mode 100644 index e2a7b93f6..000000000 --- a/config/kustomizeconfig/notarysigner.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# This file is for teaching kustomize how to substitute name in NotarySigner - -# TODO Add configuration for spec/migration/fileSystem - -nameReference: -- kind: Secret - version: v1 - fieldSpecs: - - kind: NotarySigner - group: goharbor.io - path: spec/authentication/certificateRef - - kind: NotarySigner - group: goharbor.io - path: spec/imagePullSecrets/items/name - - kind: NotarySigner - group: goharbor.io - path: spec/migration/github/personalAccessTokenRef - - kind: NotarySigner - group: goharbor.io - path: spec/storage/aliasesRef - - kind: NotarySigner - group: goharbor.io - path: spec/storage/postgres/passwordRef - -- kind: ServiceAccount - version: v1 - fieldSpecs: - - kind: NotarySigner - group: goharbor.io - path: spec/serviceAccountName - -- kind: Service - version: v1 - fieldSpecs: - - kind: NotarySigner - group: goharbor.io - path: spec/storage/postgres/hosts/host diff --git a/config/samples/database/init-db.sql b/config/samples/database/init-db.sql index efad520ad..b675b9541 100644 --- a/config/samples/database/init-db.sql +++ b/config/samples/database/init-db.sql @@ -1,4 +1,2 @@ CREATE DATABASE core WITH OWNER postgres; CREATE DATABASE clair WITH OWNER postgres; -CREATE DATABASE notaryserver WITH OWNER postgres; -CREATE DATABASE notarysigner WITH OWNER postgres; diff --git a/config/samples/harborcluster-minimal/https.yaml b/config/samples/harborcluster-minimal/https.yaml index f7aa993c7..9788f9896 100644 --- a/config/samples/harborcluster-minimal/https.yaml +++ b/config/samples/harborcluster-minimal/https.yaml @@ -24,4 +24,3 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain diff --git a/config/samples/harborcluster-standard/harbor_chartmuseum_patch.yaml b/config/samples/harborcluster-standard/harbor_chartmuseum_patch.yaml deleted file mode 100644 index f7af03339..000000000 --- a/config/samples/harborcluster-standard/harbor_chartmuseum_patch.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: goharbor.io/v1alpha3 -kind: HarborCluster -metadata: - name: sample -spec: - chartmuseum: {} - imageChartStorage: - filesystem: - chartPersistentVolume: - claimName: sample-harbor-chart diff --git a/config/samples/harborcluster-standard/harbor_notary_patch.yaml b/config/samples/harborcluster-standard/harbor_notary_patch.yaml deleted file mode 100644 index 9703d42c2..000000000 --- a/config/samples/harborcluster-standard/harbor_notary_patch.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: goharbor.io/v1alpha3 -kind: HarborCluster -metadata: - name: sample -spec: - notary: - migrationEnabled: true - expose: - notary: - ingress: - host: notary.harbor.domain - tls: - certificateRef: sample-public-certificate diff --git a/config/samples/harborcluster-standard/kustomization.yaml b/config/samples/harborcluster-standard/kustomization.yaml index 4ccd84d39..1b14646d9 100644 --- a/config/samples/harborcluster-standard/kustomization.yaml +++ b/config/samples/harborcluster-standard/kustomization.yaml @@ -11,7 +11,5 @@ bases: - ../harborcluster-minimal patchesStrategicMerge: -- harbor_chartmuseum_patch.yaml -- harbor_notary_patch.yaml - harbor_portal_patch.yaml - harbor_trivy_patch.yaml diff --git a/controllers/controller_string.go b/controllers/controller_string.go index 481516306..4b3dc6966 100644 --- a/controllers/controller_string.go +++ b/controllers/controller_string.go @@ -13,24 +13,21 @@ func _() { _ = x[Portal-2] _ = x[Registry-3] _ = x[RegistryController-4] - _ = x[ChartMuseum-5] - _ = x[Exporter-6] - _ = x[NotaryServer-7] - _ = x[NotarySigner-8] - _ = x[Trivy-9] - _ = x[Harbor-10] - _ = x[HarborCluster-11] - _ = x[HarborConfigurationCm-12] - _ = x[HarborConfiguration-13] - _ = x[HarborProject-14] - _ = x[HarborServerConfiguration-15] - _ = x[PullSecretBinding-16] - _ = x[Namespace-17] + _ = x[Exporter-5] + _ = x[Trivy-6] + _ = x[Harbor-7] + _ = x[HarborCluster-8] + _ = x[HarborConfigurationCm-9] + _ = x[HarborConfiguration-10] + _ = x[HarborProject-11] + _ = x[HarborServerConfiguration-12] + _ = x[PullSecretBinding-13] + _ = x[Namespace-14] } -const _Controller_name = "corejobserviceportalregistryregistryctlchartmuseumexporternotaryservernotarysignertrivyharborharborclusterharborconfigurationcmharborconfigurationharborprojectharborserverconfigurationpullsecretbindingnamespace" +const _Controller_name = "corejobserviceportalregistryregistryctlexportertrivyharborharborclusterharborconfigurationcmharborconfigurationharborprojectharborserverconfigurationpullsecretbindingnamespace" -var _Controller_index = [...]uint8{0, 4, 14, 20, 28, 39, 50, 58, 70, 82, 87, 93, 106, 127, 146, 159, 184, 201, 210} +var _Controller_index = [...]uint8{0, 4, 14, 20, 28, 39, 47, 52, 58, 71, 92, 111, 124, 149, 166} func (i Controller) String() string { if i < 0 || i >= Controller(len(_Controller_index)-1) { diff --git a/controllers/controllers.go b/controllers/controllers.go index 5a903cb98..7eb46ce9e 100644 --- a/controllers/controllers.go +++ b/controllers/controllers.go @@ -16,10 +16,7 @@ const ( Portal // portal Registry // registry RegistryController // registryctl - ChartMuseum // chartmuseum Exporter // exporter - NotaryServer // notaryserver - NotarySigner // notarysigner Trivy // trivy Harbor // harbor HarborCluster // harborcluster diff --git a/controllers/goharbor/chartmuseum/chartmuseum.go b/controllers/goharbor/chartmuseum/chartmuseum.go deleted file mode 100644 index 99517b7a5..000000000 --- a/controllers/goharbor/chartmuseum/chartmuseum.go +++ /dev/null @@ -1,98 +0,0 @@ -package chartmuseum - -import ( - "context" - "time" - - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/config" - "github.com/plotly/harbor-operator/pkg/config/template" - commonCtrl "github.com/plotly/harbor-operator/pkg/controller" - "github.com/plotly/harbor-operator/pkg/event-filter/class" - "github.com/ovh/configstore" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - netv1 "k8s.io/api/networking/v1" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/controller" -) - -const ( - DefaultRequeueWait = 2 * time.Second - DefaultConfigTemplateFileName = "chartmuseum-config.yaml.tmpl" -) - -// Reconciler reconciles a Chartmuseum object. -type Reconciler struct { - *commonCtrl.Controller -} - -// +kubebuilder:rbac:groups=goharbor.io,resources=chartmuseums,verbs=get;list;watch -// +kubebuilder:rbac:groups=goharbor.io,resources=chartmuseums/status,verbs=get;update;patch -// +kubebuilder:rbac:groups=networking.k8s.io,resources=networkpolicies,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups="",resources=configmaps;services,verbs=get;list;watch;create;update;patch;delete - -func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { - err := r.Controller.SetupWithManager(ctx, mgr) - if err != nil { - return errors.Wrap(err, "cannot setup common controller") - } - - templateConfig, err := r.Template(ctx) - if err != nil { - return errors.Wrap(err, "template") - } - - if err := mgr.AddReadyzCheck(r.NormalizeName(ctx, "template"), templateConfig.ReadyzCheck); err != nil { - return errors.Wrap(err, "cannot add template ready check") - } - - if err := mgr.AddHealthzCheck(r.NormalizeName(ctx, "template"), templateConfig.HealthzCheck); err != nil { - return errors.Wrap(err, "cannot add template health check") - } - - className, err := r.GetClassName(ctx) - if err != nil { - return errors.Wrap(err, "classname") - } - - concurrentReconcile, err := config.GetInt(r.ConfigStore, config.ReconciliationKey, config.DefaultConcurrentReconcile) - if err != nil { - return errors.Wrap(err, "cannot get concurrent reconcile") - } - - return ctrl.NewControllerManagedBy(mgr). - WithEventFilter(&class.Filter{ - ClassName: className, - }). - For(r.NewEmpty(ctx)). - Owns(&appsv1.Deployment{}). - Owns(&corev1.ConfigMap{}). - Owns(&corev1.Service{}). - Owns(&netv1.NetworkPolicy{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: concurrentReconcile, - }). - Complete(r) -} - -func (r *Reconciler) Template(ctx context.Context) (*template.ConfigTemplate, error) { - templateConfig, err := template.FromConfigStore(r.ConfigStore, DefaultConfigTemplateFileName) - if err != nil { - return nil, errors.Wrap(err, "from configstore") - } - - templateConfig.Register(r.ConfigStore) - - return templateConfig, nil -} - -func New(ctx context.Context, configStore *configstore.Store) (commonCtrl.Reconciler, error) { - r := &Reconciler{} - - r.Controller = commonCtrl.NewController(ctx, controllers.ChartMuseum, r, configStore) - - return r, nil -} diff --git a/controllers/goharbor/chartmuseum/chartmuseum_test.go b/controllers/goharbor/chartmuseum/chartmuseum_test.go deleted file mode 100644 index 81f023d90..000000000 --- a/controllers/goharbor/chartmuseum/chartmuseum_test.go +++ /dev/null @@ -1,143 +0,0 @@ -package chartmuseum_test - -import ( - "context" - "encoding/json" - "fmt" - "time" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/pods" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/rest" -) - -const defaultGenerationNumber int64 = 1 - -var _ = Describe("ChartMuseum", func() { - var ( - ns = test.InitNamespace(func() context.Context { return ctx }) - chartMuseum goharborv1.ChartMuseum - ) - - BeforeEach(func() { - className, err := reconciler.GetClassName(ctx) - Expect(err).ToNot(HaveOccurred()) - - chartMuseum.ObjectMeta = metav1.ObjectMeta{ - Name: test.NewName("chartmuseum"), - Namespace: ns.GetName(), - Annotations: test.AddVersionAnnotations(map[string]string{ - goharborv1.HarborClassAnnotation: className, - }), - } - }) - - JustAfterEach(pods.LogsAll(&ctx, func() types.NamespacedName { - return types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, chartMuseum.GetName()), - Namespace: chartMuseum.GetNamespace(), - } - })) - - Context("Without TLS", func() { - BeforeEach(func() { - chartMuseum.Spec = goharborv1.ChartMuseumSpec{ - Chart: goharborv1.ChartMuseumChartSpec{ - Storage: goharborv1.ChartMuseumChartStorageSpec{ - ChartMuseumChartStorageDriverSpec: goharborv1.ChartMuseumChartStorageDriverSpec{ - FileSystem: &goharborv1.ChartMuseumChartStorageDriverFilesystemSpec{ - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{}, - }, - }, - }, - }, - URL: "http://the.chartserver.url", - }, - } - }) - - It("Should works", func() { - By("Creating new resource", func() { - Ω(test.GetClient(ctx).Create(ctx, &chartMuseum)). - Should(test.SuccessOrExists) - - Eventually(func() error { return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(&chartMuseum), &chartMuseum) }, time.Minute, 5*time.Second). - Should(Succeed(), "resource should exists") - - Ω(chartMuseum.GetGeneration()). - Should(Equal(defaultGenerationNumber), "Generation should not be updated") - - test.EnsureReady(ctx, &chartMuseum, time.Minute, 5*time.Second) - - IntegTest(ctx, &chartMuseum) - }) - - By("Updating resource spec", func() { - oldGeneration := chartMuseum.GetGeneration() - - test.ScaleUp(ctx, &chartMuseum) - - Ω(chartMuseum.GetGeneration()). - Should(BeNumerically(">", oldGeneration), "ObservedGeneration should be updated") - - Ω(test.GetClient(ctx).Get(ctx, test.GetNamespacedName(&chartMuseum), &chartMuseum)). - Should(Succeed(), "resource should still be accessible") - - test.EnsureReady(ctx, &chartMuseum, time.Minute, 5*time.Second) - - IntegTest(ctx, &chartMuseum) - }) - - By("Deleting resource", func() { - Ω(test.GetClient(ctx).Delete(ctx, &chartMuseum)). - Should(Succeed()) - - Eventually(func() error { - return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(&chartMuseum), &chartMuseum) - }, time.Minute, 5*time.Second). - ShouldNot(Succeed(), "Resource should no more exist") - }) - }) - }) -}) - -func IntegTest(ctx context.Context, chartMuseum *goharborv1.ChartMuseum) { - client, err := rest.UnversionedRESTClientFor(test.NewRestConfig(ctx)) - Expect(err).ToNot(HaveOccurred()) - - namespacedName := types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, chartMuseum.GetName()), - Namespace: chartMuseum.GetNamespace(), - } - - proxyReq := client.Get(). - Resource("services"). - Namespace(namespacedName.Namespace). - Name(fmt.Sprintf("%s:%s", namespacedName.Name, harbormetav1.ChartMuseumHTTPPortName)). - SubResource("proxy"). - Suffix("health"). - MaxRetries(0) - - Eventually(func() ([]byte, error) { - return proxyReq.DoRaw(ctx) - }). - Should(WithTransform(func(result []byte) bool { - var health struct { - Healthy bool `json:"healthy"` - } - - Ω(json.Unmarshal(result, &health)). - Should(Succeed()) - - return health.Healthy - }, BeTrue())) -} diff --git a/controllers/goharbor/chartmuseum/configs.go b/controllers/goharbor/chartmuseum/configs.go deleted file mode 100644 index 5ecf5a377..000000000 --- a/controllers/goharbor/chartmuseum/configs.go +++ /dev/null @@ -1,44 +0,0 @@ -package chartmuseum - -import ( - "context" - "crypto/sha256" - "fmt" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - conftemplate "github.com/plotly/harbor-operator/pkg/config/template" - "github.com/plotly/harbor-operator/pkg/resources/checksum" - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ConfigName = "config.yaml" - -func (r *Reconciler) GetConfigMap(ctx context.Context, chartMuseum *goharborv1.ChartMuseum) (*corev1.ConfigMap, error) { - templateConfig, err := r.ConfigStore.GetItemValue(conftemplate.ConfigTemplateKey) - if err != nil { - return nil, errors.Wrap(err, "cannot get template") - } - - content, err := r.GetTemplatedConfig(ctx, templateConfig, chartMuseum) - if err != nil { - return nil, err - } - - name := r.NormalizeName(ctx, chartMuseum.GetName()) - namespace := chartMuseum.GetNamespace() - - return &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: map[string]string{ - checksum.GetStaticID("template"): fmt.Sprintf("%x", sha256.Sum256([]byte(templateConfig))), - }, - }, - BinaryData: map[string][]byte{ - ConfigName: content, - }, - }, nil -} diff --git a/controllers/goharbor/chartmuseum/deployments.go b/controllers/goharbor/chartmuseum/deployments.go deleted file mode 100644 index 2c334de29..000000000 --- a/controllers/goharbor/chartmuseum/deployments.go +++ /dev/null @@ -1,474 +0,0 @@ -package chartmuseum - -import ( - "context" - "path" - "strings" - "time" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/image" - "github.com/plotly/harbor-operator/pkg/version" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -const ( - ConfigPath = "/etc/chartmuseum" - HealthPath = "/health" - VolumeName = "config" - InternalCertificatesVolumeName = "internal-certificates" - InternalCertificateAuthorityDirectory = "/harbor_cust_cert" - InternalCertificatesPath = ConfigPath + "/ssl" - LocalStorageVolume = "storage" - DefaultLocalStoragePath = "/mnt/chartstorage" - StorageTimestampTolerance = 1 * time.Second - GcsJSONKeyFilePath = "/etc/gcs/gcs-key.json" -) - -var ( - varFalse = false - - fsGroup int64 = 10000 - runAsGroup int64 = 10000 - runAsUser int64 = 10000 -) - -const ( - httpsPort = 8443 - httpPort = 8080 -) - -func (r *Reconciler) GetDeployment(ctx context.Context, chartMuseum *goharborv1.ChartMuseum) (*appsv1.Deployment, error) { //nolint:funlen - getImageOptions := []image.Option{ - image.WithImageFromSpec(chartMuseum.Spec.Image), - image.WithHarborVersion(version.GetVersion(chartMuseum.Annotations)), - } - - image, err := image.GetImage(ctx, harbormetav1.ChartMuseumComponent.String(), getImageOptions...) - if err != nil { - return nil, errors.Wrap(err, "cannot get image") - } - - name := r.NormalizeName(ctx, chartMuseum.GetName()) - namespace := chartMuseum.GetNamespace() - - envs := []corev1.EnvVar{{ - Name: "CONFIG", - Value: path.Join(ConfigPath, ConfigName), - }, { - Name: "STORAGE_TIMESTAMP_TOLERANCE", - Value: StorageTimestampTolerance.String(), - }} - - volumes := []corev1.Volume{ - { - Name: VolumeName, - VolumeSource: corev1.VolumeSource{ - ConfigMap: &corev1.ConfigMapVolumeSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: name, - }, - Optional: &varFalse, - }, - }, - }, - } - - volumeMounts := []corev1.VolumeMount{{ - Name: VolumeName, - MountPath: ConfigPath, - }} - - // inject s3 cert if need. - if chartMuseum.Spec.CertificateInjection.ShouldInject() { - volumes = append(volumes, chartMuseum.Spec.CertificateInjection.GenerateVolumes()...) - volumeMounts = append(volumeMounts, chartMuseum.Spec.CertificateInjection.GenerateVolumeMounts()...) - } - - if chartMuseum.Spec.Authentication.BasicAuthRef != "" { - envs = append(envs, corev1.EnvVar{ - Name: "BASIC_AUTH_USER", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Authentication.BasicAuthRef, - }, - Key: corev1.BasicAuthUsernameKey, - }, - }, - }, corev1.EnvVar{ - Name: "BASIC_AUTH_PASS", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Authentication.BasicAuthRef, - }, - Key: corev1.BasicAuthPasswordKey, - }, - }, - }) - } - - envFroms := []corev1.EnvFromSource{} - - if chartMuseum.Spec.Chart.URL != "" { - envs = append(envs, corev1.EnvVar{ - Name: "CHART_URL", - Value: chartMuseum.Spec.Chart.URL, - }) - } - - // refer https://github.com/helm/chartmuseum/blob/main/README.md and https://github.com/helm/chartmuseum/blob/main/pkg/config/vars.go - if chartMuseum.Spec.Chart.Storage.Oss != nil { //nolint:dupl - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "alibaba", - }, corev1.EnvVar{ - Name: "STORAGE_ALIBABA_BUCKET", - Value: chartMuseum.Spec.Chart.Storage.Oss.Bucket, - }, corev1.EnvVar{ - Name: "STORAGE_ALIBABA_ENDPOINT", - Value: chartMuseum.Spec.Chart.Storage.Oss.Endpoint, - }, corev1.EnvVar{ - Name: "ALIBABA_CLOUD_ACCESS_KEY_ID", - Value: chartMuseum.Spec.Chart.Storage.Oss.AccessKeyID, - }, corev1.EnvVar{ - Name: "STORAGE_ALIBABA_PREFIX", - Value: getChartFolder(chartMuseum.Spec.Chart.Storage.Oss.PathPrefix), - }) - - if chartMuseum.Spec.Chart.Storage.Oss.AccessSecretRef != "" { - envs = append(envs, corev1.EnvVar{ - Name: "ALIBABA_CLOUD_ACCESS_KEY_SECRET", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Chart.Storage.Oss.AccessSecretRef, - }, - Key: harbormetav1.SharedSecretKey, - }, - }, - }) - } - } - - if chartMuseum.Spec.Chart.Storage.Gcs != nil { - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "google", - }, corev1.EnvVar{ - Name: "STORAGE_GOOGLE_BUCKET", - Value: chartMuseum.Spec.Chart.Storage.Gcs.Bucket, - }, corev1.EnvVar{ - Name: "GOOGLE_APPLICATION_CREDENTIALS", - Value: GcsJSONKeyFilePath, - }, corev1.EnvVar{ - Name: "STORAGE_GOOGLE_PREFIX", - Value: getChartFolder(chartMuseum.Spec.Chart.Storage.Gcs.PathPrefix), - }) - - volumes = append(volumes, corev1.Volume{ - Name: "gcs-key", - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: chartMuseum.Spec.Chart.Storage.Gcs.KeyDataSecretRef, - Items: []corev1.KeyToPath{ - { - Key: "GCS_KEY_DATA", - Path: "gcs-key.json", - }, - }, - }, - }, - }) - - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: "gcs-key", - MountPath: GcsJSONKeyFilePath, - SubPath: "gcs-key.json", - }) - } - - if chartMuseum.Spec.Chart.Storage.Azure != nil { //nolint:dupl - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "microsoft", - }, corev1.EnvVar{ - Name: "STORAGE_MICROSOFT_CONTAINER", - Value: chartMuseum.Spec.Chart.Storage.Azure.Container, - }, corev1.EnvVar{ - Name: "AZURE_STORAGE_ACCOUNT", - Value: chartMuseum.Spec.Chart.Storage.Azure.AccountName, - }, corev1.EnvVar{ - Name: "AZURE_BASE_URL", - Value: chartMuseum.Spec.Chart.Storage.Azure.BaseURL, - }, corev1.EnvVar{ - Name: "STORAGE_MICROSOFT_PREFIX", - Value: getChartFolder(chartMuseum.Spec.Chart.Storage.Azure.PathPrefix), - }) - - if chartMuseum.Spec.Chart.Storage.Azure.AccountKeyRef != "" { - envs = append(envs, corev1.EnvVar{ - Name: "AZURE_STORAGE_ACCESS_KEY", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Chart.Storage.Azure.AccountKeyRef, - }, - Key: harbormetav1.SharedSecretKey, - }, - }, - }) - } - } - - if chartMuseum.Spec.Chart.Storage.Amazon != nil { - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "amazon", - }, corev1.EnvVar{ - Name: "AWS_ACCESS_KEY_ID", - Value: chartMuseum.Spec.Chart.Storage.Amazon.AccessKeyID, - }, corev1.EnvVar{ - Name: "STORAGE_AMAZON_BUCKET", - Value: chartMuseum.Spec.Chart.Storage.Amazon.Bucket, - }, corev1.EnvVar{ - Name: "STORAGE_AMAZON_PREFIX", - Value: getChartFolder(chartMuseum.Spec.Chart.Storage.Amazon.Prefix), - }, corev1.EnvVar{ - Name: "STORAGE_AMAZON_REGION", - Value: chartMuseum.Spec.Chart.Storage.Amazon.Region, - }, corev1.EnvVar{ - Name: "STORAGE_AMAZON_ENDPOINT", - Value: chartMuseum.Spec.Chart.Storage.Amazon.Endpoint, - }) - - if chartMuseum.Spec.Chart.Storage.Amazon.AccessSecretRef != "" { - envs = append(envs, corev1.EnvVar{ - Name: "AWS_SECRET_ACCESS_KEY", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Chart.Storage.Amazon.AccessSecretRef, - }, - Key: harbormetav1.SharedSecretKey, - }, - }, - }) - } - } - - if chartMuseum.Spec.Chart.Storage.OpenStack != nil { - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "openstack", - }, corev1.EnvVar{ - Name: "OS_AUTH_URL", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.AuthenticationURL, - }, corev1.EnvVar{ - Name: "OS_PASSWORD", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Chart.Storage.OpenStack.PasswordRef, - }, - Key: harbormetav1.SharedSecretKey, - }, - }, - }, corev1.EnvVar{ - Name: "STORAGE_OPENSTACK_PREFIX", - Value: getChartFolder(chartMuseum.Spec.Chart.Storage.OpenStack.Prefix), - }, corev1.EnvVar{ - Name: "STORAGE_OPENSTACK_REGION", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.Region, - }, corev1.EnvVar{ - Name: "STORAGE_OPENSTACK_CONTAINER", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.Container, - }) - - if chartMuseum.Spec.Chart.Storage.OpenStack.Username != "" { - envs = append(envs, corev1.EnvVar{ - Name: "OS_USERNAME", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.Username, - }) - } else { - envs = append(envs, corev1.EnvVar{ - Name: "OS_USERID", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.UserID, - }) - } - - if chartMuseum.Spec.Chart.Storage.OpenStack.Tenant != "" { - envs = append(envs, corev1.EnvVar{ - Name: "OS_TENANT_NAME", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.Tenant, - }) - } else { - envs = append(envs, corev1.EnvVar{ - Name: "OS_TENANT_ID", - Value: chartMuseum.Spec.Chart.Storage.OpenStack.TenantID, - }) - } - } - - if chartMuseum.Spec.Chart.Storage.FileSystem != nil { - envs = append(envs, corev1.EnvVar{ - Name: "STORAGE", - Value: "local", - }, corev1.EnvVar{ - Name: "STORAGE_LOCAL_ROOTDIR", - Value: path.Join(DefaultLocalStoragePath, chartMuseum.Spec.Chart.Storage.FileSystem.Prefix), - }) - - volumes = append(volumes, corev1.Volume{ - Name: LocalStorageVolume, - VolumeSource: chartMuseum.Spec.Chart.Storage.FileSystem.VolumeSource, - }) - - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: LocalStorageVolume, - MountPath: DefaultLocalStoragePath, - SubPath: strings.TrimLeft(chartMuseum.Spec.Chart.Storage.FileSystem.Prefix, "/"), - ReadOnly: false, - }) - } - - if chartMuseum.Spec.Cache.Redis != nil && len(chartMuseum.Spec.Cache.Redis.PasswordRef) > 0 { - envs = append(envs, corev1.EnvVar{ - Name: "CACHE_REDIS_PASSWORD", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: chartMuseum.Spec.Cache.Redis.PasswordRef, - }, - Key: harbormetav1.RedisPasswordKey, - Optional: &varFalse, - }, - }, - }) - } - - if chartMuseum.Spec.Server.TLS.Enabled() { - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: InternalCertificatesVolumeName, - MountPath: path.Join(InternalCertificateAuthorityDirectory, corev1.ServiceAccountRootCAKey), - SubPath: strings.TrimLeft(corev1.ServiceAccountRootCAKey, "/"), - ReadOnly: true, - }, corev1.VolumeMount{ - Name: InternalCertificatesVolumeName, - MountPath: InternalCertificatesPath, - ReadOnly: true, - }) - - volumes = append(volumes, corev1.Volume{ - Name: InternalCertificatesVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: chartMuseum.Spec.Server.TLS.CertificateRef, - }, - }, - }) - } else { - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: InternalCertificatesVolumeName, - MountPath: InternalCertificateAuthorityDirectory, - }) - - volumes = append(volumes, corev1.Volume{ - Name: InternalCertificatesVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{}, - }, - }) - } - - port := harbormetav1.ChartMuseumHTTPPortName - if chartMuseum.Spec.Server.TLS.Enabled() { - port = harbormetav1.ChartMuseumHTTPSPortName - } - - httpGET := &corev1.HTTPGetAction{ - Path: HealthPath, - Port: intstr.FromString(port), - Scheme: chartMuseum.Spec.Server.TLS.GetScheme(), - } - - deploy := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.NewVersionAnnotations(chartMuseum.Annotations), - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Replicas: chartMuseum.Spec.Replicas, - Template: corev1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: chartMuseum.Spec.ComponentSpec.TemplateAnnotations, - Labels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Spec: corev1.PodSpec{ - NodeSelector: chartMuseum.Spec.NodeSelector, - AutomountServiceAccountToken: &varFalse, - Volumes: volumes, - SecurityContext: &corev1.PodSecurityContext{ - FSGroup: &fsGroup, - RunAsGroup: &runAsGroup, - RunAsUser: &runAsUser, - }, - Containers: []corev1.Container{{ - Name: controllers.ChartMuseum.String(), - Image: image, - Ports: []corev1.ContainerPort{{ - Name: harbormetav1.ChartMuseumHTTPPortName, - ContainerPort: httpPort, - Protocol: corev1.ProtocolTCP, - }, { - Name: harbormetav1.ChartMuseumHTTPSPortName, - ContainerPort: httpsPort, - Protocol: corev1.ProtocolTCP, - }}, - - EnvFrom: envFroms, - Env: envs, - - VolumeMounts: volumeMounts, - - LivenessProbe: &corev1.Probe{ - ProbeHandler: corev1.ProbeHandler{ - HTTPGet: httpGET, - }, - }, - ReadinessProbe: &corev1.Probe{ - ProbeHandler: corev1.ProbeHandler{ - HTTPGet: httpGET, - }, - }, - }}, - }, - }, - }, - } - - chartMuseum.Spec.ComponentSpec.ApplyToDeployment(deploy) - - return deploy, nil -} - -func getChartFolder(prefix string) string { - return path.Join(prefix, "chart_storage") -} diff --git a/controllers/goharbor/chartmuseum/networkpolicies.go b/controllers/goharbor/chartmuseum/networkpolicies.go deleted file mode 100644 index 5d012f798..000000000 --- a/controllers/goharbor/chartmuseum/networkpolicies.go +++ /dev/null @@ -1,78 +0,0 @@ -package chartmuseum - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/pkg/errors" - netv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -type NetworkPolicy graph.Resource - -func (r *Reconciler) AddNetworkPolicies(ctx context.Context, chartMuseum *goharborv1.ChartMuseum) error { - areNetworkPoliciesEnabled, err := r.AreNetworkPoliciesEnabled(ctx, chartMuseum) - if err != nil { - return errors.Wrapf(err, "cannot get status") - } - - if !areNetworkPoliciesEnabled { - return nil - } - - _, err = r.AddIngressNetworkPolicy(ctx, chartMuseum) - if err != nil { - return errors.Wrapf(err, "ingress") - } - - return nil -} - -func (r *Reconciler) AddIngressNetworkPolicy(ctx context.Context, chartmuseum *goharborv1.ChartMuseum) (NetworkPolicy, error) { - networkPolicy, err := r.GetIngressNetworkPolicy(ctx, chartmuseum) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - networkPolicyRes, err := r.Controller.AddNetworkPolicyToManage(ctx, networkPolicy) - - return NetworkPolicy(networkPolicyRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetIngressNetworkPolicy(ctx context.Context, chartmuseum *goharborv1.ChartMuseum) (*netv1.NetworkPolicy, error) { - var port intstr.IntOrString - - if chartmuseum.Spec.Server.TLS != nil { - port = intstr.FromString(harbormetav1.ChartMuseumHTTPSPortName) - } else { - port = intstr.FromString(harbormetav1.ChartMuseumHTTPPortName) - } - - return &netv1.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, chartmuseum.GetName(), "ingress"), - Namespace: chartmuseum.GetNamespace(), - }, - Spec: netv1.NetworkPolicySpec{ - Ingress: []netv1.NetworkPolicyIngressRule{ - { - Ports: []netv1.NetworkPolicyPort{{ - Port: &port, - }}, - }, - }, - PodSelector: metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): r.NormalizeName(ctx, chartmuseum.GetName()), - }, - }, - PolicyTypes: []netv1.PolicyType{ - netv1.PolicyTypeIngress, - }, - }, - }, nil -} diff --git a/controllers/goharbor/chartmuseum/resources.go b/controllers/goharbor/chartmuseum/resources.go deleted file mode 100644 index b18811a38..000000000 --- a/controllers/goharbor/chartmuseum/resources.go +++ /dev/null @@ -1,55 +0,0 @@ -package chartmuseum - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - serrors "github.com/plotly/harbor-operator/pkg/controller/errors" - "github.com/plotly/harbor-operator/pkg/resources" - "github.com/pkg/errors" -) - -func (r *Reconciler) NewEmpty(_ context.Context) resources.Resource { - return &goharborv1.ChartMuseum{} -} - -func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resource) error { - chartMuseum, ok := resource.(*goharborv1.ChartMuseum) - if !ok { - return serrors.UnrecoverrableError(errors.Errorf("%+v", resource), serrors.OperatorReason, "unable to add resource") - } - - service, err := r.GetService(ctx, chartMuseum) - if err != nil { - return errors.Wrap(err, "cannot get service") - } - - _, err = r.Controller.AddServiceToManage(ctx, service) - if err != nil { - return errors.Wrapf(err, "cannot add service %s", service.GetName()) - } - - configMap, err := r.GetConfigMap(ctx, chartMuseum) - if err != nil { - return errors.Wrap(err, "cannot get configMap") - } - - configMapResource, err := r.Controller.AddConfigMapToManage(ctx, configMap) - if err != nil { - return errors.Wrapf(err, "cannot add configMap %s", configMap.GetName()) - } - - deployment, err := r.GetDeployment(ctx, chartMuseum) - if err != nil { - return errors.Wrap(err, "cannot get deployment") - } - - _, err = r.Controller.AddDeploymentToManage(ctx, deployment, configMapResource) - if err != nil { - return errors.Wrapf(err, "cannot add deployment %s", deployment.GetName()) - } - - err = r.AddNetworkPolicies(ctx, chartMuseum) - - return errors.Wrap(err, "network policies") -} diff --git a/controllers/goharbor/chartmuseum/services.go b/controllers/goharbor/chartmuseum/services.go deleted file mode 100644 index 174046e4a..000000000 --- a/controllers/goharbor/chartmuseum/services.go +++ /dev/null @@ -1,48 +0,0 @@ -package chartmuseum - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -func (r *Reconciler) GetService(ctx context.Context, chartMuseum *goharborv1.ChartMuseum) (*corev1.Service, error) { - name := r.NormalizeName(ctx, chartMuseum.GetName()) - namespace := chartMuseum.GetNamespace() - - var ports []corev1.ServicePort - - if chartMuseum.Spec.Server.TLS.Enabled() { - ports = append(ports, corev1.ServicePort{ - Name: harbormetav1.ChartMuseumHTTPSPortName, - Port: harbormetav1.HTTPSPort, - TargetPort: intstr.FromString(harbormetav1.ChartMuseumHTTPSPortName), - Protocol: corev1.ProtocolTCP, - }) - } else { - ports = append(ports, corev1.ServicePort{ - Name: harbormetav1.ChartMuseumHTTPPortName, - Port: harbormetav1.HTTPPort, - TargetPort: intstr.FromString(harbormetav1.ChartMuseumHTTPPortName), - Protocol: corev1.ProtocolTCP, - }) - } - - return &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Spec: corev1.ServiceSpec{ - Ports: ports, - Selector: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - }, nil -} diff --git a/controllers/goharbor/chartmuseum/suite_test.go b/controllers/goharbor/chartmuseum/suite_test.go deleted file mode 100644 index 81cdc42db..000000000 --- a/controllers/goharbor/chartmuseum/suite_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package chartmuseum_test - -import ( - "context" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - "github.com/plotly/harbor-operator/controllers/goharbor/chartmuseum" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/controllers" -) - -var ( - ctx context.Context - reconciler *chartmuseum.Reconciler -) - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Controller Suite") -} - -var _ = BeforeSuite(func() { - ctx = test.InitSuite() - - className := test.NewName("class") - - reconciler = controllers.NewChartMuseum(ctx, className) - - test.StartManager(ctx) -}) - -var _ = AfterSuite(func() { - defer test.AfterSuite(ctx) - - ctx.Done() -}) diff --git a/controllers/goharbor/chartmuseum_test.go b/controllers/goharbor/chartmuseum_test.go deleted file mode 100644 index 249c4a317..000000000 --- a/controllers/goharbor/chartmuseum_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package goharbor_test - -import ( - "context" - - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -func newChartMuseumController() controllerTest { - return controllerTest{ - Setup: setupValidChartMuseum, - Update: updateChartMuseum, - GetStatusFunc: getChartMuseumStatusFunc, - } -} - -func setupValidChartMuseum(ctx context.Context, ns string) (Resource, client.ObjectKey) { - name := newName("chartmuseum") - chartmuseum := &goharborv1.ChartMuseum{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: ns, - Annotations: test.AddVersionAnnotations(nil), - }, - Spec: goharborv1.ChartMuseumSpec{ - Chart: goharborv1.ChartMuseumChartSpec{ - Storage: goharborv1.ChartMuseumChartStorageSpec{ - ChartMuseumChartStorageDriverSpec: goharborv1.ChartMuseumChartStorageDriverSpec{ - FileSystem: &goharborv1.ChartMuseumChartStorageDriverFilesystemSpec{ - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{}, - }, - }, - }, - }, - URL: "https://the.chartserver.url", - }, - }, - } - - Expect(k8sClient.Create(ctx, chartmuseum)).To(Succeed()) - - return chartmuseum, client.ObjectKey{ - Name: name, - Namespace: ns, - } -} - -func updateChartMuseum(ctx context.Context, object Resource) { - chartmuseum, ok := object.(*goharborv1.ChartMuseum) - Expect(ok).To(BeTrue()) - - var replicas int32 = 1 - - if chartmuseum.Spec.Replicas != nil { - replicas = *chartmuseum.Spec.Replicas + 1 - } - - chartmuseum.Spec.Replicas = &replicas -} - -func getChartMuseumStatusFunc(ctx context.Context, key client.ObjectKey) func() harbormetav1.ComponentStatus { - return func() harbormetav1.ComponentStatus { - var chartmuseum goharborv1.ChartMuseum - - err := k8sClient.Get(ctx, key, &chartmuseum) - - Expect(err).ToNot(HaveOccurred()) - - return chartmuseum.Status - } -} diff --git a/controllers/goharbor/controller_test.go b/controllers/goharbor/controller_test.go index 94d83c02d..a80ced542 100644 --- a/controllers/goharbor/controller_test.go +++ b/controllers/goharbor/controller_test.go @@ -100,10 +100,7 @@ var _ = DescribeTable( }, Entry("Portal", newPortalController(), 30*time.Second, 2*time.Second), Entry("Registry", newRegistryController(), time.Minute, 5*time.Second), - Entry("ChartMuseum", newChartMuseumController(), time.Minute, 5*time.Second), Entry("Trivy", newTrivyController(), 3*time.Minute, 5*time.Second), - Entry("NotaryServer", newNotaryServerController(), time.Minute, 5*time.Second), - Entry("NotarySigner", newNotarySignerController(), time.Minute, 5*time.Second), Entry("Core", newCoreController(), time.Minute, 5*time.Second), Entry("JobService", newJobServiceController(), time.Minute, 5*time.Second), Entry("Exporter", newExporterController(), time.Minute, 5*time.Second), diff --git a/controllers/goharbor/core/deployments.go b/controllers/goharbor/core/deployments.go index 1948aafe2..14c89cf03 100644 --- a/controllers/goharbor/core/deployments.go +++ b/controllers/goharbor/core/deployments.go @@ -9,6 +9,9 @@ import ( "strings" "time" + "github.com/goharbor/harbor/src/common" + registry "github.com/goharbor/harbor/src/pkg/reg/model" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/controllers" @@ -16,9 +19,6 @@ import ( serrors "github.com/plotly/harbor-operator/pkg/controller/errors" "github.com/plotly/harbor-operator/pkg/image" "github.com/plotly/harbor-operator/pkg/version" - "github.com/goharbor/harbor/src/common" - registry "github.com/goharbor/harbor/src/pkg/reg/model" - "github.com/pkg/errors" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -205,9 +205,7 @@ func (r *Reconciler) GetDeployment(ctx context.Context, core *goharborv1.Core) ( }, }, }), - common.WithChartMuseum: harbor.Value(strconv.FormatBool(core.Spec.Components.ChartRepository != nil)), - common.WithNotary: harbor.Value(strconv.FormatBool(core.Spec.Components.NotaryServer != nil)), - common.WithTrivy: harbor.Value(strconv.FormatBool(core.Spec.Components.Trivy != nil)), + common.WithTrivy: harbor.Value(strconv.FormatBool(core.Spec.Components.Trivy != nil)), }) if err != nil { return nil, errors.Wrap(err, "cannot configure environment variables") @@ -350,18 +348,6 @@ func (r *Reconciler) GetDeployment(ctx context.Context, core *goharborv1.Core) ( }) } - if core.Spec.Components.ChartRepository != nil { - urlConfig, err := harbor.EnvVar(common.ChartRepoURL, harbor.Value(core.Spec.Components.ChartRepository.URL)) - if err != nil { - return nil, errors.Wrap(err, "cannot configure chartmuseum") - } - - envs = append(envs, urlConfig, corev1.EnvVar{ - Name: "CHART_CACHE_DRIVER", - Value: core.Spec.Components.ChartRepository.CacheDriver, - }) - } - if core.Spec.Components.Trivy != nil { adapterURL, err := harbor.EnvVar(common.TrivyAdapterURL, harbor.Value(core.Spec.Components.Trivy.AdapterURL)) if err != nil { @@ -371,13 +357,6 @@ func (r *Reconciler) GetDeployment(ctx context.Context, core *goharborv1.Core) ( envs = append(envs, adapterURL) } - if core.Spec.Components.NotaryServer != nil { - envs = append(envs, corev1.EnvVar{ - Name: "NOTARY_URL", - Value: core.Spec.Components.NotaryServer.URL, - }) - } - if core.Spec.Components.TLS.Enabled() { envs = append(envs, corev1.EnvVar{ Name: "INTERNAL_TLS_TRUST_CA_PATH", diff --git a/controllers/goharbor/harbor/chartmuseum.go b/controllers/goharbor/harbor/chartmuseum.go deleted file mode 100644 index 7c0695d7f..000000000 --- a/controllers/goharbor/harbor/chartmuseum.go +++ /dev/null @@ -1,130 +0,0 @@ -package harbor - -import ( - "context" - "net/url" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/plotly/harbor-operator/pkg/version" - "github.com/pkg/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (r *Reconciler) AddChartMuseumConfigurations(ctx context.Context, harbor *goharborv1.Harbor, tlsIssuer InternalTLSIssuer) (ChartMuseumInternalCertificate, error) { - if harbor.Spec.ChartMuseum == nil { - return nil, nil - } - - certificate, err := r.AddChartMuseumInternalCertificate(ctx, harbor, tlsIssuer) - if err != nil { - return nil, errors.Wrap(err, "certificate") - } - - return certificate, nil -} - -type ChartMuseumInternalCertificate graph.Resource - -func (r *Reconciler) AddChartMuseumInternalCertificate(ctx context.Context, harbor *goharborv1.Harbor, tlsIssuer InternalTLSIssuer) (ChartMuseumInternalCertificate, error) { - cert, err := r.GetInternalTLSCertificate(ctx, harbor, harbormetav1.ChartMuseumTLS) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - certRes, err := r.Controller.AddCertificateToManage(ctx, cert, tlsIssuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return ChartMuseumInternalCertificate(certRes), nil -} - -const ( - ChartMuseumAuthenticationUsername = "chart_controller" -) - -type ChartMuseum graph.Resource - -func (r *Reconciler) AddChartMuseum(ctx context.Context, harbor *goharborv1.Harbor, certificate ChartMuseumInternalCertificate, coreSecret CoreSecret) (ChartMuseum, error) { - if harbor.Spec.ChartMuseum == nil { - return nil, nil - } - - chartmuseum, err := r.GetChartMuseum(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - chartmuseumRes, err := r.AddBasicResource(ctx, chartmuseum, certificate, coreSecret) - - return ChartMuseum(chartmuseumRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetChartMuseum(ctx context.Context, harbor *goharborv1.Harbor) (*goharborv1.ChartMuseum, error) { //nolint:funlen - name := r.NormalizeName(ctx, harbor.GetName()) - namespace := harbor.GetNamespace() - - basicAuthRef := r.NormalizeName(ctx, harbor.GetName(), controllers.Core.String(), "secret") - debug := harbor.Spec.LogLevel == harbormetav1.HarborDebug - - redis := harbor.Spec.RedisConnection(harbormetav1.ChartMuseumRedis) - - publicURL, err := url.Parse(harbor.Spec.ExternalURL) - if err != nil { - return nil, errors.Wrap(err, "cannot parse externalURL") - } - - chartServerURL := "" - if harbor.Spec.ChartMuseum.AbsoluteURL { - chartServerURL = publicURL.String() - } - - publicURL.Path += "/chartrepo" - maxStorageObjects := int64(0) - parallelLimit := int32(0) - - tls := harbor.Spec.InternalTLS.GetComponentTLSSpec(r.GetInternalTLSCertificateSecretName(ctx, harbor, harbormetav1.ChartMuseumTLS)) - - return &goharborv1.ChartMuseum{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.SetVersion(map[string]string{ - harbormetav1.NetworkPoliciesAnnotationName: harbormetav1.NetworkPoliciesAnnotationDisabled, - }, harbor.Spec.Version), - }, - Spec: goharborv1.ChartMuseumSpec{ - ComponentSpec: harbor.GetComponentSpec(ctx, harbormetav1.ChartMuseumComponent), - Authentication: goharborv1.ChartMuseumAuthSpec{ - AnonymousGet: false, - BasicAuthRef: basicAuthRef, - }, - Server: goharborv1.ChartMuseumServerSpec{ - TLS: tls, - }, - Cache: goharborv1.ChartMuseumCacheSpec{ - Redis: &redis, - }, - Chart: goharborv1.ChartMuseumChartSpec{ - AllowOverwrite: &varTrue, - Storage: goharborv1.ChartMuseumChartStorageSpec{ - ChartMuseumChartStorageDriverSpec: r.ChartMuseumStorage(ctx, harbor), - MaxStorageObjects: &maxStorageObjects, - }, - Index: goharborv1.ChartMuseumChartIndexSpec{ - ParallelLimit: ¶llelLimit, - }, - URL: chartServerURL, - }, - Log: goharborv1.ChartMuseumLogSpec{ - Debug: debug, - JSON: true, - }, - CertificateInjection: harbor.Spec.ChartMuseum.CertificateInjection, - Network: harbor.Spec.Network, - }, - }, nil -} diff --git a/controllers/goharbor/harbor/core.go b/controllers/goharbor/harbor/core.go index 9badfaf29..3241c3be7 100644 --- a/controllers/goharbor/harbor/core.go +++ b/controllers/goharbor/harbor/core.go @@ -5,13 +5,13 @@ import ( "net/url" "time" + certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/graph" "github.com/plotly/harbor-operator/pkg/version" - certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" - "github.com/pkg/errors" "github.com/sethvargo/go-password/password" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -216,7 +216,7 @@ func (r *Reconciler) GetCoreSecret(ctx context.Context, harbor *goharborv1.Harbo Type: harbormetav1.SecretTypeSingle, StringData: map[string]string{ harbormetav1.SharedSecretKey: secret, - corev1.BasicAuthUsernameKey: ChartMuseumAuthenticationUsername, + corev1.BasicAuthUsernameKey: RegistryAuthenticationUsername, corev1.BasicAuthPasswordKey: secret, }, }, nil @@ -332,18 +332,6 @@ func (r *Reconciler) GetCore(ctx context.Context, harbor *goharborv1.Harbor) (*g Host: r.NormalizeName(ctx, harbor.GetName(), controllers.Portal.String()), }).String() - var chartmuseum *goharborv1.CoreComponentsChartRepositorySpec - - if harbor.Spec.ChartMuseum != nil { - chartmuseumURL := (&url.URL{ - Scheme: harbor.Spec.InternalTLS.GetScheme(), - Host: r.NormalizeName(ctx, harbor.GetName(), controllers.ChartMuseum.String()), - }).String() - chartmuseum = &goharborv1.CoreComponentsChartRepositorySpec{ - URL: chartmuseumURL, - } - } - var trivy *goharborv1.CoreComponentsTrivySpec if harbor.Spec.Trivy != nil { @@ -357,18 +345,6 @@ func (r *Reconciler) GetCore(ctx context.Context, harbor *goharborv1.Harbor) (*g } } - var notary *goharborv1.CoreComponentsNotaryServerSpec - - if harbor.Spec.Notary != nil { - notaryURL := (&url.URL{ - Scheme: harbor.Spec.InternalTLS.GetScheme(), - Host: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String()), - }).String() - notary = &goharborv1.CoreComponentsNotaryServerSpec{ - URL: notaryURL, - } - } - coreSecretRef := r.NormalizeName(ctx, harbor.GetName(), controllers.Core.String(), "secret") encryptionKeyRef := r.NormalizeName(ctx, harbor.GetName(), controllers.Core.String(), "encryptionkey") csrfRef := r.NormalizeName(ctx, harbor.GetName(), controllers.Core.String(), "csrf") @@ -437,14 +413,12 @@ func (r *Reconciler) GetCore(ctx context.Context, harbor *goharborv1.Harbor) (*g Portal: goharborv1.CoreComponentPortalSpec{ URL: portalURL, }, - ChartRepository: chartmuseum, TokenService: goharborv1.CoreComponentsTokenServiceSpec{ URL: tokenServiceURL, CertificateRef: tokenCertificateRef, }, - NotaryServer: notary, - Trivy: trivy, - TLS: tls, + Trivy: trivy, + TLS: tls, }, CoreConfig: goharborv1.CoreConfig{ AdminInitialPasswordRef: r.getAdminPasswordRef(ctx, harbor), diff --git a/controllers/goharbor/harbor/harbor.go b/controllers/goharbor/harbor/harbor.go index 82a221298..43a89f359 100644 --- a/controllers/goharbor/harbor/harbor.go +++ b/controllers/goharbor/harbor/harbor.go @@ -4,14 +4,14 @@ import ( "context" "net/url" + certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" + "github.com/ovh/configstore" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/config" commonCtrl "github.com/plotly/harbor-operator/pkg/controller" "github.com/plotly/harbor-operator/pkg/event-filter/class" - certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" - "github.com/ovh/configstore" - "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" netv1 "k8s.io/api/networking/v1" ctrl "sigs.k8s.io/controller-runtime" @@ -25,7 +25,7 @@ type Reconciler struct { // +kubebuilder:rbac:groups=goharbor.io,resources=harbors,verbs=get;list;watch // +kubebuilder:rbac:groups=goharbor.io,resources=harbors/status,verbs=get;update;patch -// +kubebuilder:rbac:groups=goharbor.io,resources=chartmuseums;cores;exporters;jobservices;notaryservers;notarysigners;portals;registries;registrycontrollers;trivies,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=goharbor.io,resources=cores;exporters;jobservices;portals;registries;registrycontrollers;trivies,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=networking.k8s.io,resources=networkpolicies,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=cert-manager.io,resources=issuers;certificates,verbs=get;list;watch;create;update;patch;delete @@ -51,15 +51,12 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) err ClassName: className, }). For(r.NewEmpty(ctx)). - Owns(&goharborv1.ChartMuseum{}). Owns(&goharborv1.Core{}). Owns(&goharborv1.Exporter{}). Owns(&goharborv1.JobService{}). Owns(&goharborv1.Portal{}). Owns(&goharborv1.Registry{}). Owns(&goharborv1.RegistryController{}). - Owns(&goharborv1.NotaryServer{}). - Owns(&goharborv1.NotarySigner{}). Owns(&corev1.Secret{}). Owns(&certv1.Issuer{}). Owns(&certv1.Certificate{}). diff --git a/controllers/goharbor/harbor/ingresses.go b/controllers/goharbor/harbor/ingresses.go index 55015cf74..c4cc5b025 100644 --- a/controllers/goharbor/harbor/ingresses.go +++ b/controllers/goharbor/harbor/ingresses.go @@ -4,11 +4,11 @@ import ( "context" "fmt" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/graph" - "github.com/pkg/errors" netv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -99,86 +99,6 @@ func (r *Reconciler) GetCoreIngressRules(ctx context.Context, harbor *goharborv1 }}, nil } -type NotaryIngress graph.Resource - -func (r *Reconciler) AddNotaryIngress(ctx context.Context, harbor *goharborv1.Harbor, notary NotaryServer) (NotaryIngress, error) { - ingress, err := r.GetNotaryServerIngress(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "cannot get notary ingress") - } - - ingressRes, err := r.Controller.AddIngressToManage(ctx, ingress, notary) - - return NotaryIngress(ingressRes), errors.Wrapf(err, "cannot add notary ingress") -} - -func (r *Reconciler) GetNotaryServerIngress(ctx context.Context, harbor *goharborv1.Harbor) (*netv1.Ingress, error) { - if harbor.Spec.Notary == nil { - return nil, nil - } - - if harbor.Spec.Expose.Notary.Ingress == nil { - return nil, nil - } - - var tls []netv1.IngressTLS - - if harbor.Spec.Expose.Notary.TLS.Enabled() { - tls = []netv1.IngressTLS{{ - SecretName: harbor.Spec.Expose.Notary.TLS.CertificateRef, - Hosts: []string{harbor.Spec.Expose.Notary.Ingress.Host}, - }} - } - - ingressRules, err := r.GetNotaryIngressRules(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "cannot get notary ingress rules") - } - - return &netv1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String()), - Namespace: harbor.GetNamespace(), - Annotations: r.GetNotaryIngressAnnotations(ctx, harbor), - }, - Spec: netv1.IngressSpec{ - TLS: tls, - Rules: ingressRules, - IngressClassName: harbor.Spec.Expose.Notary.Ingress.IngressClassName, - }, - }, nil -} - -func (r *Reconciler) GetNotaryIngressRules(ctx context.Context, harbor *goharborv1.Harbor) ([]netv1.IngressRule, error) { - backend := netv1.IngressBackend{ - Service: &netv1.IngressServiceBackend{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String()), - Port: netv1.ServiceBackendPort{ - Number: harbor.Spec.InternalTLS.GetInternalPort(harbormetav1.NotaryServerTLS), - }, - }, - } - - pathTypePrefix := netv1.PathTypePrefix - - return []netv1.IngressRule{ - { - Host: harbor.Spec.Expose.Notary.Ingress.Host, - IngressRuleValue: netv1.IngressRuleValue{ - HTTP: &netv1.HTTPIngressRuleValue{ - Paths: []netv1.HTTPIngressPath{ - { - Path: "/", - PathType: &pathTypePrefix, - Backend: backend, - }, - }, - }, - }, - }, - }, nil -} - func (r *Reconciler) GetCoreIngressAnnotations(ctx context.Context, harbor *goharborv1.Harbor) map[string]string { // https://github.com/kubernetes/ingress-nginx/blob/master/internal/ingress/annotations/backendprotocol/main.go#L34 protocol := "HTTP" @@ -210,37 +130,6 @@ func (r *Reconciler) GetCoreIngressAnnotations(ctx context.Context, harbor *goha return annotations } -func (r *Reconciler) GetNotaryIngressAnnotations(ctx context.Context, harbor *goharborv1.Harbor) map[string]string { - // https://github.com/kubernetes/ingress-nginx/blob/master/internal/ingress/annotations/backendprotocol/main.go#L34 - protocol := "HTTP" - - if harbor.Spec.InternalTLS.IsEnabled() { - protocol = "HTTPS" - } - - annotations := map[string]string{ - "nginx.ingress.kubernetes.io/backend-protocol": protocol, - // resolve 413(Too Large Entity) error when push large image. It only works for NGINX ingress. - "nginx.ingress.kubernetes.io/proxy-body-size": "0", - } - if harbor.Spec.Expose.Core.Ingress.Controller == harbormetav1.IngressControllerNCP { - annotations["ncp/use-regex"] = NCPIngressValueTrue - if harbor.Spec.InternalTLS.IsEnabled() { - annotations["ncp/http-redirect"] = NCPIngressValueTrue - } - } else if harbor.Spec.Expose.Core.Ingress.Controller == harbormetav1.IngressControllerContour { - if harbor.Spec.InternalTLS.IsEnabled() { - annotations["ingress.kubernetes.io/force-ssl-redirect"] = ContourIngressValueTrue - } - } - - for key, value := range harbor.Spec.Expose.Notary.Ingress.Annotations { - annotations[key] = value - } - - return annotations -} - type ErrInvalidIngressController struct { Controller harbormetav1.IngressController } diff --git a/controllers/goharbor/harbor/networkpolicies.go b/controllers/goharbor/harbor/networkpolicies.go index 7e204ef8a..e9760d845 100644 --- a/controllers/goharbor/harbor/networkpolicies.go +++ b/controllers/goharbor/harbor/networkpolicies.go @@ -3,11 +3,11 @@ package harbor import ( "context" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/graph" - "github.com/pkg/errors" netv1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -25,11 +25,6 @@ func (r *Reconciler) AddNetworkPolicies(ctx context.Context, harbor *goharborv1. return nil } - _, err = r.AddChartMuseumIngressNetworkPolicy(ctx, harbor) - if err != nil { - return errors.Wrapf(err, "chartmuseum ingress") - } - _, err = r.AddCoreIngressNetworkPolicy(ctx, harbor) if err != nil { return errors.Wrapf(err, "core ingress") @@ -40,16 +35,6 @@ func (r *Reconciler) AddNetworkPolicies(ctx context.Context, harbor *goharborv1. return errors.Wrapf(err, "jobservice ingress") } - _, err = r.AddNotaryServerIngressNetworkPolicy(ctx, harbor) - if err != nil { - return errors.Wrapf(err, "notaryserver ingress") - } - - _, err = r.AddNotarySignerIngressNetworkPolicy(ctx, harbor) - if err != nil { - return errors.Wrapf(err, "notary signer ingress") - } - _, err = r.AddPortalIngressNetworkPolicy(ctx, harbor) if err != nil { return errors.Wrapf(err, "portal ingress") @@ -78,37 +63,6 @@ func (r *Reconciler) AddNetworkPolicies(ctx context.Context, harbor *goharborv1. return nil } -func (r *Reconciler) AddChartMuseumIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (NetworkPolicy, error) { - networkPolicy, err := r.GetChartMuseumIngressNetworkPolicy(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - networkPolicyRes, err := r.Controller.AddNetworkPolicyToManage(ctx, networkPolicy) - - return NetworkPolicy(networkPolicyRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetChartMuseumIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (*netv1.NetworkPolicy, error) { - return &netv1.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.ChartMuseum.String(), "ingress"), - Namespace: harbor.GetNamespace(), - }, - Spec: netv1.NetworkPolicySpec{ - Ingress: []netv1.NetworkPolicyIngressRule{}, - PodSelector: metav1.LabelSelector{ - MatchLabels: map[string]string{ - controllers.ChartMuseum.Label("name"): r.NormalizeName(ctx, harbor.GetName(), controllers.ChartMuseum.String()), - }, - }, - PolicyTypes: []netv1.PolicyType{ - netv1.PolicyTypeIngress, - }, - }, - }, nil -} - func (r *Reconciler) AddCoreIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (NetworkPolicy, error) { networkPolicy, err := r.GetCoreIngressNetworkPolicy(ctx, harbor) if err != nil { @@ -185,78 +139,6 @@ func (r *Reconciler) GetJobServiceIngressNetworkPolicy(ctx context.Context, harb }, nil } -func (r *Reconciler) AddNotaryServerIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (NetworkPolicy, error) { - networkPolicy, err := r.GetNotaryServerIngressNetworkPolicy(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - networkPolicyRes, err := r.Controller.AddNetworkPolicyToManage(ctx, networkPolicy) - - return NetworkPolicy(networkPolicyRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetNotaryServerIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (*netv1.NetworkPolicy, error) { - port := intstr.FromString(harbormetav1.NotaryServerAPIPortName) - - return &netv1.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String(), "ingress"), - Namespace: harbor.GetNamespace(), - }, - Spec: netv1.NetworkPolicySpec{ - Ingress: []netv1.NetworkPolicyIngressRule{ - { - Ports: []netv1.NetworkPolicyPort{ - { - Port: &port, - }, - }, - }, - }, - PodSelector: metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String()), - }, - }, - PolicyTypes: []netv1.PolicyType{ - netv1.PolicyTypeIngress, - }, - }, - }, nil -} - -func (r *Reconciler) AddNotarySignerIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (NetworkPolicy, error) { - networkPolicy, err := r.GetNotarySignerIngressNetworkPolicy(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - networkPolicyRes, err := r.Controller.AddNetworkPolicyToManage(ctx, networkPolicy) - - return NetworkPolicy(networkPolicyRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetNotarySignerIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (*netv1.NetworkPolicy, error) { - return &netv1.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "ingress"), - Namespace: harbor.GetNamespace(), - }, - Spec: netv1.NetworkPolicySpec{ - Ingress: []netv1.NetworkPolicyIngressRule{}, - PodSelector: metav1.LabelSelector{ - MatchLabels: map[string]string{ - controllers.NotarySigner.Label("name"): r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String()), - }, - }, - PolicyTypes: []netv1.PolicyType{ - netv1.PolicyTypeIngress, - }, - }, - }, nil -} - func (r *Reconciler) AddPortalIngressNetworkPolicy(ctx context.Context, harbor *goharborv1.Harbor) (NetworkPolicy, error) { networkPolicy, err := r.GetPortalIngressNetworkPolicy(ctx, harbor) if err != nil { diff --git a/controllers/goharbor/harbor/notary.go b/controllers/goharbor/harbor/notary.go deleted file mode 100644 index abe59da23..000000000 --- a/controllers/goharbor/harbor/notary.go +++ /dev/null @@ -1,48 +0,0 @@ -package harbor - -import ( - "github.com/plotly/harbor-operator/pkg/config" - "github.com/ovh/configstore" - "github.com/pkg/errors" -) - -const NotaryMigrationGithubSourceConfigKey = "notary-migration-github-source" - -type GithubSource struct { - Owner string `json:"owner"` - Repository string `json:"repository"` - Path string `json:"path"` - Reference string `json:"reference"` -} - -func (r *Reconciler) GetDefaultNotaryMigrationSource() (*GithubSource, error) { - defaultSource := GithubSource{ - Owner: "theupdateframework", - Repository: "notary", - Path: "/migrations/server/postgresql", - Reference: "v0.6.1", - } - - item, err := configstore.Filter(). - Slice(NotaryMigrationGithubSourceConfigKey). - Unmarshal(func() interface{} { - c := defaultSource - - return &c - }). - GetFirstItem() - if err != nil { - if config.IsNotFound(err, NotaryMigrationGithubSourceConfigKey) { - return &defaultSource, nil - } - - return nil, err - } - - c, err := item.Unmarshaled() - if err != nil { - return nil, errors.Wrap(err, "invalid") - } - - return c.(*GithubSource), nil -} diff --git a/controllers/goharbor/harbor/notaryserver.go b/controllers/goharbor/harbor/notaryserver.go deleted file mode 100644 index 0e10b12ef..000000000 --- a/controllers/goharbor/harbor/notaryserver.go +++ /dev/null @@ -1,237 +0,0 @@ -package harbor - -import ( - "context" - "net/url" - "time" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/config" - serrors "github.com/plotly/harbor-operator/pkg/controller/errors" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/plotly/harbor-operator/pkg/version" - certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" - v1 "github.com/jetstack/cert-manager/pkg/apis/meta/v1" - "github.com/pkg/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (r *Reconciler) AddNotaryServerConfigurations(ctx context.Context, harbor *goharborv1.Harbor, tlsIssuer InternalTLSIssuer, notaryIssuer NotarySignerCertificateIssuer) (NotaryServerCertificate, NotaryServerInternalCertificate, error) { - if harbor.Spec.Notary == nil { - return nil, nil, nil - } - - clientCert, err := r.AddNotaryServerClientCertificate(ctx, harbor, notaryIssuer) - if err != nil { - return nil, nil, errors.Wrap(err, "client certificate") - } - - certificate, err := r.AddNotaryServerInternalCertificate(ctx, harbor, tlsIssuer) - if err != nil { - return nil, nil, errors.Wrap(err, "certificate") - } - - return clientCert, certificate, nil -} - -type NotaryServerCertificate graph.Resource - -func (r *Reconciler) AddNotaryServerClientCertificate(ctx context.Context, harbor *goharborv1.Harbor, issuer NotarySignerCertificateIssuer) (NotaryServerCertificate, error) { - cert, err := r.GetNotaryServerCertificate(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - certRes, err := r.Controller.AddCertificateToManage(ctx, cert, issuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotaryServerCertificate(certRes), nil -} - -const ( - NotaryServerCertificateDurationConfigKey = "notaryserver-certificate-duration" - NotaryServerKeyAlgorithmDefaultConfig = "ecdsa" - NotaryServerCertificateDurationDefaultConfig = 90 * 24 * time.Hour -) - -func (r *Reconciler) getNotaryServerCertificateDuration() (time.Duration, error) { - durationValue, err := r.ConfigStore.GetItemValue(NotaryServerCertificateDurationConfigKey) - if err != nil { - if config.IsNotFound(err, NotaryServerCertificateDurationConfigKey) { - return NotarySignerCertificateDurationDefaultConfig, nil - } - - return NotaryServerCertificateDurationDefaultConfig, err - } - - return time.ParseDuration(durationValue) -} - -const ( - NotaryServerCertificateAlgorithmConfigKey = "notaryserver-certificate-algorithm" - NotaryServerCertificateAlgorithmDefaultConfig = certv1.ECDSAKeyAlgorithm -) - -func (r *Reconciler) getNotaryServerCertificateAlgorithm() (certv1.PrivateKeyAlgorithm, error) { - algorithm, err := r.ConfigStore.GetItemValue(NotaryServerCertificateAlgorithmConfigKey) - if err != nil { - if config.IsNotFound(err, NotaryServerCertificateAlgorithmConfigKey) { - return NotaryServerCertificateAlgorithmDefaultConfig, nil - } - - return NotaryServerCertificateAlgorithmDefaultConfig, err - } - - return certv1.PrivateKeyAlgorithm(algorithm), nil -} - -func (r *Reconciler) GetNotaryServerCertificate(ctx context.Context, harbor *goharborv1.Harbor) (*certv1.Certificate, error) { - duration, err := r.getNotaryServerCertificateDuration() - if err != nil { - return nil, errors.Wrap(err, "duration configuration") - } - - algorithm, err := r.getNotaryServerCertificateAlgorithm() - if err != nil { - return nil, errors.Wrap(err, "algorithm configuration") - } - - notarySignerIssuer := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication") - secretName := r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String(), "authentication") - - return &certv1.Certificate{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String(), "authentication"), - Namespace: harbor.GetNamespace(), - }, - Spec: certv1.CertificateSpec{ - SecretName: secretName, - IssuerRef: v1.ObjectReference{ - Name: notarySignerIssuer, - }, - PrivateKey: &certv1.CertificatePrivateKey{ - Algorithm: algorithm, - }, - Duration: &metav1.Duration{Duration: duration}, - CommonName: r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String()), - DNSNames: []string{r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String())}, - Usages: []certv1.KeyUsage{ - certv1.UsageDigitalSignature, - certv1.UsageKeyEncipherment, - certv1.UsageClientAuth, - }, - IsCA: false, - }, - }, nil -} - -type NotaryServerInternalCertificate graph.Resource - -func (r *Reconciler) AddNotaryServerInternalCertificate(ctx context.Context, harbor *goharborv1.Harbor, tlsIssuer InternalTLSIssuer) (NotaryServerInternalCertificate, error) { - cert, err := r.GetInternalTLSCertificate(ctx, harbor, harbormetav1.NotaryServerTLS) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - certRes, err := r.Controller.AddCertificateToManage(ctx, cert, tlsIssuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotaryServerInternalCertificate(certRes), nil -} - -type NotaryServer graph.Resource - -func (r *Reconciler) AddNotaryServer(ctx context.Context, harbor *goharborv1.Harbor, certificate NotaryServerInternalCertificate, authCert NotaryServerCertificate) (NotaryServer, error) { - if harbor.Spec.Notary == nil { - return nil, nil - } - - notaryServer, err := r.GetNotaryServer(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - notaryServerRes, err := r.AddBasicResource(ctx, notaryServer, certificate, authCert) - - return NotaryServer(notaryServerRes), errors.Wrap(err, "add") -} - -const ( - TokenServiceIssuer = "harbor-token-issuer" - NotaryServerAuthenticationService = "harbor-notary" -) - -func (r *Reconciler) GetNotaryServer(ctx context.Context, harbor *goharborv1.Harbor) (*goharborv1.NotaryServer, error) { //nolint:funlen - name := r.NormalizeName(ctx, harbor.GetName()) - namespace := harbor.GetNamespace() - - tokenServiceCertificateRef := r.NormalizeName(ctx, harbor.GetName(), controllers.Core.String(), "tokencert") - trustServiceHost := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String()) - authCertificateRef := r.NormalizeName(ctx, harbor.GetName(), controllers.NotaryServer.String(), "authentication") - - serviceTokenURL, err := url.Parse(harbor.Spec.ExternalURL) - if err != nil { - return nil, serrors.UnrecoverrableError(errors.Wrap(err, "cannot parse externalURL"), serrors.InvalidSpecReason, "unable to configure service token") - } - - serviceTokenURL.Path += "/service/token" - - tls := harbor.Spec.InternalTLS.GetComponentTLSSpec(r.GetInternalTLSCertificateSecretName(ctx, harbor, harbormetav1.NotaryServerTLS)) - - storage, err := harbor.Spec.Database.GetPostgresqlConnection(harbormetav1.NotaryServerComponent) - if err != nil { - return nil, errors.Wrap(err, "cannot get storage configuration") - } - - migrationEnabled := harbor.Spec.Notary.IsMigrationEnabled() - - annotation := map[string]string{ - harbormetav1.NetworkPoliciesAnnotationName: harbormetav1.NetworkPoliciesAnnotationDisabled, - } - - if harbor.Spec.Expose.Core.Ingress != nil { - annotation[harbormetav1.IngressControllerAnnotationName] = string(harbor.Spec.Expose.Core.Ingress.Controller) - } - - return &goharborv1.NotaryServer{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.SetVersion(annotation, harbor.Spec.Version), - }, - Spec: goharborv1.NotaryServerSpec{ - ComponentSpec: harbor.GetComponentSpec(ctx, harbormetav1.NotaryServerComponent), - TLS: tls, - Authentication: &goharborv1.NotaryServerAuthSpec{ - Token: goharborv1.NotaryServerAuthTokenSpec{ - CertificateRef: tokenServiceCertificateRef, - Issuer: TokenServiceIssuer, - Realm: serviceTokenURL.String(), - Service: NotaryServerAuthenticationService, - }, - }, - Logging: goharborv1.NotaryLoggingSpec{ - Level: harbor.Spec.LogLevel.Notary(), - }, - Storage: goharborv1.NotaryStorageSpec{ - Postgres: *storage, - }, - TrustService: goharborv1.NotaryServerTrustServiceSpec{ - Remote: &goharborv1.NotaryServerTrustServiceRemoteSpec{ - Host: trustServiceHost, - CertificateRef: authCertificateRef, - KeyAlgorithm: NotaryServerKeyAlgorithmDefaultConfig, - Port: goharborv1.NotarySignerAPIPort, - }, - }, - MigrationEnabled: &migrationEnabled, - Network: harbor.Spec.Network, - }, - }, nil -} diff --git a/controllers/goharbor/harbor/notarysigner.go b/controllers/goharbor/harbor/notarysigner.go deleted file mode 100644 index 1b4882c18..000000000 --- a/controllers/goharbor/harbor/notarysigner.go +++ /dev/null @@ -1,369 +0,0 @@ -package harbor - -import ( - "context" - "strings" - "time" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/config" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/plotly/harbor-operator/pkg/version" - certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" - v1 "github.com/jetstack/cert-manager/pkg/apis/meta/v1" - "github.com/pkg/errors" - "github.com/sethvargo/go-password/password" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (r *Reconciler) AddNotarySignerConfigurations(ctx context.Context, harbor *goharborv1.Harbor) (NotarySignerCertificateIssuer, NotarySignerCertificate, NotarySignerEncryptionKey, error) { - if harbor.Spec.Notary == nil { - return nil, nil, nil, nil - } - - caIssuer, err := r.AddNotarySignerCertificateAuthorityIssuer(ctx, harbor) - if err != nil { - return nil, nil, nil, errors.Wrap(err, "ca-issuer") - } - - ca, err := r.AddNotarySignerCertificateAuthority(ctx, harbor, caIssuer) - if err != nil { - return nil, nil, nil, errors.Wrap(err, "ca-issuer") - } - - issuer, err := r.AddNotarySignerCertificateIssuer(ctx, harbor, ca) - if err != nil { - return nil, nil, nil, errors.Wrap(err, "issuer") - } - - certificate, err := r.AddNotarySignerCertificate(ctx, harbor, issuer) - if err != nil { - return nil, nil, nil, errors.Wrap(err, "certificate") - } - - encryptionKey, err := r.AddNotarySignerEncryptionKey(ctx, harbor) - - return issuer, certificate, encryptionKey, errors.Wrap(err, "encryption key") -} - -const ( - NotarySignerCertificateAuthorityDurationConfigKey = "notary-signer-certificate-authority-duration" - NotarySignerCertificateAuthorityDurationDefaultConfig = 365 * 24 * time.Hour -) - -func (r *Reconciler) GetNotarySignerCertificateAuthority(ctx context.Context, harbor *goharborv1.Harbor) (*certv1.Certificate, error) { - duration := NotarySignerCertificateAuthorityDurationDefaultConfig - - durationValue, err := r.ConfigStore.GetItemValue(NotarySignerCertificateAuthorityDurationConfigKey) - if err != nil { - if !config.IsNotFound(err, NotarySignerCertificateAuthorityDurationConfigKey) { - return nil, err - } - } else { - duration, err = time.ParseDuration(durationValue) - if err != nil { - return nil, errors.Wrapf(err, "invalid config %s", NotarySignerCertificateAuthorityDurationConfigKey) - } - } - - return &certv1.Certificate{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authority"), - Namespace: harbor.GetNamespace(), - }, - Spec: certv1.CertificateSpec{ - SecretName: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authority"), - IssuerRef: v1.ObjectReference{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authority"), - }, - Duration: &metav1.Duration{ - Duration: duration, - }, - CommonName: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "CA"), - IsCA: true, - Usages: []certv1.KeyUsage{ - certv1.UsageClientAuth, - certv1.UsageServerAuth, - - certv1.UsageCertSign, - certv1.UsageCRLSign, - }, - }, - }, nil -} - -type NotarySignerEncryptionKey graph.Resource - -func (r *Reconciler) AddNotarySignerEncryptionKey(ctx context.Context, harbor *goharborv1.Harbor) (NotarySignerEncryptionKey, error) { - secret, err := r.GetNotarySignerEncryptionKey(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - secretRes, err := r.Controller.AddSecretToManage(ctx, secret) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotarySignerEncryptionKey(secretRes), nil -} - -const ( - NotarySignerEncryptionKeyLength = 128 - NotarySignerEncryptionKeyNumDigits = 16 - NotarySignerEncryptionKeyNumSpecials = 48 -) - -func (r *Reconciler) GetNotarySignerEncryptionKey(ctx context.Context, harbor *goharborv1.Harbor) (*corev1.Secret, error) { - name := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "encryption-key") - namespace := harbor.GetNamespace() - - secret, err := password.Generate(NotarySignerEncryptionKeyLength, NotarySignerEncryptionKeyNumDigits, NotarySignerEncryptionKeyNumSpecials, false, true) - if err != nil { - return nil, errors.Wrap(err, "cannot generate secret") - } - - return &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Type: harbormetav1.SecretTypeNotarySignerAliases, - StringData: map[string]string{ - strings.ToUpper(harbormetav1.DefaultAliasSecretKey): secret, - }, - }, nil -} - -type NotarySignerCertificateAuthorityIssuer graph.Resource - -func (r *Reconciler) AddNotarySignerCertificateAuthorityIssuer(ctx context.Context, harbor *goharborv1.Harbor) (NotarySignerCertificateAuthorityIssuer, error) { - issuer, err := r.GetNotarySignerCertificateAuthorityIssuer(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - issuerRes, err := r.Controller.AddIssuerToManage(ctx, issuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotarySignerCertificateAuthorityIssuer(issuerRes), nil -} - -func (r *Reconciler) GetNotarySignerCertificateAuthorityIssuer(ctx context.Context, harbor *goharborv1.Harbor) (*certv1.Issuer, error) { - return &certv1.Issuer{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authority"), - Namespace: harbor.GetNamespace(), - }, - Spec: certv1.IssuerSpec{ - IssuerConfig: certv1.IssuerConfig{ - SelfSigned: &certv1.SelfSignedIssuer{}, - }, - }, - }, nil -} - -type NotarySignerCertificateAuthority graph.Resource - -func (r *Reconciler) AddNotarySignerCertificateAuthority(ctx context.Context, harbor *goharborv1.Harbor, issuer NotarySignerCertificateAuthorityIssuer) (NotarySignerCertificateAuthority, error) { - cert, err := r.GetNotarySignerCertificateAuthority(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - certRes, err := r.Controller.AddCertificateToManage(ctx, cert, issuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotarySignerCertificateAuthority(certRes), nil -} - -type NotarySignerCertificateIssuer graph.Resource - -func (r *Reconciler) AddNotarySignerCertificateIssuer(ctx context.Context, harbor *goharborv1.Harbor, ca NotarySignerCertificateAuthority) (NotarySignerCertificateIssuer, error) { - issuer, err := r.GetNotarySignerCertificateIssuer(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - issuerRes, err := r.Controller.AddIssuerToManage(ctx, issuer, ca) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotarySignerCertificateIssuer(issuerRes), nil -} - -func (r *Reconciler) GetNotarySignerCertificateIssuer(ctx context.Context, harbor *goharborv1.Harbor) (*certv1.Issuer, error) { - return &certv1.Issuer{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication"), - Namespace: harbor.GetNamespace(), - }, - Spec: certv1.IssuerSpec{ - IssuerConfig: certv1.IssuerConfig{ - CA: &certv1.CAIssuer{ - SecretName: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authority"), - }, - }, - }, - }, nil -} - -type NotarySignerCertificate graph.Resource - -func (r *Reconciler) AddNotarySignerCertificate(ctx context.Context, harbor *goharborv1.Harbor, issuer NotarySignerCertificateIssuer) (NotarySignerCertificate, error) { - cert, err := r.GetNotarySignerCertificate(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - certRes, err := r.Controller.AddCertificateToManage(ctx, cert, issuer) - if err != nil { - return nil, errors.Wrap(err, "add") - } - - return NotarySignerCertificate(certRes), nil -} - -const ( - NotarySignerCertificateDurationConfigKey = "notarysigner-certificate-duration" - NotarySignerCertificateDurationDefaultConfig = 90 * 24 * time.Hour -) - -func (r *Reconciler) getNotarySignerCertificateDuration() (time.Duration, error) { - durationValue, err := r.ConfigStore.GetItemValue(NotarySignerCertificateDurationConfigKey) - if err != nil { - if config.IsNotFound(err, NotarySignerCertificateDurationConfigKey) { - return NotarySignerCertificateDurationDefaultConfig, nil - } - - return NotarySignerCertificateDurationDefaultConfig, err - } - - return time.ParseDuration(durationValue) -} - -const ( - NotarySignerCertificateAlgorithmConfigKey = "notarysigner-certificate-algorithm" - NotarySignerCertificateAlgorithmDefaultConfig = certv1.ECDSAKeyAlgorithm -) - -func (r *Reconciler) getNotarySignerCertificateAlgorithm() (certv1.PrivateKeyAlgorithm, error) { - algorithm, err := r.ConfigStore.GetItemValue(NotarySignerCertificateAlgorithmConfigKey) - if err != nil { - if config.IsNotFound(err, NotarySignerCertificateAlgorithmConfigKey) { - return NotarySignerCertificateAlgorithmDefaultConfig, nil - } - - return NotarySignerCertificateAlgorithmDefaultConfig, err - } - - return certv1.PrivateKeyAlgorithm(algorithm), nil -} - -func (r *Reconciler) GetNotarySignerCertificate(ctx context.Context, harbor *goharborv1.Harbor) (*certv1.Certificate, error) { - duration, err := r.getNotarySignerCertificateDuration() - if err != nil { - return nil, errors.Wrap(err, "duration configuration") - } - - algorithm, err := r.getNotarySignerCertificateAlgorithm() - if err != nil { - return nil, errors.Wrap(err, "algorithm configuration") - } - - secretName := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication") - - return &certv1.Certificate{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication"), - Namespace: harbor.GetNamespace(), - }, - Spec: certv1.CertificateSpec{ - SecretName: secretName, - IssuerRef: v1.ObjectReference{ - Name: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication"), - }, - PrivateKey: &certv1.CertificatePrivateKey{ - Algorithm: algorithm, - }, - Duration: &metav1.Duration{Duration: duration}, - CommonName: r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String()), - DNSNames: []string{r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String())}, - Usages: []certv1.KeyUsage{ - certv1.UsageDigitalSignature, - certv1.UsageKeyEncipherment, - certv1.UsageServerAuth, - }, - IsCA: false, - }, - }, nil -} - -type NotarySignerMigrationSecret graph.Resource - -type NotarySigner graph.Resource - -func (r *Reconciler) AddNotarySigner(ctx context.Context, harbor *goharborv1.Harbor, certificate NotarySignerCertificate, encryptionKey NotarySignerEncryptionKey) (NotarySigner, error) { - if harbor.Spec.Notary == nil { - return nil, nil - } - - notaryServer, err := r.GetNotarySigner(ctx, harbor) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - notaryServerRes, err := r.AddBasicResource(ctx, notaryServer, certificate, encryptionKey) - - return NotarySigner(notaryServerRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetNotarySigner(ctx context.Context, harbor *goharborv1.Harbor) (*goharborv1.NotarySigner, error) { - name := r.NormalizeName(ctx, harbor.GetName()) - namespace := harbor.GetNamespace() - - encryptionKeyAliasesRef := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "encryption-key") - certificateRef := r.NormalizeName(ctx, harbor.GetName(), controllers.NotarySigner.String(), "authentication") - - storage, err := harbor.Spec.Database.GetPostgresqlConnection(harbormetav1.NotarySignerComponent) - if err != nil { - return nil, errors.Wrap(err, "cannot get storage configuration") - } - - migrationEnabled := harbor.Spec.Notary.IsMigrationEnabled() - - return &goharborv1.NotarySigner{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.SetVersion(map[string]string{ - harbormetav1.NetworkPoliciesAnnotationName: harbormetav1.NetworkPoliciesAnnotationDisabled, - }, harbor.Spec.Version), - }, - Spec: goharborv1.NotarySignerSpec{ - ComponentSpec: harbor.GetComponentSpec(ctx, harbormetav1.NotarySignerComponent), - Authentication: goharborv1.NotarySignerAuthenticationSpec{ - CertificateRef: certificateRef, - }, - Logging: goharborv1.NotaryLoggingSpec{ - Level: harbor.Spec.LogLevel.Notary(), - }, - Storage: goharborv1.NotarySignerStorageSpec{ - NotaryStorageSpec: goharborv1.NotaryStorageSpec{ - Postgres: *storage, - }, - AliasesRef: encryptionKeyAliasesRef, - }, - MigrationEnabled: &migrationEnabled, - Network: harbor.Spec.Network, - }, - }, nil -} diff --git a/controllers/goharbor/harbor/resources.go b/controllers/goharbor/harbor/resources.go index 18ec4757f..c4daef683 100644 --- a/controllers/goharbor/harbor/resources.go +++ b/controllers/goharbor/harbor/resources.go @@ -3,11 +3,11 @@ package harbor import ( "context" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/controllers" serrors "github.com/plotly/harbor-operator/pkg/controller/errors" "github.com/plotly/harbor-operator/pkg/resources" - "github.com/pkg/errors" ) func (r *Reconciler) NewEmpty(_ context.Context) resources.Resource { @@ -40,21 +40,6 @@ func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resour return errors.Wrapf(err, "add %s configuration", controllers.JobService) } - chartMuseumCertificate, err := r.AddChartMuseumConfigurations(ctx, harbor, internalTLSIssuer) - if err != nil { - return errors.Wrapf(err, "add %s configuration", controllers.ChartMuseum) - } - - notaryCertIssuer, notarySignerCertificate, encryptionKey, err := r.AddNotarySignerConfigurations(ctx, harbor) - if err != nil { - return errors.Wrapf(err, "add %s configuration", controllers.NotarySigner) - } - - notaryAuthCert, notaryServerCertificate, err := r.AddNotaryServerConfigurations(ctx, harbor, internalTLSIssuer, notaryCertIssuer) - if err != nil { - return errors.Wrapf(err, "add %s configuration", controllers.NotaryServer) - } - trivyCertificate, trivyUpdateSecret, err := r.AddTrivyConfigurations(ctx, harbor, internalTLSIssuer) if err != nil { return errors.Wrapf(err, "add %s configuration", controllers.Trivy) @@ -85,11 +70,6 @@ func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resour return errors.Wrapf(err, "add %s", controllers.Portal) } - _, err = r.AddChartMuseum(ctx, harbor, chartMuseumCertificate, coreSecret) - if err != nil { - return errors.Wrapf(err, "add %s", controllers.ChartMuseum) - } - exporterCertificate, err := r.AddExporterConfigurations(ctx, harbor, internalTLSIssuer) if err != nil { return errors.Wrapf(err, "add %s configuration", controllers.Exporter) @@ -100,16 +80,6 @@ func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resour return errors.Wrapf(err, "add %s", controllers.Exporter) } - notaryServer, err := r.AddNotaryServer(ctx, harbor, notaryServerCertificate, notaryAuthCert) - if err != nil { - return errors.Wrapf(err, "add %s", controllers.NotaryServer) - } - - _, err = r.AddNotarySigner(ctx, harbor, notarySignerCertificate, encryptionKey) - if err != nil { - return errors.Wrapf(err, "add %s", controllers.NotarySigner) - } - _, err = r.AddTrivy(ctx, harbor, trivyCertificate, trivyUpdateSecret) if err != nil { return errors.Wrapf(err, "add %s", controllers.Trivy) @@ -120,11 +90,6 @@ func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resour return errors.Wrapf(err, "add %s ingress", controllers.Core) } - _, err = r.AddNotaryIngress(ctx, harbor, notaryServer) - if err != nil { - return errors.Wrapf(err, "add %s ingress", controllers.NotaryServer) - } - err = r.AddNetworkPolicies(ctx, harbor) if err != nil { return errors.Wrapf(err, "add network policies") diff --git a/controllers/goharbor/harbor/storage.go b/controllers/goharbor/harbor/storage.go index 89d2ee672..cd430d75f 100644 --- a/controllers/goharbor/harbor/storage.go +++ b/controllers/goharbor/harbor/storage.go @@ -7,55 +7,6 @@ import ( corev1 "k8s.io/api/core/v1" ) -func (r *Reconciler) ChartMuseumStorage(ctx context.Context, harbor *goharborv1.Harbor) goharborv1.ChartMuseumChartStorageDriverSpec { - if harbor.Spec.ImageChartStorage.S3 != nil { - return goharborv1.ChartMuseumChartStorageDriverSpec{ - Amazon: harbor.Spec.ImageChartStorage.S3.ChartMuseum(), - } - } - - if harbor.Spec.ImageChartStorage.Swift != nil { - return goharborv1.ChartMuseumChartStorageDriverSpec{ - OpenStack: harbor.Spec.ImageChartStorage.Swift.ChartMuseum(), - } - } - - if harbor.Spec.ImageChartStorage.Azure != nil { - return goharborv1.ChartMuseumChartStorageDriverSpec{ - Azure: harbor.Spec.ImageChartStorage.Azure.ChartMuseum(), - } - } - - if harbor.Spec.ImageChartStorage.Gcs != nil { - return goharborv1.ChartMuseumChartStorageDriverSpec{ - Gcs: harbor.Spec.ImageChartStorage.Gcs.ChartMuseum(), - } - } - - if harbor.Spec.ImageChartStorage.Oss != nil { - return goharborv1.ChartMuseumChartStorageDriverSpec{ - Oss: harbor.Spec.ImageChartStorage.Oss.ChartMuseum(), - } - } - - prefix := "" - pvc := &harbor.Spec.ImageChartStorage.FileSystem.RegistryPersistentVolume.PersistentVolumeClaimVolumeSource - - if harbor.Spec.ImageChartStorage.FileSystem.ChartPersistentVolume != nil { - pvc = &harbor.Spec.ImageChartStorage.FileSystem.ChartPersistentVolume.PersistentVolumeClaimVolumeSource - prefix = harbor.Spec.ImageChartStorage.FileSystem.ChartPersistentVolume.Prefix - } - - return goharborv1.ChartMuseumChartStorageDriverSpec{ - FileSystem: &goharborv1.ChartMuseumChartStorageDriverFilesystemSpec{ - VolumeSource: corev1.VolumeSource{ - PersistentVolumeClaim: pvc, - }, - Prefix: prefix, - }, - } -} - func (r *Reconciler) JobServiceScanDataExportsStorage(ctx context.Context, harbor *goharborv1.Harbor) goharborv1.JobServiceStorageVolumeSpec { if harbor.Spec.JobService.Storage != nil && harbor.Spec.JobService.Storage.ScanDataExportsPersistentVolume != nil { pvc := &harbor.Spec.JobService.Storage.ScanDataExportsPersistentVolume.PersistentVolumeClaimVolumeSource diff --git a/controllers/goharbor/harbor_test.go b/controllers/goharbor/harbor_test.go index aadb9a8d9..01103c2bb 100644 --- a/controllers/goharbor/harbor_test.go +++ b/controllers/goharbor/harbor_test.go @@ -4,16 +4,16 @@ import ( "context" "net/url" + certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" + cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/postgresql" "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/redis" "github.com/plotly/harbor-operator/pkg/factories/logger" - certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1" - cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" apierrs "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -96,7 +96,7 @@ func setupHarborResourceDependencies(ctx context.Context, ns string) (string, st }, Spec: corev1.PersistentVolumeClaimSpec{ AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: resource.MustParse(storageRequest), }, @@ -114,7 +114,7 @@ func setupHarborResourceDependencies(ctx context.Context, ns string) (string, st }, Spec: corev1.PersistentVolumeClaimSpec{ AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: resource.MustParse(storageRequest), }, diff --git a/controllers/goharbor/harborcluster/ctrl_setup.go b/controllers/goharbor/harborcluster/ctrl_setup.go index 62583ba6d..86a18483b 100644 --- a/controllers/goharbor/harborcluster/ctrl_setup.go +++ b/controllers/goharbor/harborcluster/ctrl_setup.go @@ -3,6 +3,8 @@ package harborcluster import ( "context" + "github.com/ovh/configstore" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/builder" @@ -16,8 +18,6 @@ import ( "github.com/plotly/harbor-operator/pkg/config" commonCtrl "github.com/plotly/harbor-operator/pkg/controller" "github.com/plotly/harbor-operator/pkg/utils/strings" - "github.com/ovh/configstore" - "github.com/pkg/errors" redisOp "github.com/spotahome/redis-operator/api/redisfailover/v1" postgresv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" batchv1 "k8s.io/api/batch/v1" @@ -70,7 +70,7 @@ type Reconciler struct { // +kubebuilder:rbac:groups=goharbor.io,resources=harborclusters/finalizers,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=goharbor.io,resources=harborconfigurations/finalizers,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=goharbor.io,resources=harborprojects/finalizers,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups=goharbor.io,resources=chartmuseums/finalizers;cores/finalizers;exporters/finalizers;jobservices/finalizers;notaryservers/finalizers;notarysigners/finalizers;portals/finalizers;registries/finalizers;registrycontrollers/finalizers;trivies/finalizers,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=goharbor.io,resources=cores/finalizers;exporters/finalizers;jobservices/finalizers;portals/finalizers;registries/finalizers;registrycontrollers/finalizers;trivies/finalizers,verbs=get;list;watch;create;update;patch;delete func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { concurrentReconcile, err := config.GetInt(r.ConfigStore, config.ReconciliationKey, config.DefaultConcurrentReconcile) diff --git a/controllers/goharbor/internal/test/controllers/controllers.go b/controllers/goharbor/internal/test/controllers/controllers.go index 3323c3037..e236b900a 100644 --- a/controllers/goharbor/internal/test/controllers/controllers.go +++ b/controllers/goharbor/internal/test/controllers/controllers.go @@ -4,21 +4,18 @@ import ( "context" "path" + "github.com/onsi/gomega" + "github.com/ovh/configstore" "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/controllers/goharbor/chartmuseum" "github.com/plotly/harbor-operator/controllers/goharbor/core" "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" "github.com/plotly/harbor-operator/controllers/goharbor/jobservice" - "github.com/plotly/harbor-operator/controllers/goharbor/notaryserver" - "github.com/plotly/harbor-operator/controllers/goharbor/notarysigner" "github.com/plotly/harbor-operator/controllers/goharbor/portal" "github.com/plotly/harbor-operator/controllers/goharbor/registry" "github.com/plotly/harbor-operator/controllers/goharbor/trivy" "github.com/plotly/harbor-operator/pkg/config" "github.com/plotly/harbor-operator/pkg/controller" "github.com/plotly/harbor-operator/pkg/setup" - "github.com/onsi/gomega" - "github.com/ovh/configstore" ) const configDirectory = "../../../config/config" @@ -27,22 +24,10 @@ func NewCore(ctx context.Context, className string) *core.Reconciler { return New(ctx, controllers.Core, className, core.New).(*core.Reconciler) } -func NewChartMuseum(ctx context.Context, className string) *chartmuseum.Reconciler { - return New(ctx, controllers.ChartMuseum, className, chartmuseum.New).(*chartmuseum.Reconciler) -} - func NewTrivy(ctx context.Context, className string) *trivy.Reconciler { return New(ctx, controllers.Trivy, className, trivy.New).(*trivy.Reconciler) } -func NewNotaryServer(ctx context.Context, className string) *notaryserver.Reconciler { - return New(ctx, controllers.NotaryServer, className, notaryserver.New).(*notaryserver.Reconciler) -} - -func NewNotarySigner(ctx context.Context, className string) *notarysigner.Reconciler { - return New(ctx, controllers.NotarySigner, className, notarysigner.New).(*notarysigner.Reconciler) -} - func NewJobService(ctx context.Context, className string) *jobservice.Reconciler { return New(ctx, controllers.JobService, className, jobservice.New).(*jobservice.Reconciler) } diff --git a/controllers/goharbor/internal/test/manager.go b/controllers/goharbor/internal/test/manager.go index 77833ba5a..41b4799cb 100644 --- a/controllers/goharbor/internal/test/manager.go +++ b/controllers/goharbor/internal/test/manager.go @@ -7,6 +7,7 @@ import ( "github.com/onsi/gomega" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" ) func StartManager(ctx context.Context) { @@ -24,8 +25,10 @@ func StartManager(ctx context.Context) { func NewManager(ctx context.Context) manager.Manager { mgr, err := ctrl.NewManager(GetRestConfig(ctx), ctrl.Options{ - MetricsBindAddress: "0", - Scheme: GetScheme(ctx), + Metrics: server.Options{ + BindAddress: "0", + }, + Scheme: GetScheme(ctx), }) gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to create manager") diff --git a/controllers/goharbor/notaryserver/configs.go b/controllers/goharbor/notaryserver/configs.go deleted file mode 100644 index 3f5bda351..000000000 --- a/controllers/goharbor/notaryserver/configs.go +++ /dev/null @@ -1,44 +0,0 @@ -package notaryserver - -import ( - "context" - "crypto/sha256" - "fmt" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - conftemplate "github.com/plotly/harbor-operator/pkg/config/template" - "github.com/plotly/harbor-operator/pkg/resources/checksum" - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ConfigName = "server.json" - -func (r *Reconciler) GetConfigMap(ctx context.Context, notary *goharborv1.NotaryServer) (*corev1.ConfigMap, error) { - templateConfig, err := r.ConfigStore.GetItemValue(conftemplate.ConfigTemplateKey) - if err != nil { - return nil, errors.Wrap(err, "cannot get template") - } - - content, err := r.GetTemplatedConfig(ctx, templateConfig, notary) - if err != nil { - return nil, err - } - - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - - return &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: map[string]string{ - checksum.GetStaticID("template"): fmt.Sprintf("%x", sha256.Sum256([]byte(templateConfig))), - }, - }, - BinaryData: map[string][]byte{ - ConfigName: content, - }, - }, nil -} diff --git a/controllers/goharbor/notaryserver/deployments.go b/controllers/goharbor/notaryserver/deployments.go deleted file mode 100644 index adbaa46d6..000000000 --- a/controllers/goharbor/notaryserver/deployments.go +++ /dev/null @@ -1,208 +0,0 @@ -package notaryserver - -import ( - "context" - "path" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/image" - "github.com/plotly/harbor-operator/pkg/version" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - HealthPath = "/_notary_server/health" - VolumeName = "config" - ConfigPath = "/etc/notary-server" - HTTPSVolumeName = "certificates" - HTTPSCertificatePath = ConfigPath + "/certificates" - TrustVolumeName = "trust-certificates" - TrustCertificatePath = ConfigPath + "/trust-certificates" - AuthVolumeName = "auth-certificates" - AuthCertificatePath = ConfigPath + "/auth-certificates" -) - -var ( - varFalse = false - - fsGroup int64 = 10000 - runAsGroup int64 = 10000 - runAsUser int64 = 10000 -) - -const apiPort = 4443 - -func (r *Reconciler) GetDeployment(ctx context.Context, notary *goharborv1.NotaryServer) (*appsv1.Deployment, error) { //nolint:funlen - getImageOptions := []image.Option{ - image.WithImageFromSpec(notary.Spec.Image), - image.WithHarborVersion(version.GetVersion(notary.Annotations)), - } - - image, err := image.GetImage(ctx, harbormetav1.NotaryServerComponent.String(), getImageOptions...) - if err != nil { - return nil, errors.Wrap(err, "cannot get image") - } - - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - - volumes := []corev1.Volume{{ - Name: VolumeName, - VolumeSource: corev1.VolumeSource{ - ConfigMap: &corev1.ConfigMapVolumeSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: name, - }, - }, - }, - }} - - volumeMounts := []corev1.VolumeMount{{ - Name: VolumeName, - MountPath: ConfigPath, - }} - - if notary.Spec.TrustService.Remote != nil { - volumes = append(volumes, corev1.Volume{ - Name: TrustVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: notary.Spec.TrustService.Remote.CertificateRef, - }, - }, - }) - - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: TrustVolumeName, - MountPath: TrustCertificatePath, - }) - } - - if notary.Spec.TLS.Enabled() { - volumes = append(volumes, corev1.Volume{ - Name: HTTPSVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: notary.Spec.TLS.CertificateRef, - }, - }, - }) - - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: HTTPSVolumeName, - MountPath: HTTPSCertificatePath, - }) - } - - if notary.Spec.Authentication != nil { - volumes = append(volumes, corev1.Volume{ - Name: AuthVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: notary.Spec.Authentication.Token.CertificateRef, - }, - }, - }) - - volumeMounts = append(volumeMounts, corev1.VolumeMount{ - Name: AuthVolumeName, - MountPath: AuthCertificatePath, - }) - } - - initContainers := []corev1.Container{} - migrateCmd := "" - migrationEnvs := []corev1.EnvVar{} - - if notary.Spec.MigrationEnabled == nil || *notary.Spec.MigrationEnabled { - secretDatabaseVariable := "" - - if notary.Spec.Storage.Postgres.PasswordRef != "" { - migrationEnvs = append(migrationEnvs, corev1.EnvVar{ - Name: "secretDatabase", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: notary.Spec.Storage.Postgres.PasswordRef, - }, - Key: harbormetav1.PostgresqlPasswordKey, - }, - }, - }) - - secretDatabaseVariable = "$(secretDatabase)" - } - - migrationDatabaseURL := notary.Spec.Storage.Postgres.GetDSNStringWithRawPassword(secretDatabaseVariable) - migrateCmd = "migrate-patch -database=" + migrationDatabaseURL + " && /migrations/migrate.sh && " - - migrationEnvs = append(migrationEnvs, corev1.EnvVar{ - Name: "DB_URL", - Value: migrationDatabaseURL, - }, corev1.EnvVar{ - Name: "SERVICE_NAME", - Value: "notary_server", - }, corev1.EnvVar{ - Name: "MIGRATIONS_PATH", - Value: "/migrations/server/postgresql", - }) - } - - deploy := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.NewVersionAnnotations(notary.Annotations), - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Replicas: notary.Spec.Replicas, - Template: corev1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: notary.Spec.ComponentSpec.TemplateAnnotations, - Labels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Spec: corev1.PodSpec{ - AutomountServiceAccountToken: &varFalse, - Volumes: volumes, - SecurityContext: &corev1.PodSecurityContext{ - FSGroup: &fsGroup, - RunAsGroup: &runAsGroup, - RunAsUser: &runAsUser, - }, - InitContainers: initContainers, - Containers: []corev1.Container{{ - Name: controllers.NotaryServer.String(), - Image: image, - Command: []string{"/bin/sh"}, - Args: []string{"-c", migrateCmd + "notary-server -config " + path.Join(ConfigPath, ConfigName)}, - Ports: []corev1.ContainerPort{{ - ContainerPort: apiPort, - Name: harbormetav1.NotaryServerAPIPortName, - Protocol: corev1.ProtocolTCP, - }}, - VolumeMounts: volumeMounts, - Env: migrationEnvs, - }}, - }, - }, - }, - } - - notary.Spec.ComponentSpec.ApplyToDeployment(deploy) - - return deploy, nil -} diff --git a/controllers/goharbor/notaryserver/networkpolicies.go b/controllers/goharbor/notaryserver/networkpolicies.go deleted file mode 100644 index 4ced82d0c..000000000 --- a/controllers/goharbor/notaryserver/networkpolicies.go +++ /dev/null @@ -1,74 +0,0 @@ -package notaryserver - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/pkg/errors" - netv1 "k8s.io/api/networking/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -type NetworkPolicy graph.Resource - -func (r *Reconciler) AddNetworkPolicies(ctx context.Context, notaryserver *goharborv1.NotaryServer) error { - areNetworkPoliciesEnabled, err := r.AreNetworkPoliciesEnabled(ctx, notaryserver) - if err != nil { - return errors.Wrapf(err, "cannot get status") - } - - if !areNetworkPoliciesEnabled { - return nil - } - - _, err = r.AddIngressNetworkPolicy(ctx, notaryserver) - if err != nil { - return errors.Wrapf(err, "ingress") - } - - return nil -} - -func (r *Reconciler) AddIngressNetworkPolicy(ctx context.Context, notaryserver *goharborv1.NotaryServer) (NetworkPolicy, error) { - networkPolicy, err := r.GetIngressNetworkPolicy(ctx, notaryserver) - if err != nil { - return nil, errors.Wrap(err, "get") - } - - networkPolicyRes, err := r.Controller.AddNetworkPolicyToManage(ctx, networkPolicy) - - return NetworkPolicy(networkPolicyRes), errors.Wrap(err, "add") -} - -func (r *Reconciler) GetIngressNetworkPolicy(ctx context.Context, notaryserver *goharborv1.NotaryServer) (*netv1.NetworkPolicy, error) { - port := intstr.FromString(harbormetav1.NotaryServerAPIPortName) - - return &netv1.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.NormalizeName(ctx, notaryserver.GetName(), "ingress"), - Namespace: notaryserver.GetNamespace(), - }, - Spec: netv1.NetworkPolicySpec{ - Ingress: []netv1.NetworkPolicyIngressRule{ - { - Ports: []netv1.NetworkPolicyPort{ - { - Port: &port, - }, - }, - }, - }, - PodSelector: metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): r.NormalizeName(ctx, notaryserver.GetName()), - }, - }, - PolicyTypes: []netv1.PolicyType{ - netv1.PolicyTypeIngress, - }, - }, - }, nil -} diff --git a/controllers/goharbor/notaryserver/notaryserver.go b/controllers/goharbor/notaryserver/notaryserver.go deleted file mode 100644 index 25f7a91e4..000000000 --- a/controllers/goharbor/notaryserver/notaryserver.go +++ /dev/null @@ -1,98 +0,0 @@ -package notaryserver - -import ( - "context" - "time" - - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/config" - "github.com/plotly/harbor-operator/pkg/config/template" - commonCtrl "github.com/plotly/harbor-operator/pkg/controller" - "github.com/plotly/harbor-operator/pkg/event-filter/class" - "github.com/ovh/configstore" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - netv1 "k8s.io/api/networking/v1" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/controller" -) - -const ( - DefaultRequeueWait = 2 * time.Second - DefaultConfigTemplateFileName = "notaryserver-config.json.tmpl" -) - -// Reconciler reconciles a NotaryServer object. -type Reconciler struct { - *commonCtrl.Controller -} - -// +kubebuilder:rbac:groups=goharbor.io,resources=notaryservers,verbs=get;list;watch -// +kubebuilder:rbac:groups=goharbor.io,resources=notaryservers/status,verbs=get;update;patch -// +kubebuilder:rbac:groups=networking.k8s.io,resources=networkpolicies,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups="",resources=configmaps;services,verbs=get;list;watch;create;update;patch;delete - -func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { - err := r.Controller.SetupWithManager(ctx, mgr) - if err != nil { - return errors.Wrap(err, "cannot setup common controller") - } - - templateConfig, err := r.Template(ctx) - if err != nil { - return errors.Wrap(err, "template") - } - - if err := mgr.AddReadyzCheck(r.NormalizeName(ctx, "template"), templateConfig.ReadyzCheck); err != nil { - return errors.Wrap(err, "cannot add template ready check") - } - - if err := mgr.AddHealthzCheck(r.NormalizeName(ctx, "template"), templateConfig.HealthzCheck); err != nil { - return errors.Wrap(err, "cannot add template health check") - } - - className, err := r.GetClassName(ctx) - if err != nil { - return errors.Wrap(err, "classname") - } - - concurrentReconcile, err := config.GetInt(r.ConfigStore, config.ReconciliationKey, config.DefaultConcurrentReconcile) - if err != nil { - return errors.Wrap(err, "cannot get concurrent reconcile") - } - - return ctrl.NewControllerManagedBy(mgr). - WithEventFilter(&class.Filter{ - ClassName: className, - }). - For(r.NewEmpty(ctx)). - Owns(&appsv1.Deployment{}). - Owns(&corev1.ConfigMap{}). - Owns(&corev1.Service{}). - Owns(&netv1.NetworkPolicy{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: concurrentReconcile, - }). - Complete(r) -} - -func (r *Reconciler) Template(ctx context.Context) (*template.ConfigTemplate, error) { - templateConfig, err := template.FromConfigStore(r.ConfigStore, DefaultConfigTemplateFileName) - if err != nil { - return nil, errors.Wrap(err, "from configstore") - } - - templateConfig.Register(r.ConfigStore) - - return templateConfig, nil -} - -func New(ctx context.Context, configStore *configstore.Store) (commonCtrl.Reconciler, error) { - r := &Reconciler{} - - r.Controller = commonCtrl.NewController(ctx, controllers.NotaryServer, r, configStore) - - return r, nil -} diff --git a/controllers/goharbor/notaryserver/notaryserver_test.go b/controllers/goharbor/notaryserver/notaryserver_test.go deleted file mode 100644 index 51aa70777..000000000 --- a/controllers/goharbor/notaryserver/notaryserver_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package notaryserver_test - -import ( - "context" - "fmt" - "time" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/pods" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/postgresql" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/rest" -) - -const defaultGenerationNumber int64 = 1 - -var _ = Describe("NotaryServer", func() { - var ( - ns = test.InitNamespace(func() context.Context { return ctx }) - notaryserver goharborv1.NotaryServer - ) - - BeforeEach(func() { - className, err := reconciler.GetClassName(ctx) - Expect(err).ToNot(HaveOccurred()) - - notaryserver.ObjectMeta = metav1.ObjectMeta{ - Name: test.NewName("notaryserver"), - Namespace: ns.GetName(), - Annotations: test.AddVersionAnnotations(map[string]string{ - goharborv1.HarborClassAnnotation: className, - }), - } - }) - - JustAfterEach(pods.LogsAll(&ctx, func() types.NamespacedName { - return types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, notaryserver.GetName()), - Namespace: notaryserver.GetNamespace(), - } - })) - - Context("Without TLS", func() { - BeforeEach(func() { - namespace := notaryserver.GetNamespace() - - notaryserver.Spec = goharborv1.NotaryServerSpec{ - Storage: goharborv1.NotaryStorageSpec{ - Postgres: postgresql.New(ctx, namespace), - }, - } - }) - - It("Should works", func() { - By("Creating new resource", func() { - Ω(test.GetClient(ctx).Create(ctx, ¬aryserver)). - Should(test.SuccessOrExists) - - Eventually(func() error { - return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬aryserver), ¬aryserver) - }, time.Minute, 5*time.Second). - Should(Succeed(), "resource should exists") - - Ω(notaryserver.GetGeneration()). - Should(Equal(defaultGenerationNumber), "Generation should not be updated") - - test.EnsureReady(ctx, ¬aryserver, time.Minute, 5*time.Second) - - IntegTest(ctx, ¬aryserver) - }) - - By("Updating resource spec", func() { - oldGeneration := notaryserver.GetGeneration() - - test.ScaleUp(ctx, ¬aryserver) - - Ω(notaryserver.GetGeneration()). - Should(BeNumerically(">", oldGeneration), "ObservedGeneration should be updated") - - Ω(test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬aryserver), ¬aryserver)). - Should(Succeed(), "resource should still be accessible") - - test.EnsureReady(ctx, ¬aryserver, time.Minute, 5*time.Second) - - IntegTest(ctx, ¬aryserver) - }) - - By("Deleting resource", func() { - Ω(test.GetClient(ctx).Delete(ctx, ¬aryserver)). - Should(Succeed()) - - Eventually(func() error { - return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬aryserver), ¬aryserver) - }, time.Minute, 5*time.Second). - ShouldNot(Succeed(), "Resource should no more exist") - }) - }) - }) -}) - -const healthPath = "/_notary_server/health" - -func IntegTest(ctx context.Context, notaryserver *goharborv1.NotaryServer) { - client, err := rest.UnversionedRESTClientFor(test.NewRestConfig(ctx)) - Expect(err).ToNot(HaveOccurred()) - - namespacedName := types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, notaryserver.GetName()), - Namespace: notaryserver.GetNamespace(), - } - - proxyReq := client.Get(). - Resource("services"). - Namespace(namespacedName.Namespace). - Name(fmt.Sprintf("%s:%s", namespacedName.Name, harbormetav1.NotaryServerAPIPortName)). - SubResource("proxy"). - Suffix(healthPath). - MaxRetries(0) - - Eventually(func() error { - return proxyReq.Do(ctx).Error() - }).ShouldNot(HaveOccurred()) -} diff --git a/controllers/goharbor/notaryserver/resources.go b/controllers/goharbor/notaryserver/resources.go deleted file mode 100644 index e9bac4ef4..000000000 --- a/controllers/goharbor/notaryserver/resources.go +++ /dev/null @@ -1,73 +0,0 @@ -package notaryserver - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - serrors "github.com/plotly/harbor-operator/pkg/controller/errors" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/plotly/harbor-operator/pkg/resources" - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (r *Reconciler) NewEmpty(_ context.Context) resources.Resource { - return &goharborv1.NotaryServer{} -} - -func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resource) error { - notaryserver, ok := resource.(*goharborv1.NotaryServer) - if !ok { - return serrors.UnrecoverrableError(errors.Errorf("%+v", resource), serrors.OperatorReason, "unable to add resource") - } - - service, err := r.GetService(ctx, notaryserver) - if err != nil { - return errors.Wrap(err, "cannot get service") - } - - var storageSecret graph.Resource - - if notaryserver.Spec.Storage.Postgres.PasswordRef != "" { - storageSecret, err = r.AddExternalTypedSecret(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: notaryserver.Spec.Storage.Postgres.PasswordRef, - Namespace: notaryserver.GetNamespace(), - }, - }, harbormetav1.SecretTypePostgresql) - if err != nil { - return errors.Wrap(err, "cannot add migration secret") - } - } - - _, err = r.AddServiceToManage(ctx, service) - if err != nil { - return errors.Wrapf(err, "cannot add service %s", service.GetName()) - } - - configMap, err := r.GetConfigMap(ctx, notaryserver) - if err != nil { - return errors.Wrap(err, "cannot get configMap") - } - - configMapResource, err := r.AddConfigMapToManage(ctx, configMap, storageSecret) - if err != nil { - return errors.Wrapf(err, "cannot add configMap %s", configMap.GetName()) - } - - deployment, err := r.GetDeployment(ctx, notaryserver) - if err != nil { - return errors.Wrap(err, "cannot get deployment") - } - - _, err = r.AddDeploymentToManage(ctx, deployment, configMapResource) - if err != nil { - return errors.Wrapf(err, "cannot add deployment %s", deployment.GetName()) - } - - err = r.AddNetworkPolicies(ctx, notaryserver) - - return errors.Wrap(err, "network policies") -} diff --git a/controllers/goharbor/notaryserver/services.go b/controllers/goharbor/notaryserver/services.go deleted file mode 100644 index 3d728c949..000000000 --- a/controllers/goharbor/notaryserver/services.go +++ /dev/null @@ -1,41 +0,0 @@ -package notaryserver - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -func (r *Reconciler) GetService(ctx context.Context, notary *goharborv1.NotaryServer) (*corev1.Service, error) { - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - annotations := map[string]string{} - - if v, ok := notary.Annotations[harbormetav1.IngressControllerAnnotationName]; ok && v == string(harbormetav1.IngressControllerContour) { - annotations["projectcontour.io/upstream-protocol.tls"] = harbormetav1.NotaryServerAPIPortName - } - - return &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: annotations, - }, - Spec: corev1.ServiceSpec{ - Ports: []corev1.ServicePort{{ - Name: harbormetav1.NotaryServerAPIPortName, - Port: notary.Spec.TLS.GetInternalPort(), - TargetPort: intstr.FromString(harbormetav1.NotaryServerAPIPortName), - Protocol: corev1.ProtocolTCP, - }}, - Selector: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - }, nil -} diff --git a/controllers/goharbor/notaryserver/suite_test.go b/controllers/goharbor/notaryserver/suite_test.go deleted file mode 100644 index ea297aedf..000000000 --- a/controllers/goharbor/notaryserver/suite_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package notaryserver_test - -import ( - "context" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/controllers" - "github.com/plotly/harbor-operator/controllers/goharbor/notaryserver" -) - -var ( - ctx context.Context - reconciler *notaryserver.Reconciler -) - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Controller Suite") -} - -var _ = BeforeSuite(func() { - ctx = test.InitSuite() - - className := test.NewName("class") - - reconciler = controllers.NewNotaryServer(ctx, className) - - test.StartManager(ctx) -}) - -var _ = AfterSuite(func() { - defer test.AfterSuite(ctx) - - ctx.Done() -}) diff --git a/controllers/goharbor/notaryserver_test.go b/controllers/goharbor/notaryserver_test.go deleted file mode 100644 index d06356583..000000000 --- a/controllers/goharbor/notaryserver_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package goharbor_test - -import ( - "context" - - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/postgresql" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -func newNotaryServerController() controllerTest { - return controllerTest{ - Setup: setupValidNotaryServer, - Update: updateNotaryServer, - GetStatusFunc: getNotaryServerStatusFunc, - } -} - -func setupValidNotaryServer(ctx context.Context, ns string) (Resource, client.ObjectKey) { - database := postgresql.New(ctx, ns) - - name := newName("notary-server") - notaryServer := &goharborv1.NotaryServer{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: ns, - Annotations: test.AddVersionAnnotations(nil), - }, - Spec: goharborv1.NotaryServerSpec{ - Storage: goharborv1.NotaryStorageSpec{ - Postgres: database, - }, - }, - } - - Expect(k8sClient.Create(ctx, notaryServer)).To(Succeed()) - - return notaryServer, client.ObjectKey{ - Name: name, - Namespace: ns, - } -} - -func updateNotaryServer(ctx context.Context, object Resource) { - notaryServer, ok := object.(*goharborv1.NotaryServer) - Expect(ok).To(BeTrue()) - - var replicas int32 = 1 - - if notaryServer.Spec.Replicas != nil { - replicas = *notaryServer.Spec.Replicas + 1 - } - - notaryServer.Spec.Replicas = &replicas -} - -func getNotaryServerStatusFunc(ctx context.Context, key client.ObjectKey) func() harbormetav1.ComponentStatus { - return func() harbormetav1.ComponentStatus { - var notaryServer goharborv1.NotaryServer - - err := k8sClient.Get(ctx, key, ¬aryServer) - - Expect(err).ToNot(HaveOccurred()) - - return notaryServer.Status - } -} diff --git a/controllers/goharbor/notarysigner/configs.go b/controllers/goharbor/notarysigner/configs.go deleted file mode 100644 index fa9dc7839..000000000 --- a/controllers/goharbor/notarysigner/configs.go +++ /dev/null @@ -1,44 +0,0 @@ -package notarysigner - -import ( - "context" - "crypto/sha256" - "fmt" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - conftemplate "github.com/plotly/harbor-operator/pkg/config/template" - "github.com/plotly/harbor-operator/pkg/resources/checksum" - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ConfigName = "signer.json" - -func (r *Reconciler) GetConfigMap(ctx context.Context, notary *goharborv1.NotarySigner) (*corev1.ConfigMap, error) { - templateConfig, err := r.ConfigStore.GetItemValue(conftemplate.ConfigTemplateKey) - if err != nil { - return nil, errors.Wrap(err, "cannot get template") - } - - content, err := r.GetTemplatedConfig(ctx, templateConfig, notary) - if err != nil { - return nil, err - } - - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - - return &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: map[string]string{ - checksum.GetStaticID("template"): fmt.Sprintf("%x", sha256.Sum256([]byte(templateConfig))), - }, - }, - BinaryData: map[string][]byte{ - ConfigName: content, - }, - }, nil -} diff --git a/controllers/goharbor/notarysigner/deployments.go b/controllers/goharbor/notarysigner/deployments.go deleted file mode 100644 index e94dfceba..000000000 --- a/controllers/goharbor/notarysigner/deployments.go +++ /dev/null @@ -1,173 +0,0 @@ -package notarysigner - -import ( - "context" - "path" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/image" - "github.com/plotly/harbor-operator/pkg/version" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - VolumeName = "config" - ConfigPath = "/etc/notary-signer" - HTTPSVolumeName = "certificates" - HTTPSCertificatePath = ConfigPath + "/certificates" -) - -var ( - varFalse = false - - fsGroup int64 = 10000 - runAsGroup int64 = 10000 - runAsUser int64 = 10000 -) - -func (r *Reconciler) GetDeployment(ctx context.Context, notary *goharborv1.NotarySigner) (*appsv1.Deployment, error) { //nolint:funlen - getImageOptions := []image.Option{ - image.WithImageFromSpec(notary.Spec.Image), - image.WithHarborVersion(version.GetVersion(notary.Annotations)), - } - - image, err := image.GetImage(ctx, harbormetav1.NotarySignerComponent.String(), getImageOptions...) - if err != nil { - return nil, errors.Wrap(err, "cannot get image") - } - - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - - volumes := []corev1.Volume{{ - Name: VolumeName, - VolumeSource: corev1.VolumeSource{ - ConfigMap: &corev1.ConfigMapVolumeSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: name, - }, - }, - }, - }, { - Name: HTTPSVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: notary.Spec.Authentication.CertificateRef, - }, - }, - }} - - volumeMounts := []corev1.VolumeMount{{ - Name: VolumeName, - MountPath: ConfigPath, - }, { - Name: HTTPSVolumeName, - MountPath: HTTPSCertificatePath, - }} - - initContainers := []corev1.Container{} - - migrateCmd := "" - migrationEnvs := []corev1.EnvVar{} - - if notary.Spec.MigrationEnabled == nil || *notary.Spec.MigrationEnabled { - secretDatabaseVariable := "" - - if notary.Spec.Storage.Postgres.PasswordRef != "" { - migrationEnvs = append(migrationEnvs, corev1.EnvVar{ - Name: "secretDatabase", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: notary.Spec.Storage.Postgres.PasswordRef, - }, - Key: harbormetav1.PostgresqlPasswordKey, - }, - }, - }) - - secretDatabaseVariable = "$(secretDatabase)" - } - - migrationDatabaseURL := notary.Spec.Storage.Postgres.GetDSNStringWithRawPassword(secretDatabaseVariable) - migrateCmd = "migrate-patch -database=" + migrationDatabaseURL + " && /migrations/migrate.sh && " - - migrationEnvs = append(migrationEnvs, corev1.EnvVar{ - Name: "DB_URL", - Value: migrationDatabaseURL, - }, corev1.EnvVar{ - Name: "MIGRATIONS_PATH", - Value: "/migrations/signer/postgresql", - }, corev1.EnvVar{ - Name: "SERVICE_NAME", - Value: "notary_signer", - }) - } - - deploy := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - Annotations: version.NewVersionAnnotations(notary.Annotations), - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Replicas: notary.Spec.Replicas, - Template: corev1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: notary.Spec.ComponentSpec.TemplateAnnotations, - Labels: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - Spec: corev1.PodSpec{ - AutomountServiceAccountToken: &varFalse, - Volumes: volumes, - SecurityContext: &corev1.PodSecurityContext{ - FSGroup: &fsGroup, - RunAsGroup: &runAsGroup, - RunAsUser: &runAsUser, - }, - InitContainers: initContainers, - Containers: []corev1.Container{{ - Name: controllers.NotarySigner.String(), - Image: image, - Command: []string{"/bin/sh"}, - Args: []string{"-c", migrateCmd + "notary-signer -config " + path.Join(ConfigPath, ConfigName)}, - VolumeMounts: volumeMounts, - Ports: []corev1.ContainerPort{{ - ContainerPort: goharborv1.NotarySignerAPIPort, - Name: harbormetav1.NotarySignerAPIPortName, - Protocol: corev1.ProtocolTCP, - }}, - EnvFrom: []corev1.EnvFromSource{{ - Prefix: "NOTARY_SIGNER_", - SecretRef: &corev1.SecretEnvSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: notary.Spec.Storage.AliasesRef, - }, - Optional: &varFalse, - }, - }}, - Env: migrationEnvs, - }}, - }, - }, - }, - } - - notary.Spec.ComponentSpec.ApplyToDeployment(deploy) - - return deploy, nil -} diff --git a/controllers/goharbor/notarysigner/notarysigner.go b/controllers/goharbor/notarysigner/notarysigner.go deleted file mode 100644 index dde2fcbd1..000000000 --- a/controllers/goharbor/notarysigner/notarysigner.go +++ /dev/null @@ -1,95 +0,0 @@ -package notarysigner - -import ( - "context" - "time" - - "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/pkg/config" - "github.com/plotly/harbor-operator/pkg/config/template" - commonCtrl "github.com/plotly/harbor-operator/pkg/controller" - "github.com/plotly/harbor-operator/pkg/event-filter/class" - "github.com/ovh/configstore" - "github.com/pkg/errors" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/controller" -) - -const ( - DefaultRequeueWait = 2 * time.Second - DefaultConfigTemplateFileName = "notarysigner-config.json.tmpl" -) - -// Reconciler reconciles a NotarySigner object. -type Reconciler struct { - *commonCtrl.Controller -} - -// +kubebuilder:rbac:groups=goharbor.io,resources=notarysigners,verbs=get;list;watch -// +kubebuilder:rbac:groups=goharbor.io,resources=notarysigners/status,verbs=get;update;patch -// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete -// +kubebuilder:rbac:groups="",resources=configmaps;services,verbs=get;list;watch;create;update;patch;delete - -func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { - err := r.Controller.SetupWithManager(ctx, mgr) - if err != nil { - return errors.Wrap(err, "cannot setup common controller") - } - - templateConfig, err := r.Template(ctx) - if err != nil { - return errors.Wrap(err, "template") - } - - if err := mgr.AddReadyzCheck(r.NormalizeName(ctx, "template"), templateConfig.ReadyzCheck); err != nil { - return errors.Wrap(err, "cannot add template ready check") - } - - if err := mgr.AddHealthzCheck(r.NormalizeName(ctx, "template"), templateConfig.HealthzCheck); err != nil { - return errors.Wrap(err, "cannot add template health check") - } - - className, err := r.GetClassName(ctx) - if err != nil { - return errors.Wrap(err, "cannot get class name") - } - - concurrentReconcile, err := config.GetInt(r.ConfigStore, config.ReconciliationKey, config.DefaultConcurrentReconcile) - if err != nil { - return errors.Wrap(err, "cannot get concurrent reconcile") - } - - return ctrl.NewControllerManagedBy(mgr). - WithEventFilter(&class.Filter{ - ClassName: className, - }). - For(r.NewEmpty(ctx)). - Owns(&appsv1.Deployment{}). - Owns(&corev1.ConfigMap{}). - Owns(&corev1.Service{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: concurrentReconcile, - }). - Complete(r) -} - -func (r *Reconciler) Template(ctx context.Context) (*template.ConfigTemplate, error) { - templateConfig, err := template.FromConfigStore(r.ConfigStore, DefaultConfigTemplateFileName) - if err != nil { - return nil, errors.Wrap(err, "from configstore") - } - - templateConfig.Register(r.ConfigStore) - - return templateConfig, nil -} - -func New(ctx context.Context, configStore *configstore.Store) (commonCtrl.Reconciler, error) { - r := &Reconciler{} - - r.Controller = commonCtrl.NewController(ctx, controllers.NotarySigner, r, configStore) - - return r, nil -} diff --git a/controllers/goharbor/notarysigner/notarysigner_test.go b/controllers/goharbor/notarysigner/notarysigner_test.go deleted file mode 100644 index c9f63b038..000000000 --- a/controllers/goharbor/notarysigner/notarysigner_test.go +++ /dev/null @@ -1,172 +0,0 @@ -package notarysigner_test - -import ( - "context" - "crypto/tls" - "crypto/x509" - "fmt" - "time" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/certificate" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/pods" - portforward "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/port-forward" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/postgresql" - "github.com/theupdateframework/notary" - notary_client "github.com/theupdateframework/notary/signer/client" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -const defaultGenerationNumber int64 = 1 - -var _ = Describe("NotarySigner", func() { - var ( - ns = test.InitNamespace(func() context.Context { return ctx }) - notarysigner goharborv1.NotarySigner - ca *certificate.CA - ) - - BeforeEach(func() { - className, err := reconciler.GetClassName(ctx) - Expect(err).ToNot(HaveOccurred()) - - ca = certificate.NewCA() - - notarysigner.ObjectMeta = metav1.ObjectMeta{ - Name: test.NewName("notarysigner"), - Namespace: ns.GetName(), - Annotations: test.AddVersionAnnotations(map[string]string{ - goharborv1.HarborClassAnnotation: className, - }), - } - }) - - JustAfterEach(pods.LogsAll(&ctx, func() types.NamespacedName { - return types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, notarysigner.GetName()), - Namespace: notarysigner.GetNamespace(), - } - })) - - Context("Without TLS", func() { - BeforeEach(func() { - namespace := notarysigner.GetNamespace() - - certificateName := test.NewName("certificate") - aliasesName := test.NewName("aliases") - - notarysigner.Spec = goharborv1.NotarySignerSpec{ - Authentication: goharborv1.NotarySignerAuthenticationSpec{ - CertificateRef: certificateName, - }, - Storage: goharborv1.NotarySignerStorageSpec{ - AliasesRef: aliasesName, - NotaryStorageSpec: goharborv1.NotaryStorageSpec{ - Postgres: postgresql.New(ctx, namespace), - }, - }, - } - - Expect(test.GetClient(ctx).Create(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: certificateName, - Namespace: namespace, - }, - Data: ca.NewCert(reconciler.NormalizeName(ctx, notarysigner.GetName()), "localhost").ToMap(), - Type: corev1.SecretTypeTLS, - })).To(Succeed()) - - Expect(test.GetClient(ctx).Create(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: aliasesName, - Namespace: namespace, - }, - StringData: map[string]string{ - harbormetav1.DefaultAliasSecretKey: "the-key", - }, - Type: harbormetav1.SecretTypeNotarySignerAliases, - })).To(Succeed()) - }) - - It("Should works", func() { - By("Creating new resource", func() { - Ω(test.GetClient(ctx).Create(ctx, ¬arysigner)). - Should(test.SuccessOrExists) - - Eventually(func() error { - return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬arysigner), ¬arysigner) - }, time.Minute, 5*time.Second). - Should(Succeed(), "resource should exists") - - Ω(notarysigner.GetGeneration()). - Should(Equal(defaultGenerationNumber), "Generation should not be updated") - - test.EnsureReady(ctx, ¬arysigner, time.Minute, 5*time.Second) - - IntegTest(ctx, ¬arysigner, ca) - }) - - By("Updating resource spec", func() { - oldGeneration := notarysigner.GetGeneration() - - test.ScaleUp(ctx, ¬arysigner) - - Ω(notarysigner.GetGeneration()). - Should(BeNumerically(">", oldGeneration), "ObservedGeneration should be updated") - - Ω(test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬arysigner), ¬arysigner)). - Should(Succeed(), "resource should still be accessible") - - test.EnsureReady(ctx, ¬arysigner, time.Minute, 5*time.Second) - - IntegTest(ctx, ¬arysigner, ca) - }) - - By("Deleting resource", func() { - Ω(test.GetClient(ctx).Delete(ctx, ¬arysigner)). - Should(Succeed()) - - Eventually(func() error { - return test.GetClient(ctx).Get(ctx, test.GetNamespacedName(¬arysigner), ¬arysigner) - }, time.Minute, 5*time.Second). - ShouldNot(Succeed(), "Resource should no more exist") - }) - }) - }) -}) - -func IntegTest(ctx context.Context, notarysigner *goharborv1.NotarySigner, ca *certificate.CA) { - namespacedName := types.NamespacedName{ - Name: reconciler.NormalizeName(ctx, notarysigner.GetName()), - Namespace: notarysigner.GetNamespace(), - } - - localPort, pf := portforward.New(ctx, namespacedName, goharborv1.NotarySignerAPIPort) - defer pf.Close() - - rootPool := x509.NewCertPool() - Ω(rootPool.AppendCertsFromPEM(ca.PEM)).Should(BeTrue()) - - cert := ca.NewCert() - tlsCert, err := tls.X509KeyPair(cert.PEM, cert.PrivKey) - Ω(err).ShouldNot(HaveOccurred()) - - clientConn, err := notary_client.NewGRPCConnection("localhost", fmt.Sprintf("%d", localPort), &tls.Config{ - RootCAs: rootPool, - Certificates: []tls.Certificate{tlsCert}, - MinVersion: tls.VersionTLS13, - }) - Ω(err).ShouldNot(HaveOccurred()) - - notaClient := notary_client.NewNotarySigner(clientConn) - - Ω(notaClient.CheckHealth(10*time.Second, notary.HealthCheckOverall)).Should(Succeed()) - Ω(notaClient.ListAllKeys()).Should(BeEmpty()) -} diff --git a/controllers/goharbor/notarysigner/resources.go b/controllers/goharbor/notarysigner/resources.go deleted file mode 100644 index 6adff89fe..000000000 --- a/controllers/goharbor/notarysigner/resources.go +++ /dev/null @@ -1,71 +0,0 @@ -package notarysigner - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - serrors "github.com/plotly/harbor-operator/pkg/controller/errors" - "github.com/plotly/harbor-operator/pkg/graph" - "github.com/plotly/harbor-operator/pkg/resources" - "github.com/pkg/errors" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (r *Reconciler) NewEmpty(_ context.Context) resources.Resource { - return &goharborv1.NotarySigner{} -} - -func (r *Reconciler) AddResources(ctx context.Context, resource resources.Resource) error { - notary, ok := resource.(*goharborv1.NotarySigner) - if !ok { - return serrors.UnrecoverrableError(errors.Errorf("%+v", resource), serrors.OperatorReason, "unable to add resource") - } - - service, err := r.GetService(ctx, notary) - if err != nil { - return errors.Wrap(err, "cannot get service") - } - - _, err = r.Controller.AddServiceToManage(ctx, service) - if err != nil { - return errors.Wrapf(err, "cannot add service %s", service.GetName()) - } - - var storageSecret graph.Resource - - if notary.Spec.Storage.Postgres.PasswordRef != "" { - storageSecret, err = r.AddExternalTypedSecret(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: notary.Spec.Storage.Postgres.PasswordRef, - Namespace: notary.GetNamespace(), - }, - }, harbormetav1.SecretTypePostgresql) - if err != nil { - return errors.Wrap(err, "cannot add migration secret") - } - } - - configMap, err := r.GetConfigMap(ctx, notary) - if err != nil { - return errors.Wrap(err, "cannot get configMap") - } - - configMapResource, err := r.Controller.AddConfigMapToManage(ctx, configMap, storageSecret) - if err != nil { - return errors.Wrapf(err, "cannot add configMap %s", configMap.GetName()) - } - - deployment, err := r.GetDeployment(ctx, notary) - if err != nil { - return errors.Wrap(err, "cannot get deployment") - } - - _, err = r.Controller.AddDeploymentToManage(ctx, deployment, configMapResource) - if err != nil { - return errors.Wrapf(err, "cannot add deployment %s", deployment.GetName()) - } - - return nil -} diff --git a/controllers/goharbor/notarysigner/services.go b/controllers/goharbor/notarysigner/services.go deleted file mode 100644 index 8f1c78211..000000000 --- a/controllers/goharbor/notarysigner/services.go +++ /dev/null @@ -1,39 +0,0 @@ -package notarysigner - -import ( - "context" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" -) - -const ( - PublicPort = 80 -) - -func (r *Reconciler) GetService(ctx context.Context, notary *goharborv1.NotarySigner) (*corev1.Service, error) { - name := r.NormalizeName(ctx, notary.GetName()) - namespace := notary.GetNamespace() - - return &corev1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Spec: corev1.ServiceSpec{ - Ports: []corev1.ServicePort{{ - Name: harbormetav1.NotarySignerAPIPortName, - Port: goharborv1.NotarySignerAPIPort, - TargetPort: intstr.FromString(harbormetav1.NotarySignerAPIPortName), - Protocol: corev1.ProtocolTCP, - }}, - Selector: map[string]string{ - r.Label("name"): name, - r.Label("namespace"): namespace, - }, - }, - }, nil -} diff --git a/controllers/goharbor/notarysigner/suite_test.go b/controllers/goharbor/notarysigner/suite_test.go deleted file mode 100644 index 158cbbf84..000000000 --- a/controllers/goharbor/notarysigner/suite_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package notarysigner_test - -import ( - "context" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/controllers" - "github.com/plotly/harbor-operator/controllers/goharbor/notarysigner" -) - -var ( - ctx context.Context - reconciler *notarysigner.Reconciler -) - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Controller Suite") -} - -var _ = BeforeSuite(func() { - ctx = test.InitSuite() - - className := test.NewName("class") - - reconciler = controllers.NewNotarySigner(ctx, className) - - test.StartManager(ctx) -}) - -var _ = AfterSuite(func() { - defer test.AfterSuite(ctx) - - ctx.Done() -}) diff --git a/controllers/goharbor/notarysigner_test.go b/controllers/goharbor/notarysigner_test.go deleted file mode 100644 index 18c8ab1bf..000000000 --- a/controllers/goharbor/notarysigner_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package goharbor_test - -import ( - "context" - - . "github.com/onsi/gomega" - - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/certificate" - "github.com/plotly/harbor-operator/controllers/goharbor/internal/test/postgresql" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -func newNotarySignerController() controllerTest { - return controllerTest{ - Setup: setupValidNotarySigner, - Update: updateNotarySigner, - GetStatusFunc: getNotarySignerStatusFunc, - } -} - -func setupNotarySignerResourceDependencies(ctx context.Context, ns string) (string, string) { - aliasesName := newName("aliases") - authCertName := newName("authentication-certificate") - - Expect(k8sClient.Create(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: aliasesName, - Namespace: ns, - }, - StringData: map[string]string{ - harbormetav1.DefaultAliasSecretKey: "abcde_012345_ABCDE", - }, - Type: harbormetav1.SecretTypeNotarySignerAliases, - })).ToNot(HaveOccurred()) - - Expect(k8sClient.Create(ctx, &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: authCertName, - Namespace: ns, - }, - Data: certificate.NewCA().NewCert().ToMap(), - Type: corev1.SecretTypeTLS, - })).ToNot(HaveOccurred()) - - return authCertName, aliasesName -} - -func setupValidNotarySigner(ctx context.Context, ns string) (Resource, client.ObjectKey) { - database := postgresql.New(ctx, ns) - authCertName, aliasesName := setupNotarySignerResourceDependencies(ctx, ns) - - name := newName("notary-signer") - notarySigner := &goharborv1.NotarySigner{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: ns, - Annotations: test.AddVersionAnnotations(nil), - }, - Spec: goharborv1.NotarySignerSpec{ - Storage: goharborv1.NotarySignerStorageSpec{ - NotaryStorageSpec: goharborv1.NotaryStorageSpec{ - Postgres: database, - }, - AliasesRef: aliasesName, - }, - Authentication: goharborv1.NotarySignerAuthenticationSpec{ - CertificateRef: authCertName, - }, - }, - } - - Expect(k8sClient.Create(ctx, notarySigner)).To(Succeed()) - - return notarySigner, client.ObjectKey{ - Name: name, - Namespace: ns, - } -} - -func updateNotarySigner(ctx context.Context, object Resource) { - notarySigner, ok := object.(*goharborv1.NotarySigner) - Expect(ok).To(BeTrue()) - - var replicas int32 = 1 - - if notarySigner.Spec.Replicas != nil { - replicas = *notarySigner.Spec.Replicas + 1 - } - - notarySigner.Spec.Replicas = &replicas -} - -func getNotarySignerStatusFunc(ctx context.Context, key client.ObjectKey) func() harbormetav1.ComponentStatus { - return func() harbormetav1.ComponentStatus { - var notarySigner goharborv1.NotarySigner - - err := k8sClient.Get(ctx, key, ¬arySigner) - - Expect(err).ToNot(HaveOccurred()) - - return notarySigner.Status - } -} diff --git a/controllers/goharbor/suite_test.go b/controllers/goharbor/suite_test.go index 4cb49258a..7cc8f4421 100644 --- a/controllers/goharbor/suite_test.go +++ b/controllers/goharbor/suite_test.go @@ -22,13 +22,13 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/ovh/configstore" "github.com/plotly/harbor-operator/controllers/goharbor/internal/test" "github.com/plotly/harbor-operator/pkg/config" "github.com/plotly/harbor-operator/pkg/factories/application" "github.com/plotly/harbor-operator/pkg/factories/logger" "github.com/plotly/harbor-operator/pkg/scheme" "github.com/plotly/harbor-operator/pkg/setup" - "github.com/ovh/configstore" core "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest" @@ -37,6 +37,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to @@ -90,8 +91,10 @@ var _ = BeforeSuite(func() { Expect(k8sClient).ToNot(BeNil()) mgr, err := ctrl.NewManager(cfg, ctrl.Options{ - MetricsBindAddress: "0", - Scheme: s, + Metrics: server.Options{ + BindAddress: "0", + }, + Scheme: s, }) Expect(err).NotTo(HaveOccurred(), "failed to create manager") diff --git a/docs/CRD/custom-resource-definition.md b/docs/CRD/custom-resource-definition.md index bfe4d35a6..c322c96c4 100644 --- a/docs/CRD/custom-resource-definition.md +++ b/docs/CRD/custom-resource-definition.md @@ -23,7 +23,7 @@ spec: ### Top level general fields -`expose`(required): Expose the access endpoints of Harbor core services as well as notary service (optional). +`expose`(required): Expose the access endpoints of Harbor core services. ```yaml spec: @@ -48,8 +48,6 @@ spec: key: value # Set the ingress class name. If it is not set, the system default one will be picked up. ingressClassName: ingressClass # Optional - # Expose notary service when it is configured - notary: # Optional ## Totally same with above [expose.core] part, skipped here. # ... Skipped fields @@ -307,12 +305,8 @@ spec: jobservice: {} registry: {} registryctl: {} - chartmuseum: {} trivy: {} exporter: {} - notary: - server: {} - signer: {} # ... Skipped fields ``` @@ -392,28 +386,6 @@ spec: # ... Skipped fields ``` -Extra configurations for Harbor component `chartmuseum`. - -```yaml -spec: - # ... Skipped fields - - chartmuseum: - # ... Skipped common component spec here - - # Extra configurations - - # Certificates need to be injected into chartmuseum - certificateRefs: # Optional - - cert1 - - cert2 - # Harbor defaults ChartMuseum to returning relative URLs, - # If you want using absolute URL you should enable it. - absoluteUrl: false # Optional, default = false - - # ... Skipped fields -``` - Extra configurations for Harbor component `trivy`. ```yaml @@ -425,10 +397,6 @@ spec: # Extra configurations - # Certificates need to be injected into chartmuseum - certificateRefs: # Optional - - cert1 - - cert2 # The name of the secret containing the token to connect to GitHub API. githubTokenRef: github-token # Optional # The flag to enable or disable Trivy DB downloads from GitHub @@ -451,24 +419,6 @@ spec: # ... Skipped fields ``` -Extra configurations for Harbor component `notary`. - -```yaml -spec: - # ... Skipped fields - - notary: - server: {} # Skipped common component spec here ... - signer: {} # Skipped common component spec here ... - - # Extra configurations - - # Inject migration configuration to notary resources - migrationEnabled: true # Optional, default = true - - # ... Skipped fields -``` - ### Storage related fields So far, there are 6 options for storage configurations: `FileSystem` ([Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)), [S3](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html) , [Swift](https://docs.openstack.org/swift/latest/), [Azure](https://azure.microsoft.com/services/storage/), [Gcs](https://cloud.google.com/storage) and MinIO. diff --git a/docs/arch/arch.md b/docs/arch/arch.md index 1e9f7ef00..f14c23df2 100644 --- a/docs/arch/arch.md +++ b/docs/arch/arch.md @@ -14,7 +14,7 @@ A top level CR `HarborCluster` is introduced to hold the whole component stack o Regarding the related dependent services required by running Harbor cluster, if the user has corresponding pre-deployed services and is willing to use , these pre-deployed services can be configured into the `HarborCluster` CR instead of provisioning in-cluster services by the operator itself. Choosing which way totally depends on the user's actual case. -CRDs are created for each Harbor components, including the mandatory ones `protal`, `core`, `jobservice`, `registry` and `registry controller` as well as the optional ones `trivy`, `notary` and `metrics exporter`. Those component CRs are owned by the `Harbor` CR. The `Harbor` controller is responsible for reconciling `Harbor` to make sure the related component CRs are correctly created, updated and even deleted. +CRDs are created for each Harbor components, including the mandatory ones `protal`, `core`, `jobservice`, `registry` and `registry controller` as well as the optional ones `trivy` and `metrics exporter`. Those component CRs are owned by the `Harbor` CR. The `Harbor` controller is responsible for reconciling `Harbor` to make sure the related component CRs are correctly created, updated and even deleted. Each component CR has its own controller that will reconcile the component CR to make sure the related Kubernetes resources aer correctly handled according to the component spec. diff --git a/docs/configurations/operator-configurations.md b/docs/configurations/operator-configurations.md index 145d28f91..3824fd4a7 100644 --- a/docs/configurations/operator-configurations.md +++ b/docs/configurations/operator-configurations.md @@ -23,12 +23,6 @@ There are some settings for you to configure your Harbor operator deployment. - For installing by `kustomize` build, change file `config/config/*-ctrl.yaml` - For installing by `helm` chart, change `values.yaml` or change configure map in `charts/harbor-operator/templates/configmap.yaml` -### chartmuseum-ctrl.yaml - -| key | description | -|----------------|-----------------------| -| max-reconcile | max parallel reconciliation. | - ### core-ctrl.yaml | key | description | @@ -65,18 +59,6 @@ There are some settings for you to configure your Harbor operator deployment. |----------------|-----------------------| | max-reconcile | max parallel reconciliation. | -### notaryserver-ctrl.yaml - -| key | description | -|----------------|-----------------------| -| max-reconcile | max parallel reconciliation. | - -### notarysigner-ctrl.yaml - -| key | description | -|----------------|-----------------------| -| max-reconcile | max parallel reconciliation. | - ### portal-ctrl.yaml | key | description | diff --git a/docs/development.md b/docs/development.md index a199a42df..12fbf4052 100644 --- a/docs/development.md +++ b/docs/development.md @@ -15,7 +15,7 @@ Have a look in [CONTRIBUTING.md](https://github.com/goharbor/harbor-operator/blo ### Packages -- [Go 1.18+](https://golang.org/) +- [Go 1.23+](https://golang.org/) - [Helm](https://helm.sh/) - [Docker](https://docker.com) & [Docker Compose](https://docs.docker.com/compose/install/) - [OpenSSL](https://www.openssl.org/) @@ -60,8 +60,6 @@ make run export LBAAS_DOMAIN=$(kubectl get svc nginx-nginx-ingress-controller -o jsonpath={.status.loadBalancer.ingress[0].hostname}) export CORE_DATABASE_SECRET=$(kubectl get secret core-database-postgresql -o jsonpath={.data.postgresql-password} | base64 --decode) export CLAIR_DATABASE_SECRET=$(kubectl get secret clair-database-postgresql -o jsonpath={.data.postgresql-password} | base64 --decode) -export NOTARY_SERVER_DATABASE_SECRET=$(kubectl get secret notary-server-database-postgresql -o jsonpath={.data.postgresql-password} | base64 --decode) -export NOTARY_SIGNER_DATABASE_SECRET=$(kubectl get secret notary-signer-database-postgresql -o jsonpath={.data.postgresql-password} | base64 --decode) kubectl kustomize config/samples | gomplate | kubectl apply -f - cat <NOTES: `make postgresql` can also help install a PostgreSQL instance quickly. @@ -81,7 +79,7 @@ spec: prefix: prefix # Optional ``` -The thing to note here is the names of the databases `core`, `notaryserver` (only needed when enabling notary) and `notarysigner` (only needed when enabling notary) are relatively unchangeable. You can only append some prefixes to the database names by setting the optional field `prefix` in the `database` spec. For example, if the `spec.database.prefix` is "prefix", the database names will be "prefix-core", "prefix-notaryserver" and "prefix-notarysigner". +The thing to note here is the names of the databases `core` are relatively unchangeable. You can only append some prefixes to the database names by setting the optional field `prefix` in the `database` spec. For example, if the `spec.database.prefix` is "prefix", the database names will be "prefix-core". >NOTES: You need to make sure the related databases have been created before configuring them to the deploying Harbor cluster. diff --git a/docs/perf/simple-perf-comprasion.md b/docs/perf/simple-perf-comprasion.md index 6b4bd8f78..11007e564 100644 --- a/docs/perf/simple-perf-comprasion.md +++ b/docs/perf/simple-perf-comprasion.md @@ -356,7 +356,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain - minio.harbor.domain issuerRef: name: selfsigned-issuer @@ -380,11 +379,6 @@ spec: host: core.harbor.domain tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.harbor.domain - tls: - certificateRef: sample-public-certificate internalTLS: enabled: true portal: {} @@ -399,13 +393,10 @@ spec: kind: Issuer metrics: enabled: false - chartmuseum: {} exporter: {} trivy: skipUpdate: false storage: {} - notary: - migrationEnabled: true inClusterDatabase: kind: PostgresSQL postgresSqlSpec: @@ -496,7 +487,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain issuerRef: name: selfsigned-issuer kind: Issuer @@ -532,11 +522,6 @@ spec: host: core.harbor.domain tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.harbor.domain - tls: - certificateRef: sample-public-certificate internalTLS: enabled: true portal: {} @@ -551,13 +536,10 @@ spec: kind: Issuer metrics: enabled: false - chartmuseum: {} exporter: {} trivy: skipUpdate: false storage: {} - notary: - migrationEnabled: true imageChartStorage: filesystem: registryPersistentVolume: diff --git a/docs/tutorial.md b/docs/tutorial.md index 8e6b12f0f..1e5b83806 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -113,7 +113,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.10.10.10.100.nip.io - - notary.10.10.10.100.nip.io - minio.10.10.10.100.nip.io issuerRef: name: selfsigned-issuer @@ -143,12 +142,6 @@ spec: controller: default tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.10.10.10.100.nip.io - controller: default - tls: - certificateRef: sample-public-certificate internalTLS: enabled: true portal: {} @@ -161,13 +154,10 @@ spec: kind: Issuer metrics: enabled: true - chartmuseum: {} exporter: {} trivy: skipUpdate: false storage: {} - notary: - migrationEnabled: true database: kind: Zlando/PostgreSQL spec: @@ -294,12 +284,9 @@ A few of resources info like the following data are output: ```log NAME READY STATUS RESTARTS AGE -pod/harborcluster-sample-harbor-harbor-chartmuseum-5b68bd46b8-lq9g9 1/1 Running 0 105s pod/harborcluster-sample-harbor-harbor-core-7849f9c844-vf4w7 1/1 Running 0 105s pod/harborcluster-sample-harbor-harbor-exporter-dd5c99bc9-br9sk 1/1 Running 0 98s pod/harborcluster-sample-harbor-harbor-jobservice-668dd85cc4-2q9bf 1/1 Running 0 98s -pod/harborcluster-sample-harbor-harbor-notaryserver-77779bf8bf8t5tv 1/1 Running 0 108s -pod/harborcluster-sample-harbor-harbor-notarysigner-5c88dc99d8d5s64 1/1 Running 0 113s pod/harborcluster-sample-harbor-harbor-portal-64465c4954-52zxc 1/1 Running 0 109s pod/harborcluster-sample-harbor-harbor-registry-756dbcf5bb-zcrfn 2/2 Running 0 104s pod/harborcluster-sample-harbor-harbor-trivy-599ff5c789-hcblv 1/1 Running 0 108s @@ -311,12 +298,9 @@ pod/rfr-harborcluster-sample-redis-0 1/1 Ru pod/rfs-harborcluster-sample-redis-6fddf664-9nwsc 1/1 Running 0 3m31s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -service/harborcluster-sample-harbor-harbor-chartmuseum ClusterIP 10.96.9.53 443/TCP 105s service/harborcluster-sample-harbor-harbor-core ClusterIP 10.96.175.82 443/TCP,8001/TCP 106s service/harborcluster-sample-harbor-harbor-exporter ClusterIP 10.96.1.77 8001/TCP 98s service/harborcluster-sample-harbor-harbor-jobservice ClusterIP 10.96.67.178 443/TCP 98s -service/harborcluster-sample-harbor-harbor-notaryserver ClusterIP 10.96.235.154 443/TCP 108s -service/harborcluster-sample-harbor-harbor-notarysigner ClusterIP 10.96.246.138 7899/TCP 113s service/harborcluster-sample-harbor-harbor-portal ClusterIP 10.96.177.105 443/TCP 109s service/harborcluster-sample-harbor-harbor-registry ClusterIP 10.96.24.80 443/TCP,8001/TCP 105s service/harborcluster-sample-harbor-harbor-registryctl ClusterIP 10.96.171.157 443/TCP 105s @@ -330,24 +314,18 @@ service/postgresql-cluster-sample-ns-harborcluster-sample-repl ClusterIP 1 service/rfs-harborcluster-sample-redis ClusterIP 10.96.53.11 26379/TCP 3m31s NAME READY UP-TO-DATE AVAILABLE AGE -deployment.apps/harborcluster-sample-harbor-harbor-chartmuseum 1/1 1 1 105s deployment.apps/harborcluster-sample-harbor-harbor-core 1/1 1 1 105s deployment.apps/harborcluster-sample-harbor-harbor-exporter 1/1 1 1 98s deployment.apps/harborcluster-sample-harbor-harbor-jobservice 1/1 1 1 98s -deployment.apps/harborcluster-sample-harbor-harbor-notaryserver 1/1 1 1 108s -deployment.apps/harborcluster-sample-harbor-harbor-notarysigner 1/1 1 1 113s deployment.apps/harborcluster-sample-harbor-harbor-portal 1/1 1 1 109s deployment.apps/harborcluster-sample-harbor-harbor-registry 1/1 1 1 104s deployment.apps/harborcluster-sample-harbor-harbor-trivy 1/1 1 1 108s deployment.apps/rfs-harborcluster-sample-redis 1/1 1 1 3m31s NAME DESIRED CURRENT READY AGE -replicaset.apps/harborcluster-sample-harbor-harbor-chartmuseum-5b68bd46b8 1 1 1 105s replicaset.apps/harborcluster-sample-harbor-harbor-core-7849f9c844 1 1 1 105s replicaset.apps/harborcluster-sample-harbor-harbor-exporter-dd5c99bc9 1 1 1 98s replicaset.apps/harborcluster-sample-harbor-harbor-jobservice-668dd85cc4 1 1 1 98s -replicaset.apps/harborcluster-sample-harbor-harbor-notaryserver-77779bf8bf 1 1 1 108s -replicaset.apps/harborcluster-sample-harbor-harbor-notarysigner-5c88dc99d8 1 1 1 113s replicaset.apps/harborcluster-sample-harbor-harbor-portal-64465c4954 1 1 1 109s replicaset.apps/harborcluster-sample-harbor-harbor-registry-756dbcf5bb 1 1 1 104s replicaset.apps/harborcluster-sample-harbor-harbor-trivy-599ff5c789 1 1 1 108s diff --git a/go.mod b/go.mod index 027a1345a..0c89163b4 100644 --- a/go.mod +++ b/go.mod @@ -1,158 +1,161 @@ module github.com/plotly/harbor-operator -go 1.18 +go 1.23.2 require ( github.com/Masterminds/semver v1.5.0 github.com/Masterminds/sprig v2.22.0+incompatible - github.com/containers/image/v5 v5.16.1 - github.com/go-kit/kit v0.10.0 - github.com/go-logr/logr v1.2.4 - github.com/go-openapi/runtime v0.21.0 + github.com/containers/image/v5 v5.32.2 + github.com/go-kit/kit v0.13.0 + github.com/go-logr/logr v1.4.2 + github.com/go-openapi/runtime v0.28.0 github.com/go-redis/redis v6.15.9+incompatible - github.com/goharbor/go-client v0.26.2 - github.com/goharbor/harbor/src v0.0.0-20220526154154-b0506782b47d - github.com/jaegertracing/jaeger-lib v2.2.0+incompatible - github.com/jetstack/cert-manager v1.1.0 + github.com/goharbor/go-client v0.210.0 + github.com/goharbor/harbor/src v0.0.0-20241024103216-a7b91b5414c6 + github.com/jaegertracing/jaeger-lib v2.4.1+incompatible + github.com/jetstack/cert-manager v1.7.3 github.com/markbates/pkger v0.17.1 github.com/minio/minio-go/v6 v6.0.57 - github.com/onsi/ginkgo/v2 v2.6.0 - github.com/onsi/gomega v1.24.1 + github.com/onsi/ginkgo/v2 v2.20.2 + github.com/onsi/gomega v1.34.2 github.com/opentracing-contrib/go-stdlib v1.0.0 github.com/opentracing/opentracing-go v1.2.0 - github.com/ovh/configstore v0.3.2 + github.com/ovh/configstore v0.6.2 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.14.0 - github.com/sethvargo/go-password v0.1.3 - github.com/sirupsen/logrus v1.8.1 - github.com/spotahome/redis-operator v1.1.1 - github.com/stretchr/testify v1.8.2 - github.com/theupdateframework/notary v0.6.1 - github.com/uber/jaeger-client-go v2.24.0+incompatible - github.com/uber/jaeger-lib v2.2.0+incompatible + github.com/prometheus/client_golang v1.20.5 + github.com/sethvargo/go-password v0.3.1 + github.com/sirupsen/logrus v1.9.3 + github.com/spotahome/redis-operator v1.2.4 + github.com/stretchr/testify v1.9.0 + github.com/uber/jaeger-client-go v2.30.0+incompatible + github.com/uber/jaeger-lib v2.4.1+incompatible github.com/umisama/go-regexpcache v0.0.0-20150417035358-2444a542492f - github.com/zalando/postgres-operator v1.6.1 - go.uber.org/zap v1.24.0 - golang.org/x/crypto v0.14.0 - golang.org/x/sync v0.3.0 + github.com/zalando/postgres-operator v1.13.0 + go.uber.org/zap v1.27.0 + golang.org/x/crypto v0.28.0 + golang.org/x/sync v0.8.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.26.1 - k8s.io/apiextensions-apiserver v0.26.1 - k8s.io/apimachinery v0.26.1 - k8s.io/client-go v0.26.1 + k8s.io/api v0.31.2 + k8s.io/apiextensions-apiserver v0.31.2 + k8s.io/apimachinery v0.31.2 + k8s.io/client-go v0.31.2 k8s.io/klog v1.0.0 - sigs.k8s.io/controller-runtime v0.14.6 + sigs.k8s.io/controller-runtime v0.19.1 sigs.k8s.io/kustomize/kstatus v0.0.2 - sigs.k8s.io/yaml v1.3.0 + sigs.k8s.io/yaml v1.4.0 ) require ( github.com/Masterminds/goutils v1.1.1 // indirect - github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect - github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect - github.com/beego/beego v1.12.12 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/beego/beego/v2 v2.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/go v0.0.0-20160303222718-d30aec9fd63c // indirect - github.com/emicklei/go-restful/v3 v3.9.0 // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/containers/storage v1.55.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-logr/zapr v1.2.3 // indirect - github.com/go-openapi/analysis v0.20.1 // indirect - github.com/go-openapi/errors v0.20.1 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/loads v0.21.0 // indirect - github.com/go-openapi/spec v0.20.4 // indirect - github.com/go-openapi/strfmt v0.21.0 // indirect - github.com/go-openapi/swag v0.19.15 // indirect - github.com/go-openapi/validate v0.20.3 // indirect - github.com/go-stack/stack v1.8.0 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/analysis v0.23.0 // indirect + github.com/go-openapi/errors v0.22.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/loads v0.22.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/strfmt v0.23.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/validate v0.24.0 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobuffalo/here v0.6.0 // 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.3 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.9.0 // indirect + github.com/jackc/pgconn v1.14.3 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.1.1 // indirect - github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect + github.com/jackc/pgproto3/v2 v2.3.3 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid v1.2.3 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.2 // indirect - github.com/mailru/easyjson v0.7.6 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/minio/md5-simd v1.1.0 // indirect github.com/minio/sha256-simd v0.1.1 // indirect github.com/mitchellh/copystructure v1.1.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.1 // indirect - github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/spdystream v0.4.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nxadm/tail v1.4.8 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect github.com/spf13/pflag v1.0.5 // indirect - go.mongodb.org/mongo-driver v1.7.3 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0 // indirect - go.opentelemetry.io/otel v1.12.0 // indirect - go.opentelemetry.io/otel/exporters/jaeger v1.12.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.12.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0 // indirect - go.opentelemetry.io/otel/metric v0.31.0 // indirect - go.opentelemetry.io/otel/sdk v1.12.0 // indirect - go.opentelemetry.io/otel/trace v1.12.0 // indirect - go.opentelemetry.io/proto/otlp v0.19.0 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.10.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.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/genproto v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/grpc v1.58.3 // indirect - google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/x448/float16 v0.8.4 // indirect + go.mongodb.org/mongo-driver v1.14.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/jaeger v1.0.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/term v0.25.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/time v0.7.0 // indirect + golang.org/x/tools v0.24.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.62.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.26.1 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index a9e10e5a1..ffd0a3295 100644 --- a/go.sum +++ b/go.sum @@ -1,969 +1,334 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= 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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/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/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/14rcole/gopopulate v0.0.0-20180821133914-b175b219e774/go.mod h1:6/0dYRLLXyJjbkIPeeGyoJ/eKOSI0eU6eTlCBYibgd0= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v46.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.6/go.mod h1:V6p3pKZx1KKkJubbxnDWrzNhEIfOy/pTGasLqzHIPHs= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.4/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= -github.com/Azure/go-autorest/autorest/validation v0.3.0/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -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/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.18/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Venafi/vcert/v4 v4.11.0/go.mod h1:OE+UZ0cj8qqVUuk0u7R4GIk4ZB6JMSf/WySqnBPNwws= -github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI= -github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -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/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= -github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= -github.com/aws/aws-sdk-go v1.34.30/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= -github.com/aws/aws-sdk-go v1.36.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beego/beego v1.12.12 h1:ARY1sNVSS23N0mEQIhSqRDTyyDlx95JY0V3GogBbZbQ= -github.com/beego/beego v1.12.12/go.mod h1:QURFL1HldOcCZAxnc1cZ7wrplsYR5dKPHFjmk6WkLAs= -github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= -github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/beego/beego/v2 v2.2.1 h1:5RatpEOKnw6sm76hj6lQvEFi4Tco+E21VQomnVB7NsA= +github.com/beego/beego/v2 v2.2.1/go.mod h1:X4hHhM2AXn0hN2tbyz5X/PD7v5JUdE4IihZApiljpNA= 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/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.13.2/go.mod h1:27kfc1apuifUmJhp069y0+hwlKDg4bd8LWlu7oKeZvM= -github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.4/go.mod h1:sx18RgvW6ABJ4iYUw7Q5x7bgFOAB9B6G7+yO0XBc4zw= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter/estargz v0.9.0/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/image/v5 v5.16.1 h1:4786k48/af3dOkVf9EM+xB880ArkXalICsGC4AXC6to= -github.com/containers/image/v5 v5.16.1/go.mod h1:mCvIFdzyyP1B0NBcZ80OIuaYqFn/OpFpaOMOMn1kU2M= -github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/storage v1.37.0/go.mod h1:kqeJeS0b7DO2ZT1nVWs0XufrmPFbgV3c+Q/45RlH6r4= +github.com/containers/image/v5 v5.32.2 h1:SzNE2Y6sf9b1GJoC8qjCuMBXwQrACFp4p0RK15+4gmQ= +github.com/containers/image/v5 v5.32.2/go.mod h1:v1l73VeMugfj/QtKI+jhYbwnwFCFnNGckvbST3rQ5Hk= +github.com/containers/storage v1.55.0 h1:wTWZ3YpcQf1F+dSP4KxG9iqDfpQY1otaUXjPpffuhgg= +github.com/containers/storage v1.55.0/go.mod h1:28cB81IDk+y7ok60Of6u52RbCeBRucbFOeLunhER1RQ= github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/couchbase/go-couchbase v0.0.0-20201216133707-c04035124b17/go.mod h1:+/bddYDxXsf9qt0xpDUtRR47A2GjaXmGGAqQ/k3GJ8A= -github.com/couchbase/gomemcached v0.1.2-0.20201224031647-c432ccf49f32/go.mod h1:mxliKQxOv84gQ0bJWbI+w9Wxdpt9HjDvgW9MjCym5Vo= -github.com/couchbase/goutils v0.0.0-20210118111533-e33d3ffb5401/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs= -github.com/cpu/goacmedns v0.0.3/go.mod h1:4MipLkI+qScwqtVxcNO6okBhbgRrr7/tKXUSgSL0teQ= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/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/digitalocean/godo v1.44.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.8+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= -github.com/docker/go v0.0.0-20160303222718-d30aec9fd63c h1:Ggg7IiOtghyZzn3ozi31kPHpV6qSjMgmesXaWCijYNM= -github.com/docker/go v0.0.0-20160303222718-d30aec9fd63c/go.mod h1:CADgU4DSXK5QUlFslkQu2yW2TKzFZcXq/leZfM0UH5Q= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI= -github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.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.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -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.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/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/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-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-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -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/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -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-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.2.1-0.20200730175230-ee2de8da5be6/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= -github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= -github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk= -github.com/go-openapi/analysis v0.20.0/go.mod h1:BMchjvaHDykmRMsK40iPtvyOfFdMMxlOmQr9FBZk+Og= -github.com/go-openapi/analysis v0.20.1 h1:zdVbw8yoD4SWZeq+cWdGgquaB0W4VrsJvDJHJND/Ktc= -github.com/go-openapi/analysis v0.20.1/go.mod h1:BMchjvaHDykmRMsK40iPtvyOfFdMMxlOmQr9FBZk+Og= +github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= +github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.1 h1:j23mMDtRxMwIobkpId7sWh7Ddcx4ivaoqUbfXx5P+a8= -github.com/go-openapi/errors v0.20.1/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= +github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY= -github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= -github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= -github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4= -github.com/go-openapi/loads v0.20.2/go.mod h1:hTVUotJ+UonAMMZsvakEgmWKgtulweO9vYP2bQYKA/o= -github.com/go-openapi/loads v0.21.0 h1:jYtUO4wwP7psAweisP/MDoOpdzsYEESdoPcsWjHDR68= -github.com/go-openapi/loads v0.21.0/go.mod h1:rHYve9nZrQ4CJhyeIIFJINGCg1tQpx2yJrrNo8sf1ws= +github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= +github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= -github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= -github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= -github.com/go-openapi/runtime v0.21.0 h1:giZ8eT26R+/rx6RX2MkYjZPY8vPYVKDhP/mOazrQHzM= -github.com/go-openapi/runtime v0.21.0/go.mod h1:aQg+kaIQEn+A2CRSY1TxbM8+sT9g2V3aLc1FbIAnbbs= +github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= +github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= -github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= -github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ= -github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= -github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= -github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= -github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= -github.com/go-openapi/strfmt v0.20.0/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= -github.com/go-openapi/strfmt v0.20.2/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicATpEfZwHUNk= -github.com/go-openapi/strfmt v0.21.0 h1:hX2qEZKmYks+t0hKeb4VTJpUm2UYsdL3+DCid5swxIs= -github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= +github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= -github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= -github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M= -github.com/go-openapi/swag v0.19.13/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= -github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= -github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI= -github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= -github.com/go-openapi/validate v0.20.3 h1:GZPPhhKSZrE8HjB4eEkoYAZmoWA4+tCemSgINH1/vKw= -github.com/go-openapi/validate v0.20.3/go.mod h1:goDdqVGiigM3jChcrYJxD2joalke3ZXeftD16byIjA4= -github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= +github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= 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/goharbor/go-client v0.26.2 h1:pu79j/vmrsR7HF5YztHJqUU/Ki2VLJo+c4pMUvdjJmg= -github.com/goharbor/go-client v0.26.2/go.mod h1:XMWHucuHU9VTRx6U6wYwbRuyCVhE6ffJGRjaeo0nvwo= -github.com/goharbor/harbor/src v0.0.0-20220526154154-b0506782b47d h1:MOwBwJi3VIoPls3O8jZrLHRbgw6l3rhIQQmZVAPL/t0= -github.com/goharbor/harbor/src v0.0.0-20220526154154-b0506782b47d/go.mod h1:ud/eT8hR+/hRtF/35KTuXSJFT/CMmaF/W30u03AgSqI= +github.com/goharbor/go-client v0.210.0 h1:QwgLcWNSC3MFhBe7lq3BxDPtKQiD3k6hf6Lt26NChOI= +github.com/goharbor/go-client v0.210.0/go.mod h1:XMWHucuHU9VTRx6U6wYwbRuyCVhE6ffJGRjaeo0nvwo= +github.com/goharbor/harbor/src v0.0.0-20241024103216-a7b91b5414c6 h1:3HXa+LpFG5mRX58ZRLX+63EF7cjjVWLr8GeUng9Xoo0= +github.com/goharbor/harbor/src v0.0.0-20241024103216-a7b91b5414c6/go.mod h1:Oc5B+Yx+ioNuVyP8fTUsez6qMYRP2G7sGTOyxt68+dk= 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/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= -github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= 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/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= 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.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-intervals v0.0.2/go.mod h1:MkaR3LNRfeKLPmqgJYs4E66z5InYjmCjbbr4TQlcT6Y= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/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/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -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-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/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/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= 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/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0 h1:gqibKSTJup/ahCsNKyMZAniPuZEfIqfXFc8FOWVYR+Q= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w= +github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd h1:eDErF6V/JPJON/B7s68BxwHgfmyOntHJQ8IOaz0x4R8= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1 h1:7PQ/4gLoqnl87ZxL7xjO0DR5gYuviDCZxQJsUlFW1eI= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jaegertracing/jaeger-lib v2.2.0+incompatible h1:jZhCknut8zLnkwPvC673qrTovILBtCuMXvLTu3Jnsh4= -github.com/jaegertracing/jaeger-lib v2.2.0+incompatible/go.mod h1:VqeqQrZmZr9G4WdLw4ei9tAHU54iJRkfoFHvTTQn4jQ= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jetstack/cert-manager v1.1.0 h1:gEhBV9I83m+kpQShDhNO4+J8O2qfNDjvAEL27pThGmg= -github.com/jetstack/cert-manager v1.1.0/go.mod h1:GULIHTGjSc2LjlgBCLhQ8u5WmQ95hk9FAiQbhjMthMk= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= +github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jaegertracing/jaeger-lib v2.4.1+incompatible h1:T+iarSGas1APzunL/14yHIHVyNDi3WK0Xvo8RQu5MT8= +github.com/jaegertracing/jaeger-lib v2.4.1+incompatible/go.mod h1:VqeqQrZmZr9G4WdLw4ei9tAHU54iJRkfoFHvTTQn4jQ= +github.com/jetstack/cert-manager v1.7.3 h1:GMbRmyEqKf/ve0TQIXIOjbokdm805rj3uWRlifJnd6U= +github.com/jetstack/cert-manager v1.7.3/go.mod h1:xj0TPp31HE0Jub5mNOnF3Fp3XvhIsiP+tsPZVOmU/Qs= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= -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/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= 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/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/manifoldco/promptui v0.8.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= 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/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= -github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/minio-go/v6 v6.0.57 h1:ixPkbKkyD7IhnluRgQpGSpHdpvNVaW6OD5R9IAO/9Tw= github.com/minio/minio-go/v6 v6.0.57/go.mod h1:5+R/nM9Pwrh0vqF+HbYYDQ84wdUFPyXHkrdT4AIkifM= github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.1.1 h1:Bp6x9R1Wn16SIz3OfeDr0b7RnCG2OB66Y7PQyC/cvq4= github.com/mitchellh/copystructure v1.1.1/go.mod h1:EBArHfARyrSWO/+Wyr9zwEkc6XMFB9XyNgFNmRkZZU4= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -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.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= 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= @@ -972,1091 +337,394 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d h1:LznySqW8MqVeFh+pW6rOkFdld9QQ7jRydBKKM6jyPVI= github.com/motomux/pretty v0.0.0-20161209205251-b2aad2c9a95d/go.mod h1:u3hJ0kqCQu/cPpsu3RbCOPZ0d7V3IjPjv1adNRleM9I= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mtrmac/gpgme v0.1.2/go.mod h1:GYYHnGSuS7HK3zVS2n3y73y0okK/BeKzwnn5jgiVFNI= -github.com/munnerz/crd-schema-fuzz v1.0.0/go.mod h1:4z/rcm37JxUkSsExFcLL6ZIT1SgDRdLiu7qq1evdVS0= 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 h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -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/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2-0.20210819154149-5ad6f50d6283/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opencontainers/selinux v1.8.5/go.mod h1:HTvjPFoGMbpQsG886e3lQwnsRWtE4TC1OF3OUvG9FAo= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing-contrib/go-stdlib v1.0.0 h1:TBS7YuVotp8myLon4Pv7BtCBzOTo1DeZCld0Z63mW2w= github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc= -github.com/ovh/configstore v0.3.2 h1:/kr1B27JVzW4Eiz20muZSnQ5UyizFjLy5+2CVfp/mKs= -github.com/ovh/configstore v0.3.2/go.mod h1:bBc7U++7HXgf9lrtmmJb31DK3Tp+Zv8GaIn0Bjolv/o= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible/go.mod h1:xlUlxe/2ItGlQyMTstqeDv9r3U4obH7xYd26TbDQutY= +github.com/ovh/configstore v0.6.2 h1:PPNJNaVG2ugpqZacaX4vSRsOyqErdNImgu0y8eDTuOo= +github.com/ovh/configstore v0.6.2/go.mod h1:DU19o06umHsivDXqUXBGXiw/vTiLpADXBxkksoSz+Kc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -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.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -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.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/r3labs/diff v1.1.0/go.mod h1:7WjXasNzi0vJetRcB/RqNl5dlIsmXcTTLmF5IoH6Xig= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -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.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sethvargo/go-password v0.1.3 h1:18KkbGDkw8SuzeohAbWqBLNSfRQblVwEHOLbPa0PvWM= -github.com/sethvargo/go-password v0.1.3/go.mod h1:2tyaaoHK/AlXwh5WWQDYjqQbHcq4cjPj5qb/ciYvu/Q= -github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= -github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= -github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sethvargo/go-password v0.3.1 h1:WqrLTjo7X6AcVYfC6R7GtSyuUQR9hGyAj/f1PYQZCJU= +github.com/sethvargo/go-password v0.3.1/go.mod h1:rXofC1zT54N7R8K/h1WDUdkf9BOx5OptoxrMBcrXzvs= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= -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 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= -github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spotahome/redis-operator v1.1.1 h1:0GBtvUXOodv6n10FHySFrIKSj6ykZOymgWJrjL58rpw= -github.com/spotahome/redis-operator v1.1.1/go.mod h1:bXvvnesGbda+UXMX4SlXF9aBk7mFHtyE1ATKnvBntNk= -github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/spotahome/redis-operator v1.2.4 h1:H5koLVJOhxNuuqO90OmJNJOCKzO01VJdZDepsjjgZUs= +github.com/spotahome/redis-operator v1.2.4/go.mod h1:1Z2uSfS+zdmI1mKYXTVvuyVD9h2DueXJ/Zo6CKKtCMw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tchap/go-patricia v2.3.0+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/theupdateframework/notary v0.6.1 h1:7wshjstgS9x9F5LuB1L5mBI2xNMObWqjz+cjWoom6l0= -github.com/theupdateframework/notary v0.6.1/go.mod h1:MOfgIfmox8s7/7fduvB2xyPPMJCrjRLRizA8OFwpnKY= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/uber/jaeger-client-go v2.24.0+incompatible h1:CGchgJcHsDd2jWnaL4XngByMrXoGHh3n8oCqAKx0uMo= -github.com/uber/jaeger-client-go v2.24.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= -github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/umisama/go-regexpcache v0.0.0-20150417035358-2444a542492f h1:haUDHoDEHXYsmhhJ9DwOcJBGtgRSCT6d5J1EcqxMFuU= github.com/umisama/go-regexpcache v0.0.0-20150417035358-2444a542492f/go.mod h1:YTm0hcnGJEKJOLVM4x0PvO8p43r7DANkXRNiONPfWIM= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= -github.com/vbauerster/mpb/v7 v7.1.5/go.mod h1:4M8+qAoQqV60WDNktBM5k05i1iTrXE7rjKOHEVkVlec= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/wendal/errors v0.0.0-20181209125328-7f31f4b264ec/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190809123943-df4f5c81cb3b/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -github.com/zalando/postgres-operator v1.6.1 h1:e6QCoi1EIzKnkdukkAEf9Y05myxBUmW+sttfy+9XsI0= -github.com/zalando/postgres-operator v1.6.1/go.mod h1:n4JW8ceoi21pqR+eCtWUrnpJ3oM8iWg+EImx3l0HjgM= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= -go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= -go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= -go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= -go.mongodb.org/mongo-driver v1.4.6/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= -go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= -go.mongodb.org/mongo-driver v1.7.3 h1:G4l/eYY9VrQAK/AUgkV0koQKzQnyddnWxrd/Etf0jIs= -go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +github.com/zalando/postgres-operator v1.13.0 h1:T9Mb+ZRQyTxXbagIK66GLVGCwM3661aX2lOkNpax4s8= +github.com/zalando/postgres-operator v1.13.0/go.mod h1:WiMEKzUny2lJHYle+7+D/5BhlvPn8prl76rEDYLsQAg= +go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= +go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0 h1:Ajldaqhxqw/gNzQA45IKFWLdG7jZuXX/wBW1d5qvbUI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0/go.mod h1:9NiG9I2aHTKkcxqCILhjtyNA1QEiCjdBACv4IvrFQ+c= -go.opentelemetry.io/otel v1.12.0 h1:IgfC7kqQrRccIKuB7Cl+SRUmsKbEwSGPr0Eu+/ht1SQ= -go.opentelemetry.io/otel v1.12.0/go.mod h1:geaoz0L0r1BEOR81k7/n9W4TCXYCJ7bPO7K374jQHG0= -go.opentelemetry.io/otel/exporters/jaeger v1.12.0 h1:1Vy11S0iAD70EPfcP3N2f2IhLq/cIuTW+Zt010MswR8= -go.opentelemetry.io/otel/exporters/jaeger v1.12.0/go.mod h1:SCLbaspEoU9mGJZB6ksc2iSGU6CLWY5yefchDqOM0IM= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.12.0 h1:UfDENi+LTcLjQ/JhaXimjlIgn7wWjwbEMmdREm2Gyng= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.12.0/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 h1:ZVqtSAxrR4+ofzayuww0/EKamCjjnwnXTMRZzMudJoU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0/go.mod h1:IlaGLENJkAl9+Xoo3J0unkdOwtL+rmqZ3ryMjUtYA94= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0 h1:L23MzcHDznr05xOM1Ng1F98L0nVd7hm/S7y2jW9IRB4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0/go.mod h1:C+onYX2j5QH653b3wGJwowYr8jLMjBJw35QcaCQQK0U= -go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= -go.opentelemetry.io/otel/sdk v1.12.0 h1:8npliVYV7qc0t1FKdpU08eMnOjgPFMnriPhn0HH4q3o= -go.opentelemetry.io/otel/sdk v1.12.0/go.mod h1:WYcvtgquYvgODEvxOry5owO2y9MyciW7JqMz6cpXShE= -go.opentelemetry.io/otel/trace v1.12.0 h1:p28in++7Kd0r2d8gSt931O57fdjUyWxkVbESuILAeUc= -go.opentelemetry.io/otel/trace v1.12.0/go.mod h1:pHlgBynn6s25qJ2szD+Bv+iwKJttjHSI3lUAyf0GNuQ= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= +go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/exporters/jaeger v1.0.0 h1:cLhx8llHw02h5JTqGqaRbYn+QVKHmrzD9vEbKnSPk5U= +go.opentelemetry.io/otel/exporters/jaeger v1.0.0/go.mod h1:q10N1AolE1JjqKrFJK2tYw0iZpmX+HBaXBtuCzRnBGQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -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.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -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/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/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-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= 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/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/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/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-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/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-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -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-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 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-20190412183630-56d357773e84/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.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/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-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190911201528-7ad0cfa0b7b5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/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-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-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-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/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-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/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-20201202213521-69691e467435/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-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/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-20210820121016-41cdb8703e55/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/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.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/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-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/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-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/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-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-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-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/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-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/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-20201207204333-a835c872fcea/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= 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/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= 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-20190404172233-64821d5d2107/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-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -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-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 h1:Z0hjGZePRE0ZBWotvtrwxFNrNE9CUAGtplaDK5NNI/g= -google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= -google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 h1:FmF5cCW94Ij59cfpoLiwTgodWmm60eEV0CjlsVg2fuw= -google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -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.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -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.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 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.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.52.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.0.0/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.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/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 v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -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-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -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.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8= -k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI= -k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.19.4/go.mod h1:SbtJ2aHCItirzdJ36YslycFNzWADYH3tgOhvBEFtZAk= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= +k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= -k8s.io/apiextensions-apiserver v0.18.0/go.mod h1:18Cwn1Xws4xnWQNC00FLq1E350b9lUF+aOdIWDOZxgo= -k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M= -k8s.io/apiextensions-apiserver v0.19.0/go.mod h1:znfQxNpjqz/ZehvbfMg5N6fvBJW5Lqu5HVLTJQdP4Fs= -k8s.io/apiextensions-apiserver v0.19.4/go.mod h1:B9rpH/nu4JBCtuUp3zTTk8DEjZUupZTBEec7/2zNRYw= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= +k8s.io/apiextensions-apiserver v0.31.2 h1:W8EwUb8+WXBLu56ser5IudT2cOho0gAKeTOnywBLxd0= +k8s.io/apiextensions-apiserver v0.31.2/go.mod h1:i+Geh+nGCJEGiCGR3MlBDkS7koHIIKWVfWeRFiOsUcM= k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.18.0/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= -k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.19.4/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= +k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= -k8s.io/apiserver v0.18.0/go.mod h1:3S2O6FeBBd6XTo0njUrLxiqk8GNy6wWOftjhJcXYnjw= -k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg= -k8s.io/apiserver v0.19.0/go.mod h1:XvzqavYj73931x7FLtyagh8WibHpePJ1QwWrSJs2CLk= -k8s.io/apiserver v0.19.4/go.mod h1:X8WRHCR1UGZDd7HpV0QDc1h/6VbbpAeAGyxSh8yzZXw= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/cli-runtime v0.19.0/go.mod h1:tun9l0eUklT8IHIM0jors17KmUjcrAxn0myoBYwuNuo= k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= -k8s.io/client-go v0.18.0/go.mod h1:uQSYDYs4WhVZ9i6AIoEZuwUggLVEF64HOD37boKAtF8= -k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q= -k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.19.4/go.mod h1:ZrEy7+wj9PjH5VMBCuu/BDlvtUAku0oVFk4MmnW9mWA= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= -k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= +k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= +k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= -k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= -k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= -k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= -k8s.io/code-generator v0.19.4/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= -k8s.io/component-base v0.18.0/go.mod h1:u3BCg0z1uskkzrnAKFzulmYaEpZF7XC9Pf/uFyb1v2c= -k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14= -k8s.io/component-base v0.19.0/go.mod h1:dKsY8BxkA+9dZIAh2aWJLL/UdASFDNtGYTCItL4LM7Y= -k8s.io/component-base v0.19.4/go.mod h1:ZzuSLlsWhajIDEkKF73j64Gz/5o0AgON08FgRbEPI70= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= -k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-aggregator v0.19.0/go.mod h1:1Ln45PQggFAG8xOqWPIYMxUq8WNtpPnYsbUJ39DpF/A= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kubectl v0.19.0/go.mod h1:gPCjjsmE6unJzgaUNXIFGZGafiUp5jh0If3F/x7/rRg= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.19.0/go.mod h1:WykpW8B60OeAJx1imdwUgyOID2kDljr/Q+1zrPJ98Wo= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= -sigs.k8s.io/controller-runtime v0.6.2/go.mod h1:vhcq/rlnENJ09SIRp3EveTaZ0yqH526hjf9iJdbUJ/E= -sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= -sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= -sigs.k8s.io/controller-tools v0.2.9-0.20200414181213-645d44dca7c0/go.mod h1:YKE/iHvcKITCljdnlqHYe+kAt7ZldvtAwUzQff0k1T0= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= +sigs.k8s.io/controller-runtime v0.19.1 h1:Son+Q40+Be3QWb+niBXAg2vFiYWolDjjRfO8hn/cxOk= +sigs.k8s.io/controller-runtime v0.19.1/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/kstatus v0.0.2 h1:7GoHi/Vq7rIAS8AQONlfcdaCpVXY0HqzNhU5us7dToA= sigs.k8s.io/kustomize/kstatus v0.0.2/go.mod h1:6qUKWLy4+yGExtjbs+fibz2tOBZG7413yx2NHyAzIU0= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -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/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -software.sslmate.com/src/go-pkcs12 v0.0.0-20180114231543-2291e8f0f237/go.mod h1:/xvNRWUqm0+/ZMiF4EX00vrSCMsE4/NHb+Pt3freEeQ= -software.sslmate.com/src/go-pkcs12 v0.0.0-20200830195227-52f69702a001/go.mod h1:/xvNRWUqm0+/ZMiF4EX00vrSCMsE4/NHb+Pt3freEeQ= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/main.go b/main.go index cc94e0fcc..e094c69f2 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "context" "github.com/go-logr/logr" + "github.com/ovh/configstore" "github.com/plotly/harbor-operator/pkg/exit" "github.com/plotly/harbor-operator/pkg/factories/application" "github.com/plotly/harbor-operator/pkg/factories/logger" @@ -11,7 +12,6 @@ import ( "github.com/plotly/harbor-operator/pkg/scheme" "github.com/plotly/harbor-operator/pkg/setup" "github.com/plotly/harbor-operator/pkg/tracing" - "github.com/ovh/configstore" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" ctrl "sigs.k8s.io/controller-runtime" ) diff --git a/manifests/cluster/deployment.yaml b/manifests/cluster/deployment.yaml index a525602ea..5a910f65c 100644 --- a/manifests/cluster/deployment.yaml +++ b/manifests/cluster/deployment.yaml @@ -16,7 +16,7 @@ metadata: goharbor.io/deploy-engine: Kustomization goharbor.io/deploy-mode: cluster goharbor.io/operator-version: v1.3.0 - name: chartmuseums.goharbor.io + name: cores.goharbor.io spec: conversion: strategy: Webhook @@ -33,10 +33,10 @@ spec: names: categories: - goharbor - kind: ChartMuseum - listKind: ChartMuseumList - plural: chartmuseums - singular: chartmuseum + kind: Core + listKind: CoreList + plural: cores + singular: core scope: Namespaced versions: - additionalPrinterColumns: @@ -65,3108 +65,843 @@ spec: type: object spec: properties: - authentication: + adminInitialPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + authMode: + default: db_auth + enum: + - db_auth + type: string + certificateRefs: + items: + type: string + type: array + components: properties: - anonymousGet: - default: false - type: boolean - basicAuthRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - bearer: + chartRepository: properties: - certificateRef: + absoluteURL: + default: false + type: boolean + cacheDriver: + default: redis + enum: + - redis + type: string + url: + pattern: https?://.+ + type: string + required: + - url + type: object + jobService: + properties: + secretRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - realm: + url: + pattern: https?://.+ type: string - service: + required: + - secretRef + - url + type: object + portal: + properties: + url: + pattern: https?://.+ type: string required: - - certificateRef - - realm - - service + - url type: object - type: object - cache: - properties: - redis: + registry: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + controllerURL: + pattern: https?://.+ type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: + credentials: + properties: + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + username: + type: string + required: + - passwordRef + - username + type: object + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: + minLength: 1 + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + storageProviderName: minLength: 1 type: string - passwordRef: + sync: + default: false + type: boolean + url: + pattern: https?://.+ + type: string + required: + - controllerURL + - credentials + - url + type: object + tls: + properties: + certificateRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: + type: object + tokenService: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + url: + pattern: https?://.+ type: string required: - - host + - certificateRef + - url + type: object + trivy: + properties: + adapterURL: + pattern: https?://.+ + type: string + url: + pattern: https?://.+ + type: string + required: + - adapterURL + - url + type: object + required: + - jobService + - portal + - registry + - tokenService + type: object + configExpiration: + default: 5s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + csrfKeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + properties: + database: + minLength: 1 + type: string + encryptionKeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + hosts: + items: + properties: + host: + minLength: 1 + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + required: + - host + type: object + minItems: 1 + type: array + maxIdleConnections: + default: 50 + format: int32 + minimum: 0 + type: integer + maxOpenConnections: + default: 1000 + format: int32 + minimum: 0 + type: integer + parameters: + additionalProperties: + type: string + type: object + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + username: + minLength: 1 + type: string + required: + - encryptionKeyRef + type: object + externalEndpoint: + pattern: https?://.+ + type: string + http: + properties: + enableGzip: + default: true + type: boolean + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + log: + properties: + level: + default: info + enum: + - debug + - info + - warn + - error + type: string + type: object + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + proxy: + properties: + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + publicCertificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: + minLength: 1 + type: string + idleTimeout: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - adminInitialPasswordRef + - components + - csrfKeyRef + - database + - externalEndpoint + - redis + - secretRef + type: object + status: + properties: + conditions: + items: + properties: + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + operator: + properties: + controllerGitCommit: + minLength: 1 + type: string + controllerName: + minLength: 1 + type: string + controllerVersion: + minLength: 1 + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + required: + - conditions + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + priority: 1 + type: date + - description: Human readable message describing the failure + jsonPath: .status.conditions[?(@.type=="Failed")].message + name: Failure + priority: 5 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + adminInitialPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + authMode: + default: db_auth + enum: + - db_auth + type: string certificateRefs: items: type: string type: array - chart: + components: properties: - allowOverwrite: - default: true - type: boolean - index: + chartRepository: properties: - parallelLimit: - format: int32 - minimum: 0 - type: integer - storageTimestampTolerance: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + absoluteURL: + default: false + type: boolean + cacheDriver: + default: redis + enum: + - redis + type: string + url: + pattern: https?://.+ type: string + required: + - url type: object - onlySemver2: - default: false - type: boolean - postFormFieldName: + jobService: properties: - chart: - default: chart - minLength: 1 + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - provenance: - default: prov - minLength: 1 + url: + pattern: https?://.+ type: string + required: + - secretRef + - url type: object - repo: + portal: properties: - depth: - default: 1 - format: int32 - minimum: 0 - type: integer - depthDynamic: - default: false - type: boolean + url: + pattern: https?://.+ + type: string + required: + - url type: object - storage: + registry: properties: - amazon: + controllerURL: + pattern: https?://.+ + type: string + credentials: properties: - accessKeyID: - type: string - accessSecretRef: + passwordRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - bucket: + username: type: string - endpoint: + required: + - passwordRef + - username + type: object + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - prefix: + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: + minLength: 1 type: string - region: + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - serverSideEncryption: + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: type: string required: - - bucket + - host type: object - filesystem: + storageProviderName: + minLength: 1 + type: string + sync: + default: false + type: boolean + url: + pattern: https?://.+ + type: string + required: + - controllerURL + - credentials + - url + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + tokenService: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + url: + pattern: https?://.+ + type: string + required: + - certificateRef + - url + type: object + trivy: + properties: + adapterURL: + pattern: https?://.+ + type: string + url: + pattern: https?://.+ + type: string + required: + - adapterURL + - url + type: object + required: + - jobService + - portal + - registry + - tokenService + type: object + configExpiration: + default: 5s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + csrfKeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + properties: + database: + minLength: 1 + type: string + encryptionKeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + hosts: + items: + properties: + host: + minLength: 1 + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + required: + - host + type: object + minItems: 1 + type: array + maxIdleConnections: + default: 50 + format: int32 + minimum: 0 + type: integer + maxOpenConnections: + default: 1000 + format: int32 + minimum: 0 + type: integer + parameters: + additionalProperties: + type: string + type: object + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + username: + minLength: 1 + type: string + required: + - encryptionKeyRef + type: object + externalEndpoint: + pattern: https?://.+ + type: string + http: + properties: + enableGzip: + default: true + type: boolean + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + log: + properties: + level: + default: info + enum: + - debug + - info + - warn + - error + type: string + type: object + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + network: + properties: + ipFamilies: + items: + type: string + type: array + type: object + nodeSelector: + additionalProperties: + type: string + type: object + proxy: + properties: + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + publicCertificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: + minLength: 1 + type: string + idleTimeout: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + trace: + properties: + attributes: + additionalProperties: + type: string + type: object + enabled: + default: false + type: boolean + jaeger: + properties: + agent: properties: - prefix: - type: string - volumeSource: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - required: - - volumeSource - type: object - maxStorageObject: - format: int64 - minimum: 0 - type: integer - openstack: - properties: - authenticationURL: - type: string - container: - type: string - domain: - type: string - domainID: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - tenant: - type: string - tenantID: - type: string - userid: - type: string - username: - type: string - required: - - authenticationURL - - container - type: object - type: object - url: - pattern: https?://.* - type: string - required: - - storage - type: object - disable: - properties: - api: - default: false - type: boolean - delete: - default: false - type: boolean - forceOverwrite: - default: false - type: boolean - metrics: - default: false - type: boolean - statefiles: - default: false - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - debug: - default: false - type: boolean - health: - default: false - type: boolean - json: - default: false - type: boolean - latencyInteger: - default: true - type: boolean - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - server: - properties: - corsAllowOrigin: - type: string - maxUploadSize: - default: 20971520 - format: int64 - minimum: 0 - type: integer - readTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - writeTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - chart - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: - properties: - anonymousGet: - default: false - type: boolean - basicAuthRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - bearer: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - realm: - type: string - service: - type: string - required: - - certificateRef - - realm - - service - type: object - type: object - cache: - properties: - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - type: object - certificateRefs: - items: - type: string - type: array - chart: - properties: - allowOverwrite: - default: true - type: boolean - index: - properties: - parallelLimit: - format: int32 - minimum: 0 - type: integer - storageTimestampTolerance: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - onlySemver2: - default: false - type: boolean - postFormFieldName: - properties: - chart: - default: chart - minLength: 1 - type: string - provenance: - default: prov - minLength: 1 - type: string - type: object - repo: - properties: - depth: - default: 1 - format: int32 - minimum: 0 - type: integer - depthDynamic: - default: false - type: boolean - type: object - storage: - properties: - amazon: - properties: - accessKeyID: - type: string - accessSecretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - bucket: - type: string - endpoint: - type: string - prefix: - type: string - region: - type: string - serverSideEncryption: - type: string - required: - - bucket - type: object - azure: - properties: - accountkeyRef: - type: string - accountname: - type: string - baseURL: - default: core.windows.net - type: string - container: - type: string - pathPrefix: - default: /azure/harbor/charts - type: string - type: object - filesystem: - properties: - prefix: - type: string - volumeSource: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - required: - - volumeSource - type: object - gcs: - properties: - bucket: - type: string - chunksize: - type: string - keyDataSecretRef: - type: string - pathPrefix: - type: string - required: - - bucket - - keyDataSecretRef - type: object - maxStorageObject: - format: int64 - minimum: 0 - type: integer - openstack: - properties: - authenticationURL: - type: string - container: - type: string - domain: - type: string - domainID: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - tenant: - type: string - tenantID: - type: string - userid: - type: string - username: - type: string - required: - - authenticationURL - - container - type: object - oss: - properties: - accessKeyID: - type: string - accessSecretRef: - type: string - bucket: - type: string - endpoint: - type: string - pathPrefix: - type: string - required: - - accessKeyID - - accessSecretRef - - bucket - - endpoint - type: object - type: object - url: - pattern: https?://.* - type: string - required: - - storage - type: object - disable: - properties: - api: - default: false - type: boolean - delete: - default: false - type: boolean - forceOverwrite: - default: false - type: boolean - metrics: - default: false - type: boolean - statefiles: - default: false - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - debug: - default: false - type: boolean - health: - default: false - type: boolean - json: - default: false - type: boolean - latencyInteger: - default: true - type: boolean - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - server: - properties: - corsAllowOrigin: - type: string - maxUploadSize: - default: 20971520 - format: int64 - minimum: 0 - type: integer - readTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - writeTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - chart - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: cluster - goharbor.io/operator-version: v1.3.0 - name: cores.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: Core - listKind: CoreList - plural: cores - singular: core - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminInitialPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - authMode: - default: db_auth - enum: - - db_auth - type: string - certificateRefs: - items: - type: string - type: array - components: - properties: - chartRepository: - properties: - absoluteURL: - default: false - type: boolean - cacheDriver: - default: redis - enum: - - redis - type: string - url: - pattern: https?://.+ - type: string - required: - - url - type: object - jobService: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - notaryServer: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - portal: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - storageProviderName: - minLength: 1 - type: string - sync: - default: false - type: boolean - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - certificateRef - - url - type: object - trivy: - properties: - adapterURL: - pattern: https?://.+ - type: string - url: - pattern: https?://.+ - type: string - required: - - adapterURL - - url - type: object - required: - - jobService - - portal - - registry - - tokenService - type: object - configExpiration: - default: 5s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - csrfKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - externalEndpoint: - pattern: https?://.+ - type: string - http: - properties: - enableGzip: - default: true - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - level: - default: info - enum: - - debug - - info - - warn - - error - type: string - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - publicCertificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - adminInitialPasswordRef - - components - - csrfKeyRef - - database - - externalEndpoint - - redis - - secretRef - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminInitialPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - authMode: - default: db_auth - enum: - - db_auth - type: string - certificateRefs: - items: - type: string - type: array - components: - properties: - chartRepository: - properties: - absoluteURL: - default: false - type: boolean - cacheDriver: - default: redis - enum: - - redis - type: string - url: - pattern: https?://.+ - type: string - required: - - url - type: object - jobService: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - notaryServer: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - portal: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - storageProviderName: - minLength: 1 - type: string - sync: - default: false - type: boolean - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - certificateRef - - url - type: object - trivy: - properties: - adapterURL: - pattern: https?://.+ - type: string - url: - pattern: https?://.+ - type: string - required: - - adapterURL - - url - type: object - required: - - jobService - - portal - - registry - - tokenService - type: object - configExpiration: - default: 5s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - csrfKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - externalEndpoint: - pattern: https?://.+ - type: string - http: - properties: - enableGzip: - default: true - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - level: - default: info - enum: - - debug - - info - - warn - - error - type: string - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - publicCertificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: - properties: - agent: - properties: - host: + host: type: string port: type: integer @@ -3914,97 +1649,6 @@ spec: type: object spec: properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object core: properties: certificateRefs: @@ -4291,34 +1935,6 @@ spec: type: string type: object type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object required: - core type: object @@ -5016,180 +2632,6 @@ spec: - error - fatal type: string - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object portal: properties: image: @@ -5843,97 +3285,6 @@ spec: - kind - spec type: object - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object core: properties: certificateRefs: @@ -6312,36 +3663,6 @@ spec: type: string type: object type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object required: - core type: object @@ -6516,180 +3837,6 @@ spec: type: string type: array type: object - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object portal: properties: image: @@ -8303,97 +5450,6 @@ spec: type: object spec: properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object core: properties: certificateRefs: @@ -8680,34 +5736,6 @@ spec: type: string type: object type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object required: - core type: object @@ -8980,180 +6008,6 @@ spec: - error - fatal type: string - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object portal: properties: image: @@ -9700,97 +6554,6 @@ spec: type: object spec: properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object core: properties: certificateRefs: @@ -10091,36 +6854,6 @@ spec: type: string type: object type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object required: - core type: object @@ -10498,180 +7231,6 @@ spec: type: string type: array type: object - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object portal: properties: image: @@ -14416,254 +10975,56 @@ spec: gitRepo: properties: directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array + type: string + repository: + type: string + revision: + type: string + required: + - repository type: object - quobyte: + glusterfs: properties: - group: + endpoints: + type: string + path: type: string readOnly: type: boolean - registry: - type: string - tenant: - type: string - user: + required: + - endpoints + - path + type: object + hostPath: + properties: + path: type: string - volume: + type: type: string required: - - registry - - volume + - path type: object - rbd: + iscsi: properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean fsType: type: string - image: + initiatorName: type: string - keyring: + iqn: type: string - monitors: + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: items: type: string type: array - pool: - type: string readOnly: type: boolean secretRef: @@ -14672,1527 +11033,328 @@ spec: type: string type: object x-kubernetes-map-type: atomic - user: + targetPortal: type: string required: - - image - - monitors + - iqn + - lun + - targetPortal type: object - scaleIO: + nfs: properties: - fsType: - type: string - gateway: - type: string - protectionDomain: + path: type: string readOnly: type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: + server: type: string required: - - gateway - - secretRef - - system + - path + - server type: object - secret: + persistentVolumeClaim: properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: + claimName: type: string + readOnly: + type: boolean + required: + - claimName type: object - storageos: + photonPersistentDisk: properties: fsType: type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: + pdID: type: string + required: + - pdID type: object - vsphereVolume: + portworxVolume: properties: fsType: type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + readOnly: + type: boolean + volumeID: type: string required: - - volumePath + - volumeID type: object - type: object - type: object - nullable: true - type: array - stdout: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - type: object - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - storage: - properties: - scanDataExports: - properties: - prefix: - type: string - volumeSource: - default: - emptyDir: - sizeLimit: 1Gi - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: + configMap: properties: - apiGroup: - type: string - kind: - type: string + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array name: type: string - namespace: - type: string - required: - - kind - - name + optional: + type: boolean type: object - resources: + x-kubernetes-map-type: atomic + downwardAPI: properties: - claims: + items: items: properties: - name: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic required: - - name + - path type: object type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object type: object - selector: + secret: properties: - matchExpressions: + items: items: properties: key: type: string - operator: + mode: + format: int32 + type: integer + path: type: string - values: - items: - type: string - type: array required: - key - - operator + - path type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + name: + type: string + optional: + type: boolean type: object x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + type: array + type: object + quobyte: + properties: + group: type: string - type: array - wwids: - items: + readOnly: + type: boolean + registry: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + tenant: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + user: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + name: + type: string type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + x-kubernetes-map-type: atomic + user: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - type: object - required: - - scanDataExports - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: - properties: - agent: - properties: - host: - type: string - port: - type: integer - type: object - collector: - properties: - endpoint: - type: string - passwordRef: - type: string - username: - type: string - required: - - endpoint - type: object - mode: - enum: - - collector - - agent - type: string - required: - - mode - type: object - namespace: - type: string - otel: - properties: - compression: - type: boolean - endpoint: - type: string - insecure: - type: boolean - timeout: - default: 10s - type: string - urlPath: - type: string - required: - - endpoint - - urlPath - type: object - provider: - enum: - - jaeger - - otel - type: string - sampleRate: - default: 1 - type: integer - required: - - provider - type: object - updateStrategyType: - default: RollingUpdate - type: string - workerPool: - properties: - backend: - default: redis - enum: - - redis - minLength: 1 - type: string - redisPool: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - namespace: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - workers: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - required: - - core - - registry - - secretRef - - tokenService - - workerPool - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: cluster - goharbor.io/operator-version: v1.3.0 - name: notaryservers.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: NotaryServer - listKind: NotaryServerList - plural: notaryservers - singular: notaryserver - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: - properties: - token: - properties: - autoredirect: - default: true - type: boolean - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - issuer: - type: string - realm: - type: string - service: - type: string - required: - - certificateRef - - issuer - - realm - - service - type: object - required: - - token - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic - type: string - type: object - migrationEnabled: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - postgres: - properties: - database: - minLength: 1 - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - type: object - required: - - postgres - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trustService: - properties: - remote: + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + type: object + type: object + nullable: true + type: array + stdout: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - type: string - keyAlgorithm: - default: ecdsa + level: + default: INFO enum: - - ecdsa - - rsa - - ed25519 - type: string - port: - default: 443 - exclusiveMinimum: true - format: int64 - minimum: 0 - type: integer - required: - - host - type: object - type: object - required: - - trustService - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: - properties: - token: - properties: - autoredirect: - default: true - type: boolean - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - issuer: - type: string - realm: - type: string - service: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - required: - - certificateRef - - issuer - - realm - - service type: object - required: - - token type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: + metrics: properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer type: object - migrationEnabled: - type: boolean network: properties: ipFamilies: @@ -16204,285 +11366,47 @@ spec: additionalProperties: type: string type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: + proxy: properties: - claims: + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal items: - properties: - name: - type: string - required: - - name - type: object + type: string type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object type: object - serviceAccountName: - type: string - storage: + registry: properties: - postgres: + controllerURL: + pattern: https?://.+ + type: string + credentials: properties: - database: - minLength: 1 - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object passwordRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string username: - minLength: 1 - type: string - type: object - required: - - postgres - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trustService: - properties: - remote: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - type: string - keyAlgorithm: - default: ecdsa - enum: - - ecdsa - - rsa - - ed25519 type: string - port: - default: 443 - exclusiveMinimum: true - format: int64 - minimum: 0 - type: integer required: - - host + - passwordRef + - username type: object - type: object - required: - - trustService - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: cluster - goharbor.io/operator-version: v1.3.0 - name: notarysigners.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: NotarySigner - listKind: NotarySignerList - plural: notarysigners - singular: notarysigner - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentatication: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + url: + pattern: https?://.+ type: string required: - - certificateRef - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic - type: string - type: object - migrationEnabled: - type: boolean - nodeSelector: - additionalProperties: - type: string + - controllerURL + - credentials + - url type: object replicas: format: int32 @@ -16519,48 +11443,728 @@ spec: x-kubernetes-int-or-string: true type: object type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string serviceAccountName: type: string storage: properties: - aliasesRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - postgres: + scanDataExports: properties: - database: - minLength: 1 + prefix: type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string + volumeSource: + default: + emptyDir: + sizeLimit: 1Gi + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string type: object required: - - aliasesRef - - postgres + - scanDataExports type: object templateAnnotations: additionalProperties: @@ -16570,6 +12174,20 @@ spec: additionalProperties: type: string type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + tokenService: + properties: + url: + pattern: https?://.+ + type: string + required: + - url + type: object tolerations: items: properties: @@ -16586,236 +12204,129 @@ spec: type: string type: object type: array - required: - - authentatication - - storage - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: + trace: properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 + attributes: + additionalProperties: + type: string + type: object + enabled: + default: false + type: boolean + jaeger: + properties: + agent: + properties: + host: + type: string + port: + type: integer + type: object + collector: + properties: + endpoint: + type: string + passwordRef: + type: string + username: + type: string + required: + - endpoint + type: object + mode: + enum: + - collector + - agent + type: string + required: + - mode + type: object + namespace: type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentatication: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + otel: + properties: + compression: + type: boolean + endpoint: + type: string + insecure: + type: boolean + timeout: + default: 10s + type: string + urlPath: + type: string + required: + - endpoint + - urlPath + type: object + provider: + enum: + - jaeger + - otel type: string + sampleRate: + default: 1 + type: integer required: - - certificateRef + - provider type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent + updateStrategyType: + default: RollingUpdate type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: + workerPool: properties: - level: - default: info + backend: + default: redis enum: - - debug - - info - - warning - - error - - fatal - - panic - type: string - type: object - migrationEnabled: - type: boolean - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - aliasesRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + - redis + minLength: 1 type: string - postgres: + redisPool: properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: minLength: 1 type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object + idleTimeout: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + namespace: + type: string passwordRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - username: - minLength: 1 + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: type: string + required: + - host type: object - required: - - aliasesRef - - postgres - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string + workers: + default: 10 + format: int32 + minimum: 1 + type: integer type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array required: - - authentatication - - storage + - core + - registry + - secretRef + - tokenService + - workerPool type: object status: properties: @@ -46043,7 +41554,6 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums verbs: - get - list @@ -46051,12 +41561,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums - cores - exporters - jobservices - - notaryservers - - notarysigners - portals - registries - registrycontrollers @@ -46072,12 +41579,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums/finalizers - cores/finalizers - exporters/finalizers - jobservices/finalizers - - notaryservers/finalizers - - notarysigners/finalizers - portals/finalizers - registries/finalizers - registrycontrollers/finalizers @@ -46092,8 +41596,6 @@ rules: - watch - apiGroups: - goharbor.io - resources: - - chartmuseums/status verbs: - get - patch @@ -46300,32 +41802,24 @@ rules: - update - apiGroups: - goharbor.io - resources: - - notaryservers verbs: - get - list - watch - apiGroups: - goharbor.io - resources: - - notaryservers/status verbs: - get - patch - update - apiGroups: - goharbor.io - resources: - - notarysigners verbs: - get - list - watch - apiGroups: - goharbor.io - resources: - - notarysigners/status verbs: - get - patch @@ -46966,10 +42460,6 @@ subjects: --- apiVersion: v1 data: - chartmuseum-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" config.yaml: | - key: controllers-config-directory priority: 100 @@ -47017,14 +42507,6 @@ data: - key: max-reconcile priority: 200 value: "1" - notaryserver-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" - notarysigner-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" portal-ctrl.yaml: | - key: max-reconcile priority: 200 @@ -47052,84 +42534,6 @@ metadata: --- apiVersion: v1 data: - chartmuseum-config.yaml.tmpl: | - {{- if .Spec.Server.TLS.Enabled }} - port: 8443 - - tls: - ca.cert: /etc/chartmuseum/ssl/ca.crt - cert: /etc/chartmuseum/ssl/tls.crt - key: /etc/chartmuseum/ssl/tls.key - {{- else }} - port: 8080 - {{- end }} - - allow.overwrite: {{ .Spec.Chart.AllowOverwrite }} - - auth: - anonymous.get: {{ .Spec.Authentication.AnonymousGet }} - {{- if .Spec.Authentication.Bearer }} - {{- if .Spec.Authentication.Bearer.CertificateRef }} - cert-path: /etc/chartmuseum/auth-certificates/tls.crt - {{- end }} - {{- if .Spec.Authentication.Bearer.Realm }} - realm: {{ .Spec.Authentication.Bearer.Realm }} - service: {{ .Spec.Authentication.Bearer.Service }} - {{- end }} - {{- end }} - - {{- if .Spec.Authentication.Bearer }} - bearer.auth: 1 - {{- end }} - - {{- if .Spec.Cache.Redis }} - {{- if .Spec.Cache.Redis.SentinelMasterSet }} - cache: redis_sentinel - {{- else }} - cache: redis - {{- end }} - cache.redis: - {{- if .Spec.Cache.Redis.SentinelMasterSet }} - mastername: {{ .Spec.Cache.Redis.SentinelMasterSet | quote }} - {{- end }} - {{- if .Spec.Cache.Redis.Port }} - addr: {{ printf "%s:%d" .Spec.Cache.Redis.Host .Spec.Cache.Redis.Port | quote }} - {{- else }} - addr: {{ .Spec.Cache.Redis.Host | quote }} - {{- end }} - # password: setted through environment variable - db: {{ .Spec.Cache.Redis.Database }} - {{- end }} - - context.path: '' - - debug: {{ .Spec.Log.Debug }} - - {{- if .Spec.Chart.Repo.DepthDynamic }} - depth.dynamic: {{ .Spec.Chart.Repo.DepthDynamic }} - {{- else }} - depth: {{ .Spec.Chart.Repo.Depth }} - {{- end }} - - disable: - api: {{ .Spec.Disable.API }} - delete: {{ .Spec.Disable.Delete }} - force.overwrite: {{ .Spec.Disable.ForceOverwrite }} - metrics: {{ .Spec.Disable.Metrics }} - statefiles: {{ .Spec.Disable.StateFiles }} - - index.limit: {{ .Spec.Chart.Index.ParallelLimit }} - - log: - health: {{ .Spec.Log.Health }} - json: {{ .Spec.Log.JSON }} - - max: - storage.objects: {{ .Spec.Chart.Storage.MaxStorageObjects }} - upload.size: {{ .Spec.Server.MaxUploadSize }} - - chart.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Chart }} - prov.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Provenance }} core-config.conf.tmpl: | appname = {{ .Name }} runmode = prod @@ -47218,91 +42622,6 @@ data: settings: # Customized settings of sweeper work_dir: /mnt/logs/{{ $i }} {{- end }} - notaryserver-config.json.tmpl: | - {{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} - { - "server": { - {{- if .Spec.TLS }} - "tls_cert_file": "/etc/notary-server/certificates/tls.crt", - "tls_key_file": "/etc/notary-server/certificates/tls.key", - {{- end }} - "http_addr": ":4443" - }, - "trust_service": { - {{- if .Spec.TrustService.Remote }} - {{- if .Spec.TrustService.Remote.Host }} - "hostname": "{{ .Spec.TrustService.Remote.Host }}", - {{- end }} - {{- if .Spec.TrustService.Remote.Port }} - "port": "{{ .Spec.TrustService.Remote.Port }}", - {{- end }} - {{- if .Spec.TrustService.Remote.CertificateRef }} - "tls_ca_file": "/etc/notary-server/trust-certificates/ca.crt", - "tls_client_cert": "/etc/notary-server/trust-certificates/tls.crt", - "tls_client_key": "/etc/notary-server/trust-certificates/tls.key", - {{- end }} - {{- if .Spec.TrustService.Remote.KeyAlgorithm }} - "key_algorithm": "{{ .Spec.TrustService.Remote.KeyAlgorithm }}", - {{- end }} - "type": "remote" - {{- else }} - "type": "local" - {{- end }} - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}" - }, - {{- if .Spec.Authentication }} - "auth": { - "type": "token", - "options": { - "realm": "{{ .Spec.Authentication.Token.Realm }}", - "service": "{{ .Spec.Authentication.Token.Service }}", - "issuer": "{{ .Spec.Authentication.Token.Issuer }}", - "rootcertbundle": "/etc/notary-server/auth-certificates/tls.crt", - "autoredirect": "{{ .Spec.Authentication.Token.AutoRedirect }}" - } - }, - {{- end }} - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } - } - notarysigner-config.json.tmpl: | - {{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} - { - "server": { - "tls_cert_file": "/etc/notary-signer/certificates/tls.crt", - "tls_key_file": "/etc/notary-signer/certificates/tls.key", - "client_ca_file": "/etc/notary-signer/certificates/ca.crt", - "grpc_addr": ":7899" - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}", - "default_alias": "default" - }, - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } - } portal-config.conf.tmpl: | worker_processes auto; pid /tmp/nginx.pid; diff --git a/manifests/harbor/deployment.yaml b/manifests/harbor/deployment.yaml index 3693ca4d2..cbfd300b1 100644 --- a/manifests/harbor/deployment.yaml +++ b/manifests/harbor/deployment.yaml @@ -16,7 +16,7 @@ metadata: goharbor.io/deploy-engine: Kustomization goharbor.io/deploy-mode: harbor goharbor.io/operator-version: v1.3.0 - name: chartmuseums.goharbor.io + name: harborclusters.goharbor.io spec: conversion: strategy: Webhook @@ -31,27 +31,34 @@ spec: - v1 group: goharbor.io names: - categories: - - goharbor - kind: ChartMuseum - listKind: ChartMuseumList - plural: chartmuseums - singular: chartmuseum + kind: HarborCluster + listKind: HarborClusterList + plural: harborclusters + singular: harborcluster scope: Namespaced versions: - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 + - description: The public URL to the Harbor application + jsonPath: .spec.externalURL + name: Public URL + type: string + - description: The version to the Harbor application + jsonPath: .spec.version + name: Version + type: string + - description: The overall status of the Harbor cluster + jsonPath: .status.status + name: Status + type: string + - description: 'The operator version ' + jsonPath: .status.operator.controllerVersion + name: Operator Version + priority: 30 + type: string + - description: The operator git commit + jsonPath: .status.operator.controllerGitCommit + name: Operator Git Commit + priority: 30 type: string name: v1alpha3 schema: @@ -65,14710 +72,6392 @@ spec: type: object spec: properties: - authentication: + core: properties: - anonymousGet: - default: false - type: boolean - basicAuthRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + certificateRefs: + items: + type: string + type: array + image: type: string - bearer: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - realm: - type: string - service: - type: string - required: - - certificateRef - - realm - - service - type: object - type: object - cache: - properties: - redis: + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ type: string - database: - default: 0 + port: + default: 8001 format: int32 - maximum: 8 - minimum: 0 + minimum: 1 type: integer - host: - minLength: 1 + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tokenIssuer: + properties: + group: type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + kind: type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: + name: type: string required: - - host + - name type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array type: object - certificateRefs: - items: - type: string - type: array - chart: + database: properties: - allowOverwrite: - default: true - type: boolean - index: - properties: - parallelLimit: - format: int32 - minimum: 0 - type: integer - storageTimestampTolerance: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - onlySemver2: - default: false - type: boolean - postFormFieldName: + hosts: + items: + properties: + host: + minLength: 1 + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + required: + - host + type: object + minItems: 1 + type: array + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + sslMode: + enum: + - disable + - allow + - prefer + - require + - verify-ca + - verify-full + type: string + username: + minLength: 1 + type: string + required: + - hosts + type: object + exporter: + properties: + cache: properties: - chart: - default: chart - minLength: 1 + cleanInterval: + default: 4h + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? type: string - provenance: - default: prov - minLength: 1 + duration: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? type: string type: object - repo: - properties: - depth: - default: 1 - format: int32 - minimum: 0 - type: integer - depthDynamic: - default: false - type: boolean - type: object - storage: - properties: - amazon: - properties: - accessKeyID: - type: string - accessSecretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - bucket: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + expose: + properties: + core: + properties: + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour type: string - endpoint: + host: type: string - prefix: + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - region: + type: object + type: object + required: + - core + type: object + externalURL: + pattern: https?://.* + type: string + harborAdminPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + imageChartStorage: + properties: + filesystem: + properties: + chartPersistentVolume: + properties: + claimName: type: string - serverSideEncryption: + prefix: type: string + readOnly: + type: boolean required: - - bucket + - claimName type: object - filesystem: + registryPersistentVolume: properties: + claimName: + type: string + maxthreads: + default: 100 + format: int32 + minimum: 25 + type: integer prefix: type: string - volumeSource: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + readOnly: + type: boolean + required: + - claimName + type: object + required: + - registryPersistentVolume + type: object + redirect: + properties: + disable: + default: false + type: boolean + type: object + s3: + properties: + accesskey: + type: string + bucket: + type: string + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + keyid: + type: string + region: + type: string + regionendpoint: + type: string + rootdirectory: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + secure: + default: true + type: boolean + skipverify: + default: false + type: boolean + storageclass: + default: STANDARD + type: string + v4auth: + default: true + type: boolean + required: + - bucket + - region + type: object + swift: + properties: + accesskey: + type: string + authurl: + type: string + authversion: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + container: + type: string + domain: + type: string + domainID: + type: string + endpointtype: + default: public + enum: + - public + - internal + - admin + type: string + insecureskipverify: + default: false + type: boolean + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + region: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + tenant: + type: string + tenantID: + type: string + trustid: + type: string + username: + type: string + required: + - authurl + - container + type: object + type: object + imageSource: + properties: + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + repository: + type: string + tagSuffix: + type: string + type: object + inClusterCache: + properties: + kind: + enum: + - Redis + type: string + redisSpec: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + sentinel: + properties: + replicas: + default: 1 + type: integer + type: object + server: + properties: + replicas: + default: 1 + type: integer + resources: + properties: + claims: + items: + properties: + name: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - emptyDir: + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + storage: + type: string + storageClassName: + type: string + type: object + type: object + required: + - kind + - redisSpec + type: object + inClusterDatabase: + properties: + kind: + enum: + - PostgresSQL + type: string + postgresSqlSpec: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + replicas: + minimum: 1 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + storage: + type: string + storageClassName: + type: string + type: object + required: + - kind + - postgresSqlSpec + type: object + inClusterStorage: + properties: + kind: + enum: + - MinIO + type: string + minIOSpec: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + mc: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + type: object + redirect: + properties: + enable: + default: true + type: boolean + expose: + properties: + ingress: properties: - medium: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + host: + type: string + required: + - host type: object - ephemeral: + tls: properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - readOnly: - type: boolean - required: - - pdName type: object - gitRepo: + type: object + required: + - enable + type: object + replicas: + format: int32 + minimum: 1 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - directory: + apiGroup: type: string - repository: + kind: type: string - revision: + name: type: string required: - - repository + - kind + - name type: object - glusterfs: + x-kubernetes-map-type: atomic + dataSourceRef: properties: - endpoints: + apiGroup: type: string - path: + kind: type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: + name: type: string - type: + namespace: type: string required: - - path + - kind + - name type: object - iscsi: + resources: properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: + claims: items: - type: string + properties: + name: + type: string + required: + - name + type: object type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server type: object - persistentVolumeClaim: + selector: properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + conditions: + items: + properties: + lastProbeTime: + format: date-time type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: + type: string + resizeStatus: + type: string type: object - required: - - volumeSource type: object - maxStorageObject: - format: int64 - minimum: 0 + volumesPerServer: + format: int32 + minimum: 1 type: integer - openstack: - properties: - authenticationURL: - type: string - container: - type: string - domain: - type: string - domainID: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - tenant: - type: string - tenantID: - type: string - userid: - type: string - username: - type: string - required: - - authenticationURL - - container - type: object + required: + - redirect + - replicas + - volumesPerServer type: object - url: - pattern: https?://.* - type: string required: - - storage - type: object - disable: - properties: - api: - default: false - type: boolean - delete: - default: false - type: boolean - forceOverwrite: - default: false - type: boolean - metrics: - default: false - type: boolean - statefiles: - default: false - type: boolean + - kind type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: + internalTLS: properties: - debug: - default: false - type: boolean - health: - default: false - type: boolean - json: + enabled: default: false type: boolean - latencyInteger: - default: true - type: boolean - type: object - nodeSelector: - additionalProperties: - type: string type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: + jobservice: properties: - claims: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: items: properties: name: type: string - required: - - name type: object + x-kubernetes-map-type: atomic type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: + nodeSelector: additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true + type: string type: object - type: object - server: - properties: - corsAllowOrigin: - type: string - maxUploadSize: - default: 20971520 - format: int64 + replicas: + format: int32 minimum: 0 type: integer - readTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - tls: + resources: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object type: object - writeTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + serviceAccountName: type: string - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: + templateAnnotations: + additionalProperties: type: string - tolerationSeconds: - format: int64 - type: integer - value: + type: object + templateLabels: + additionalProperties: type: string - type: object - type: array - required: - - chart - type: object - status: - properties: - conditions: - items: - properties: - message: + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + workerCount: + default: 10 + format: int32 + minimum: 1 + type: integer + type: object + logLevel: + default: info + enum: + - debug + - info + - warning + - error + - fatal + type: string + portal: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: type: string - reason: + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: type: string - status: + type: object + templateLabels: + additionalProperties: type: string - type: + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + proxy: + properties: + components: + default: + - core + - jobservice + - trivy + items: type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: + type: array + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + redis: properties: - controllerGitCommit: - minLength: 1 + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string - controllerName: + host: minLength: 1 type: string - controllerVersion: - minLength: 1 + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: type: string + required: + - host type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: + registry: properties: - anonymousGet: - default: false - type: boolean - basicAuthRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent type: string - bearer: + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - realm: - type: string - service: - type: string - required: - - certificateRef - - realm - - service - type: object - type: object - cache: - properties: - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ type: string port: - exclusiveMinimum: true + default: 8001 format: int32 - minimum: 0 + minimum: 1 type: integer - sentinelMasterSet: - type: string - required: - - host type: object - type: object - certificateRefs: - items: - type: string - type: array - chart: - properties: - allowOverwrite: + nodeSelector: + additionalProperties: + type: string + type: object + relativeURLs: default: true type: boolean - index: + replicas: + format: int32 + minimum: 0 + type: integer + resources: properties: - parallelLimit: - format: int32 - minimum: 0 - type: integer - storageTimestampTolerance: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object type: object - onlySemver2: - default: false - type: boolean - postFormFieldName: - properties: - chart: - default: chart - minLength: 1 - type: string - provenance: - default: prov - minLength: 1 - type: string + serviceAccountName: + type: string + storageMiddlewares: + items: + properties: + name: + type: string + optionsRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + required: + - name + type: object + type: array + templateAnnotations: + additionalProperties: + type: string type: object - repo: - properties: - depth: - default: 1 - format: int32 - minimum: 0 - type: integer - depthDynamic: - default: false - type: boolean + templateLabels: + additionalProperties: + type: string type: object - storage: + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + registryctl: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: properties: - amazon: - properties: - accessKeyID: - type: string - accessSecretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - bucket: - type: string - endpoint: - type: string - prefix: - type: string - region: - type: string - serverSideEncryption: - type: string - required: - - bucket + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - azure: - properties: - accountkeyRef: - type: string - accountname: - type: string - baseURL: - default: core.windows.net - type: string - container: - type: string - pathPrefix: - default: /azure/harbor/charts - type: string + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - filesystem: - properties: - prefix: - type: string - volumeSource: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - required: - - volumeSource - type: object - gcs: - properties: - bucket: - type: string - chunksize: - type: string - keyDataSecretRef: - type: string - pathPrefix: - type: string - required: - - bucket - - keyDataSecretRef - type: object - maxStorageObject: - format: int64 - minimum: 0 - type: integer - openstack: - properties: - authenticationURL: - type: string - container: - type: string - domain: - type: string - domainID: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - tenant: - type: string - tenantID: - type: string - userid: - type: string - username: - type: string - required: - - authenticationURL - - container - type: object - oss: - properties: - accessKeyID: - type: string - accessSecretRef: - type: string - bucket: - type: string - endpoint: - type: string - pathPrefix: - type: string - required: - - accessKeyID - - accessSecretRef - - bucket - - endpoint - type: object - type: object - url: - pattern: https?://.* - type: string - required: - - storage - type: object - disable: - properties: - api: - default: false - type: boolean - delete: - default: false - type: boolean - forceOverwrite: - default: false - type: boolean - metrics: - default: false - type: boolean - statefiles: - default: false - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - debug: - default: false - type: boolean - health: - default: false - type: boolean - json: - default: false - type: boolean - latencyInteger: - default: true - type: boolean - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - server: - properties: - corsAllowOrigin: - type: string - maxUploadSize: - default: 20971520 - format: int64 - minimum: 0 - type: integer - readTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - writeTimeout: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - chart - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: cores.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: Core - listKind: CoreList - plural: cores - singular: core - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminInitialPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - authMode: - default: db_auth - enum: - - db_auth - type: string - certificateRefs: - items: - type: string - type: array - components: - properties: - chartRepository: - properties: - absoluteURL: - default: false - type: boolean - cacheDriver: - default: redis - enum: - - redis - type: string - url: - pattern: https?://.+ - type: string - required: - - url - type: object - jobService: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - notaryServer: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - portal: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - storageProviderName: - minLength: 1 - type: string - sync: - default: false - type: boolean - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - certificateRef - - url - type: object - trivy: - properties: - adapterURL: - pattern: https?://.+ - type: string - url: - pattern: https?://.+ - type: string - required: - - adapterURL - - url - type: object - required: - - jobService - - portal - - registry - - tokenService - type: object - configExpiration: - default: 5s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - csrfKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - externalEndpoint: - pattern: https?://.+ - type: string - http: - properties: - enableGzip: - default: true - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - level: - default: info - enum: - - debug - - info - - warn - - error - type: string - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - publicCertificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - adminInitialPasswordRef - - components - - csrfKeyRef - - database - - externalEndpoint - - redis - - secretRef - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminInitialPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - authMode: - default: db_auth - enum: - - db_auth - type: string - certificateRefs: - items: - type: string - type: array - components: - properties: - chartRepository: - properties: - absoluteURL: - default: false - type: boolean - cacheDriver: - default: redis - enum: - - redis - type: string - url: - pattern: https?://.+ - type: string - required: - - url - type: object - jobService: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - notaryServer: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - portal: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - storageProviderName: - minLength: 1 - type: string - sync: - default: false - type: boolean - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - certificateRef - - url - type: object - trivy: - properties: - adapterURL: - pattern: https?://.+ - type: string - url: - pattern: https?://.+ - type: string - required: - - adapterURL - - url - type: object - required: - - jobService - - portal - - registry - - tokenService - type: object - configExpiration: - default: 5s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - csrfKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - externalEndpoint: - pattern: https?://.+ - type: string - http: - properties: - enableGzip: - default: true - type: boolean - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - level: - default: info - enum: - - debug - - info - - warn - - error - type: string - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - publicCertificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: - properties: - agent: - properties: - host: - type: string - port: - type: integer - type: object - collector: - properties: - endpoint: - type: string - passwordRef: - type: string - username: - type: string - required: - - endpoint - type: object - mode: - enum: - - collector - - agent - type: string - required: - - mode - type: object - namespace: - type: string - otel: - properties: - compression: - type: boolean - endpoint: - type: string - insecure: - type: boolean - timeout: - default: 10s - type: string - urlPath: - type: string - required: - - endpoint - - urlPath - type: object - provider: - enum: - - jaeger - - otel - type: string - sampleRate: - default: 1 - type: integer - required: - - provider - type: object - required: - - adminInitialPasswordRef - - components - - csrfKeyRef - - database - - externalEndpoint - - redis - - secretRef - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: exporters.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: Exporter - listKind: ExporterList - plural: exporters - singular: exporter - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - core: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - log: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - panic - type: string - type: object - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - core - - database - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - core: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - database: - properties: - database: - minLength: 1 - type: string - encryptionKeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - required: - - encryptionKeyRef - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - jobservice: - properties: - redisPool: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - namespace: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - type: object - log: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - panic - type: string - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - core - - database - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: harborclusters.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - kind: HarborCluster - listKind: HarborClusterList - plural: harborclusters - singular: harborcluster - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The public URL to the Harbor application - jsonPath: .spec.externalURL - name: Public URL - type: string - - description: The version to the Harbor application - jsonPath: .spec.version - name: Version - type: string - - description: The overall status of the Harbor cluster - jsonPath: .status.status - name: Status - type: string - - description: 'The operator version ' - jsonPath: .status.operator.controllerVersion - name: Operator Version - priority: 30 - type: string - - description: The operator git commit - jsonPath: .status.operator.controllerGitCommit - name: Operator Git Commit - priority: 30 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - core: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tokenIssuer: - properties: - group: - type: string - kind: - type: string - name: - type: string - required: - - name - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - database: - properties: - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - sslMode: - enum: - - disable - - allow - - prefer - - require - - verify-ca - - verify-full - type: string - username: - minLength: 1 - type: string - required: - - hosts - type: object - exporter: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - expose: - properties: - core: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - core - type: object - externalURL: - pattern: https?://.* - type: string - harborAdminPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - imageChartStorage: - properties: - filesystem: - properties: - chartPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - registryPersistentVolume: - properties: - claimName: - type: string - maxthreads: - default: 100 - format: int32 - minimum: 25 - type: integer - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - required: - - registryPersistentVolume - type: object - redirect: - properties: - disable: - default: false - type: boolean - type: object - s3: - properties: - accesskey: - type: string - bucket: - type: string - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - keyid: - type: string - region: - type: string - regionendpoint: - type: string - rootdirectory: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - secure: - default: true - type: boolean - skipverify: - default: false - type: boolean - storageclass: - default: STANDARD - type: string - v4auth: - default: true - type: boolean - required: - - bucket - - region - type: object - swift: - properties: - accesskey: - type: string - authurl: - type: string - authversion: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - container: - type: string - domain: - type: string - domainID: - type: string - endpointtype: - default: public - enum: - - public - - internal - - admin - type: string - insecureskipverify: - default: false - type: boolean - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - tenant: - type: string - tenantID: - type: string - trustid: - type: string - username: - type: string - required: - - authurl - - container - type: object - type: object - imageSource: - properties: - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - repository: - type: string - tagSuffix: - type: string - type: object - inClusterCache: - properties: - kind: - enum: - - Redis - type: string - redisSpec: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - sentinel: - properties: - replicas: - default: 1 - type: integer - type: object - server: - properties: - replicas: - default: 1 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storage: - type: string - storageClassName: - type: string - type: object - type: object - required: - - kind - - redisSpec - type: object - inClusterDatabase: - properties: - kind: - enum: - - PostgresSQL - type: string - postgresSqlSpec: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - replicas: - minimum: 1 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storage: - type: string - storageClassName: - type: string - type: object - required: - - kind - - postgresSqlSpec - type: object - inClusterStorage: - properties: - kind: - enum: - - MinIO - type: string - minIOSpec: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - mc: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - type: object - redirect: - properties: - enable: - default: true - type: boolean - expose: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - enable - type: object - replicas: - format: int32 - minimum: 1 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - volumeClaimTemplate: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResources: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - resizeStatus: - type: string - type: object - type: object - volumesPerServer: - format: int32 - minimum: 1 - type: integer - required: - - redirect - - replicas - - volumesPerServer - type: object - required: - - kind - type: object - internalTLS: - properties: - enabled: - default: false - type: boolean - type: object - jobservice: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - workerCount: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - logLevel: - default: info - enum: - - debug - - info - - warning - - error - - fatal - type: string - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object - portal: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - proxy: - properties: - components: - default: - - core - - jobservice - - trivy - items: - type: string - type: array - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - registry: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - relativeURLs: - default: true - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storageMiddlewares: - items: - properties: - name: - type: string - optionsRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - name - type: object - type: array - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - registryctl: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - trivy: - properties: - certificateRefs: - items: - type: string - type: array - githubTokenRef: - type: string - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - skipUpdate: - default: false - type: boolean - storage: - properties: - cachePersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - reportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - storage - type: object - updateStrategyType: - default: RollingUpdate - type: string - version: - pattern: '[0-9]+\.[0-9]+\.[0-9]+' - type: string - required: - - expose - - externalURL - - harborAdminPasswordRef - - version - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - revision: - format: int64 - type: integer - status: - type: string - required: - - revision - - status - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: The public URL to the Harbor application - jsonPath: .spec.externalURL - name: Public URL - type: string - - description: The overall status of the Harbor cluster - jsonPath: .status.status - name: Status - type: string - - description: 'The operator version ' - jsonPath: .status.operator.controllerVersion - name: Operator Version - priority: 30 - type: string - - description: The operator git commit - jsonPath: .status.operator.controllerGitCommit - name: Operator Git Commit - priority: 30 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - cache: - properties: - kind: - enum: - - Redis - - RedisFailover - type: string - spec: - properties: - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - redisFailover: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - operatorVersion: - type: string - sentinel: - properties: - replicas: - default: 1 - type: integer - type: object - server: - properties: - replicas: - default: 1 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - type: string - storageClassName: - type: string - type: object - required: - - operatorVersion - type: object - type: object - required: - - kind - - spec - type: object - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - core: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tokenIssuer: - properties: - group: - type: string - kind: - type: string - name: - type: string - required: - - name - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - tokenIssuer - type: object - database: - properties: - kind: - enum: - - PostgreSQL - - Zlando/PostgreSQL - type: string - spec: - properties: - postgresql: - properties: - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - sslMode: - enum: - - disable - - allow - - prefer - - require - - verify-ca - - verify-full - type: string - username: - minLength: 1 - type: string - required: - - hosts - type: object - zlandoPostgreSql: - properties: - connectTimeout: - type: integer - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - operatorVersion: - type: string - replicas: - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - sslConfig: - type: string - storage: - type: string - storageClassName: - type: string - required: - - operatorVersion - type: object - type: object - required: - - kind - - spec - type: object - exporter: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - expose: - properties: - core: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - core - type: object - externalURL: - pattern: https?://.* - type: string - harborAdminPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - imageSource: - properties: - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - repository: - type: string - tagSuffix: - type: string - type: object - internalTLS: - properties: - enabled: - default: false - type: boolean - type: object - jobservice: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - scanDataExportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - workerCount: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - logLevel: - default: info - enum: - - debug - - info - - warning - - error - - fatal - type: string - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object - portal: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - proxy: - properties: - components: - default: - - core - - jobservice - - trivy - items: - type: string - type: array - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - registry: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - relativeURLs: - default: true - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storageMiddlewares: - items: - properties: - name: - type: string - optionsRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - name - type: object - type: array - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - registryctl: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - storage: - properties: - kind: - enum: - - MinIO - - S3 - - Swift - - FileSystem - - Azure - - Gcs - - Oss - type: string - spec: - properties: - azure: - properties: - accountkeyRef: - type: string - accountname: - type: string - baseURL: - default: core.windows.net - type: string - container: - type: string - pathPrefix: - default: /azure/harbor/charts - type: string - type: object - fileSystem: - properties: - chartPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - registryPersistentVolume: - properties: - claimName: - type: string - maxthreads: - default: 100 - format: int32 - minimum: 25 - type: integer - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - required: - - registryPersistentVolume - type: object - gcs: - properties: - bucket: - type: string - chunkSize: - type: string - keyDataRef: - type: string - pathPrefix: - type: string - type: object - minIO: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - mc: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - type: object - operatorVersion: - default: 4.0.6 - type: string - redirect: - properties: - enable: - default: true - type: boolean - expose: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - enable - type: object - replicas: - format: int32 - minimum: 1 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - volumeClaimTemplate: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResources: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - capacity: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - phase: - type: string - resizeStatus: - type: string - type: object - type: object - volumesPerServer: - format: int32 - minimum: 1 - type: integer - required: - - operatorVersion - - replicas - - volumesPerServer - type: object - oss: - properties: - accessKeyID: - type: string - accessSecretRef: - type: string - bucket: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - endpoint: - type: string - internal: - default: false - type: boolean - pathPrefix: - type: string - region: - pattern: oss-.* - type: string - secure: - default: true - type: boolean - required: - - accessKeyID - - accessSecretRef - - bucket - - region - type: object - redirect: - properties: - enable: - default: true - type: boolean - expose: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - enable - type: object - s3: - properties: - accesskey: - type: string - bucket: - type: string - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - keyid: - type: string - multipartcopychunksize: - format: int64 - type: integer - multipartcopymaxconcurrency: - format: int64 - type: integer - multipartcopythresholdsize: - format: int64 - type: integer - region: - type: string - regionendpoint: - type: string - rootdirectory: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - secure: - default: true - type: boolean - skipverify: - default: false - type: boolean - storageclass: - default: STANDARD - type: string - v4auth: - default: true - type: boolean - required: - - bucket - - region - type: object - swift: - properties: - accesskey: - type: string - authurl: - type: string - authversion: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - container: - type: string - domain: - type: string - domainID: - type: string - endpointtype: - default: public - enum: - - public - - internal - - admin - type: string - insecureskipverify: - default: false - type: boolean - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - tenant: - type: string - tenantID: - type: string - trustid: - type: string - username: - type: string - required: - - authurl - - container - type: object - type: object - required: - - kind - - spec - type: object - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: - properties: - agent: - properties: - host: - type: string - port: - type: integer - type: object - collector: - properties: - endpoint: - type: string - passwordRef: - type: string - username: - type: string - required: - - endpoint - type: object - mode: - enum: - - collector - - agent - type: string - required: - - mode - type: object - namespace: - type: string - otel: - properties: - compression: - type: boolean - endpoint: - type: string - insecure: - type: boolean - timeout: - default: 10s - type: string - urlPath: - type: string - required: - - endpoint - - urlPath - type: object - provider: - enum: - - jaeger - - otel - type: string - sampleRate: - default: 1 - type: integer - required: - - provider - type: object - trivy: - properties: - certificateRefs: - items: - type: string - type: array - githubTokenRef: - type: string - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - offlineScan: - default: false - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - skipUpdate: - default: false - type: boolean - storage: - properties: - cachePersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - reportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - storage - type: object - updateStrategyType: - default: RollingUpdate - type: string - version: - pattern: '[0-9]+\.[0-9]+\.[0-9]+' - type: string - required: - - cache - - database - - expose - - externalURL - - harborAdminPasswordRef - - storage - - version - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - revision: - format: int64 - type: integer - status: - type: string - required: - - revision - - status - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: harborconfigurations.goharbor.io -spec: - group: goharbor.io - names: - categories: - - goharbor - kind: HarborConfiguration - listKind: HarborConfigurationList - plural: harborconfigurations - shortNames: - - hc - singular: harborconfiguration - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: HarborCluster name - jsonPath: .spec.harborClusterRef - name: HarborCluster - type: string - - description: HarborConfiguration status - jsonPath: .status.status - name: Status - type: string - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - configuration: - properties: - authMode: - type: string - emailFrom: - type: string - emailHost: - type: string - emailIdentity: - type: string - emailInsecure: - type: boolean - emailPassword: - type: string - emailPort: - type: integer - emailSsl: - type: boolean - emailUsername: - type: string - httpAuthproxyAdminGroups: - type: string - httpAuthproxyAdminUsernames: - type: string - httpAuthproxyEndpoint: - type: string - httpAuthproxyServerCertificate: - type: boolean - httpAuthproxySkipSearch: - type: boolean - httpAuthproxyTokenreviewEndpoint: - type: string - httpAuthproxyVerifyCert: - type: boolean - ldapBaseDn: - type: string - ldapFilter: - type: string - ldapGroupAdminDn: - type: string - ldapGroupAttributeName: - type: string - ldapGroupBaseDn: - type: string - ldapGroupMembershipAttribute: - type: string - ldapGroupSearchFilter: - type: string - ldapGroupSearchScope: - type: integer - ldapScope: - type: integer - ldapSearchDn: - type: string - ldapSearchPassword: - type: string - ldapTimeout: - type: integer - ldapUid: - type: string - ldapUrl: - type: string - ldapVerifyCert: - type: boolean - notificationEnable: - type: boolean - oidcAdminGroup: - type: string - oidcAutoOnboard: - type: boolean - oidcClientId: - type: string - oidcClientSecret: - type: string - oidcEndpoint: - type: string - oidcExtraRedirectParms: - type: string - oidcGroupsClaim: - type: string - oidcName: - type: string - oidcScope: - type: string - oidcUserClaim: - type: string - oidcVerifyCert: - type: boolean - projectCreationRestriction: - type: string - quotaPerProjectEnable: - type: boolean - readOnly: - type: boolean - robotNamePrefix: - type: string - robotTokenDuration: - type: integer - selfRegistration: - type: boolean - storagePerProject: - type: integer - tokenExpiration: - type: integer - uaaClientId: - type: string - uaaClientSecret: - type: string - uaaEndpoint: - type: string - uaaVerifyCert: - type: boolean - type: object - harborClusterRef: - type: string - type: object - status: - properties: - lastApplyTime: - format: date-time - type: string - lastConfiguration: - properties: - configuration: - properties: - authMode: - type: string - emailFrom: - type: string - emailHost: - type: string - emailIdentity: - type: string - emailInsecure: - type: boolean - emailPassword: - type: string - emailPort: - type: integer - emailSsl: - type: boolean - emailUsername: - type: string - httpAuthproxyAdminGroups: - type: string - httpAuthproxyAdminUsernames: - type: string - httpAuthproxyEndpoint: - type: string - httpAuthproxyServerCertificate: - type: boolean - httpAuthproxySkipSearch: - type: boolean - httpAuthproxyTokenreviewEndpoint: - type: string - httpAuthproxyVerifyCert: - type: boolean - ldapBaseDn: - type: string - ldapFilter: - type: string - ldapGroupAdminDn: - type: string - ldapGroupAttributeName: - type: string - ldapGroupBaseDn: - type: string - ldapGroupMembershipAttribute: - type: string - ldapGroupSearchFilter: - type: string - ldapGroupSearchScope: - type: integer - ldapScope: - type: integer - ldapSearchDn: - type: string - ldapSearchPassword: - type: string - ldapTimeout: - type: integer - ldapUid: - type: string - ldapUrl: - type: string - ldapVerifyCert: - type: boolean - notificationEnable: - type: boolean - oidcAdminGroup: - type: string - oidcAutoOnboard: - type: boolean - oidcClientId: - type: string - oidcClientSecret: - type: string - oidcEndpoint: - type: string - oidcExtraRedirectParms: - type: string - oidcGroupsClaim: - type: string - oidcName: - type: string - oidcScope: - type: string - oidcUserClaim: - type: string - oidcVerifyCert: - type: boolean - projectCreationRestriction: - type: string - quotaPerProjectEnable: - type: boolean - readOnly: - type: boolean - robotNamePrefix: - type: string - robotTokenDuration: - type: integer - selfRegistration: - type: boolean - storagePerProject: - type: integer - tokenExpiration: - type: integer - uaaClientId: - type: string - uaaClientSecret: - type: string - uaaEndpoint: - type: string - uaaVerifyCert: - type: boolean - type: object - harborClusterRef: - type: string - type: object - message: - type: string - reason: - type: string - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: harborprojects.goharbor.io -spec: - group: goharbor.io - names: - categories: - - goharbor - kind: HarborProject - listKind: HarborProjectList - plural: harborprojects - shortNames: - - hp - singular: harborproject - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Project name in Harbor - jsonPath: .spec.projectName - name: ProjectName - type: string - - description: HarborServerConfiguration name - jsonPath: .spec.harborServerConfig - name: HarborServerConfig - type: string - - description: HarborProject status - jsonPath: .status.status - name: Status - type: string - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - cveAllowList: - items: - type: string - type: array - harborServerConfig: - type: string - memberships: - items: - properties: - name: - type: string - role: - enum: - - projectAdmin - - developer - - guest - - maintainer - type: string - type: - enum: - - group - - user - type: string - required: - - name - - role - - type - type: object - type: array - metadata: - properties: - autoScan: - type: boolean - enableContentTrust: - type: boolean - enableContentTrustCosign: - type: boolean - preventVulnerable: - type: boolean - public: - type: boolean - reuseSysCveAllowlist: - type: boolean - severity: - enum: - - none - - low - - medium - - high - - critical - type: string - type: object - projectName: - maxLength: 255 - minLength: 1 - pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$ - type: string - storageQuota: - pattern: ^[1-9][0-9]*(Ti|Gi|Mi|Ki)$ - type: string - required: - - harborServerConfig - - projectName - type: object - status: - properties: - lastApplyTime: - format: date-time - type: string - membershipHash: - type: string - message: - type: string - projectID: - format: int32 - type: integer - quotaID: - format: int64 - type: integer - reason: - type: string - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: harbors.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: Harbor - listKind: HarborList - plural: harbors - shortNames: - - h - singular: harbor - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The public URL to the Harbor application - jsonPath: .spec.externalURL - name: Public URL - priority: 5 - type: string - - description: The version to the Harbor application - jsonPath: .spec.version - name: Version - priority: 5 - type: string - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - core: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tokenIssuer: - properties: - group: - type: string - kind: - type: string - name: - type: string - required: - - name - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - database: - properties: - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - sslMode: - enum: - - disable - - allow - - prefer - - require - - verify-ca - - verify-full - type: string - username: - minLength: 1 - type: string - required: - - hosts - type: object - exporter: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - expose: - properties: - core: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - core - type: object - externalURL: - pattern: https?://.* - type: string - harborAdminPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - imageChartStorage: - properties: - filesystem: - properties: - chartPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - registryPersistentVolume: - properties: - claimName: - type: string - maxthreads: - default: 100 - format: int32 - minimum: 25 - type: integer - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - required: - - registryPersistentVolume - type: object - redirect: - properties: - disable: - default: false - type: boolean - type: object - s3: - properties: - accesskey: - type: string - bucket: - type: string - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - keyid: - type: string - region: - type: string - regionendpoint: - type: string - rootdirectory: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - secure: - default: true - type: boolean - skipverify: - default: false - type: boolean - storageclass: - default: STANDARD - type: string - v4auth: - default: true - type: boolean - required: - - bucket - - region - type: object - swift: - properties: - accesskey: - type: string - authurl: - type: string - authversion: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - container: - type: string - domain: - type: string - domainID: - type: string - endpointtype: - default: public - enum: - - public - - internal - - admin - type: string - insecureskipverify: - default: false - type: boolean - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - tenant: - type: string - tenantID: - type: string - trustid: - type: string - username: - type: string - required: - - authurl - - container - type: object - type: object - imageSource: - properties: - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - repository: - type: string - tagSuffix: - type: string - type: object - internalTLS: - properties: - enabled: - default: false - type: boolean - type: object - jobservice: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - workerCount: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - logLevel: - default: info - enum: - - debug - - info - - warning - - error - - fatal - type: string - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object - portal: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - proxy: - properties: - components: - default: - - core - - jobservice - - trivy - items: - type: string - type: array - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - registry: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - relativeURLs: - default: true - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storageMiddlewares: - items: - properties: - name: - type: string - optionsRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - name - type: object - type: array - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - registryctl: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - trivy: - properties: - certificateRefs: - items: - type: string - type: array - githubTokenRef: - type: string - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - skipUpdate: - default: false - type: boolean - storage: - properties: - cachePersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - reportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - storage - type: object - updateStrategyType: - default: RollingUpdate - type: string - version: - pattern: '[0-9]+\.[0-9]+\.[0-9]+' - type: string - required: - - expose - - externalURL - - harborAdminPasswordRef - - version - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: The public URL to the Harbor application - jsonPath: .spec.externalURL - name: Public URL - priority: 5 - type: string - - description: The version to the Harbor application - jsonPath: .spec.version - name: Version - priority: 5 - type: string - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - chartmuseum: - properties: - absoluteUrl: - default: false - type: boolean - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - core: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - maxIdleConnections: - default: 50 - format: int32 - minimum: 0 - type: integer - maxOpenConnections: - default: 1000 - format: int32 - minimum: 0 - type: integer - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tokenIssuer: - properties: - group: - type: string - kind: - type: string - name: - type: string - required: - - name - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - tokenIssuer - type: object - database: - properties: - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - sslMode: - enum: - - disable - - allow - - prefer - - require - - verify-ca - - verify-full - type: string - username: - minLength: 1 - type: string - required: - - hosts - type: object - exporter: - properties: - cache: - properties: - cleanInterval: - default: 4h - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - duration: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? - type: string - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - expose: - properties: - core: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - notary: - properties: - ingress: - properties: - annotations: - additionalProperties: - type: string - type: object - controller: - default: default - enum: - - default - - gce - - ncp - - contour - type: string - host: - type: string - ingressClassName: - type: string - required: - - host - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - type: object - required: - - core - type: object - externalURL: - pattern: https?://.* - type: string - harborAdminPasswordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - imageChartStorage: - properties: - azure: - properties: - accountkeyRef: - type: string - accountname: - type: string - baseURL: - default: core.windows.net - type: string - container: - type: string - pathPrefix: - default: /azure/harbor/charts - type: string - type: object - filesystem: - properties: - chartPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - registryPersistentVolume: - properties: - claimName: - type: string - maxthreads: - default: 100 - format: int32 - minimum: 25 - type: integer - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - required: - - registryPersistentVolume - type: object - gcs: - properties: - bucket: - type: string - chunkSize: - type: string - keyDataRef: - type: string - pathPrefix: - type: string - type: object - oss: - properties: - accessKeyID: - type: string - accessSecretRef: - type: string - bucket: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - endpoint: - type: string - internal: - default: false - type: boolean - pathPrefix: - type: string - region: - pattern: oss-.* - type: string - secure: - default: true - type: boolean - required: - - accessKeyID - - accessSecretRef - - bucket - - region - type: object - redirect: - properties: - disable: - default: false - type: boolean - type: object - s3: - properties: - accesskey: - type: string - bucket: - type: string - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - encrypt: - default: false - type: boolean - keyid: - type: string - multipartcopychunksize: - format: int64 - type: integer - multipartcopymaxconcurrency: - format: int64 - type: integer - multipartcopythresholdsize: - format: int64 - type: integer - region: - type: string - regionendpoint: - type: string - rootdirectory: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - secure: - default: true - type: boolean - skipverify: - default: false - type: boolean - storageclass: - default: STANDARD - type: string - v4auth: - default: true - type: boolean - required: - - bucket - - region - type: object - swift: - properties: - accesskey: - type: string - authurl: - type: string - authversion: - type: string - chunksize: - format: int64 - minimum: 5242880 - type: integer - container: - type: string - domain: - type: string - domainID: - type: string - endpointtype: - default: public - enum: - - public - - internal - - admin - type: string - insecureskipverify: - default: false - type: boolean - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - prefix: - type: string - region: - type: string - secretkeyRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - tenant: - type: string - tenantID: - type: string - trustid: - type: string - username: - type: string - required: - - authurl - - container - type: object - type: object - imageSource: - properties: - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - repository: - type: string - tagSuffix: - type: string - type: object - internalTLS: - properties: - enabled: - default: false - type: boolean - type: object - jobservice: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - scanDataExportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - workerCount: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - logLevel: - default: info - enum: - - debug - - info - - warning - - error - - fatal - type: string - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - notary: - properties: - migrationEnabled: - default: true - type: boolean - server: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - signer: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - type: object - portal: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - proxy: - properties: - components: - default: - - core - - jobservice - - trivy - items: - type: string - type: array - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - redis: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - minLength: 1 - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - registry: - properties: - certificateRefs: - items: - type: string - type: array - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - nodeSelector: - additionalProperties: - type: string - type: object - relativeURLs: - default: true - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storageMiddlewares: - items: - properties: - name: - type: string - optionsRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - name - type: object - type: array - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - registryctl: - properties: - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: - properties: - agent: - properties: - host: - type: string - port: - type: integer - type: object - collector: - properties: - endpoint: - type: string - passwordRef: - type: string - username: - type: string - required: - - endpoint - type: object - mode: - enum: - - collector - - agent - type: string - required: - - mode - type: object - namespace: - type: string - otel: - properties: - compression: - type: boolean - endpoint: - type: string - insecure: - type: boolean - timeout: - default: 10s - type: string - urlPath: - type: string - required: - - endpoint - - urlPath - type: object - provider: - enum: - - jaeger - - otel - type: string - sampleRate: - default: 1 - type: integer - required: - - provider - type: object - trivy: - properties: - certificateRefs: - items: - type: string - type: array - githubTokenRef: - type: string - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - nodeSelector: - additionalProperties: - type: string - type: object - offlineScan: - default: false - type: boolean - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - skipUpdate: - default: false - type: boolean - storage: - properties: - cachePersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - reportsPersistentVolume: - properties: - claimName: - type: string - prefix: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - storage - type: object - updateStrategyType: - default: RollingUpdate - type: string - version: - pattern: '[0-9]+\.[0-9]+\.[0-9]+' - type: string - required: - - database - - expose - - externalURL - - harborAdminPasswordRef - - imageChartStorage - - redis - - version - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: harborserverconfigurations.goharbor.io -spec: - group: goharbor.io - names: - categories: - - goharbor - kind: HarborServerConfiguration - listKind: HarborServerConfigurationList - plural: harborserverconfigurations - shortNames: - - hsc - singular: harborserverconfiguration - scope: Cluster - versions: - - additionalPrinterColumns: - - description: The public URL to the Harbor server - jsonPath: .spec.serverURL - name: Harbor Server - type: string - - description: The status of the Harbor server - jsonPath: .status.status - name: Status - type: string - - description: The version of the Harbor server - jsonPath: .spec.version - name: Version - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - accessCredential: - properties: - accessSecretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - namespace: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - accessSecretRef - - namespace - type: object - default: - type: boolean - insecure: - type: boolean - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - rules: - items: - type: string - type: array - serverURL: - pattern: (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^https?://(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9]) - type: string - version: - pattern: (0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? - type: string - required: - - accessCredential - - serverURL - - version - type: object - status: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: jobservices.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: JobService - listKind: JobServiceList - plural: jobservices - singular: jobservice - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - certificateRefs: - items: - type: string - type: array - core: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - jobLoggers: - default: - files: - - level: INFO - sweeper: 720h - volume: - emptyDir: - sizeLimit: 100Mi - stdout: - level: INFO - properties: - database: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - files: - items: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - volume: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - type: object - nullable: true - type: array - stdout: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - type: object - type: object - loggers: - default: - stdout: - level: INFO - properties: - database: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - files: - items: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - volume: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - type: object - nullable: true - type: array - stdout: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - type: object - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - type: string - required: - - passwordRef - - username - type: object - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - workerPool: - properties: - backend: - default: redis - enum: - - redis - minLength: 1 - type: string - redisPool: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - namespace: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: - type: string - required: - - host - type: object - workers: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - required: - - core - - registry - - secretRef - - tokenService - - workerPool - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - certificateRefs: - items: - type: string - type: array - core: - properties: - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - url: - pattern: https?://.+ - type: string - required: - - secretRef - - url - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - jobLoggers: - default: - files: - - level: INFO - sweeper: 720h - volume: - emptyDir: - sizeLimit: 100Mi - stdout: - level: INFO - properties: - database: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - files: - items: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - volume: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + trivy: + properties: + certificateRefs: + items: + type: string + type: array + githubTokenRef: + type: string + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + skipUpdate: + default: false + type: boolean + storage: + properties: + cachePersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + reportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - storage + type: object + updateStrategyType: + default: RollingUpdate + type: string + version: + pattern: '[0-9]+\.[0-9]+\.[0-9]+' + type: string + required: + - expose + - externalURL + - harborAdminPasswordRef + - version + type: object + status: + properties: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + operator: + properties: + controllerGitCommit: + minLength: 1 + type: string + controllerName: + minLength: 1 + type: string + controllerVersion: + minLength: 1 + type: string + type: object + revision: + format: int64 + type: integer + status: + type: string + required: + - revision + - status + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: The public URL to the Harbor application + jsonPath: .spec.externalURL + name: Public URL + type: string + - description: The overall status of the Harbor cluster + jsonPath: .status.status + name: Status + type: string + - description: 'The operator version ' + jsonPath: .status.operator.controllerVersion + name: Operator Version + priority: 30 + type: string + - description: The operator git commit + jsonPath: .status.operator.controllerGitCommit + name: Operator Git Commit + priority: 30 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + cache: + properties: + kind: + enum: + - Redis + - RedisFailover + type: string + spec: + properties: + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + host: + minLength: 1 + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + redisFailover: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: + name: type: string - required: - - gateway - - secretRef - - system type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path + x-kubernetes-map-type: atomic + type: array + operatorVersion: + type: string + sentinel: + properties: + replicas: + default: 1 + type: integer + type: object + server: + properties: + replicas: + default: 1 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - type: object - nullable: true - type: array - stdout: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storage: + type: string + storageClassName: + type: string + type: object + required: + - operatorVersion + type: object type: object + required: + - kind + - spec type: object - loggers: - default: - stdout: - level: INFO + core: properties: - database: - properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - type: object - files: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: items: properties: - level: - default: INFO - enum: - - DEBUG - - INFO - - WARNING - - ERROR - - FATAL - type: string - sweeper: - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + name: type: string - volume: + type: object + x-kubernetes-map-type: atomic + type: array + maxIdleConnections: + default: 50 + format: int32 + minimum: 0 + type: integer + maxOpenConnections: + default: 1000 + format: int32 + minimum: 0 + type: integer + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tokenIssuer: + properties: + group: + type: string + kind: + type: string + name: + type: string + required: + - name + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - tokenIssuer + type: object + database: + properties: + kind: + enum: + - PostgreSQL + - Zlando/PostgreSQL + type: string + spec: + properties: + postgresql: + properties: + hosts: + items: properties: - driver: - type: string - fsType: + host: + minLength: 1 type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: + port: + exclusiveMinimum: true format: int32 + minimum: 0 type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object + required: + - host type: object - fc: + minItems: 1 + type: array + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + sslMode: + enum: + - disable + - allow + - prefer + - require + - verify-ca + - verify-full + type: string + username: + minLength: 1 + type: string + required: + - hosts + type: object + zlandoPostgreSql: + properties: + connectTimeout: + type: integer + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: properties: - fsType: + name: type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array type: object - flexVolume: + x-kubernetes-map-type: atomic + type: array + operatorVersion: + type: string + replicas: + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + sslConfig: + type: string + storage: + type: string + storageClassName: + type: string + required: + - operatorVersion + type: object + type: object + required: + - kind + - spec + type: object + exporter: + properties: + cache: + properties: + cleanInterval: + default: 4h + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + duration: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + expose: + properties: + core: + properties: + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour + type: string + host: + type: string + ingressClassName: + type: string + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + type: object + required: + - core + type: object + externalURL: + pattern: https?://.* + type: string + harborAdminPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + imageSource: + properties: + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + repository: + type: string + tagSuffix: + type: string + type: object + internalTLS: + properties: + enabled: + default: false + type: boolean + type: object + jobservice: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storage: + properties: + scanDataExportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + workerCount: + default: 10 + format: int32 + minimum: 1 + type: integer + type: object + logLevel: + default: info + enum: + - debug + - info + - warning + - error + - fatal + type: string + network: + properties: + ipFamilies: + items: + type: string + type: array + type: object + portal: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + proxy: + properties: + components: + default: + - core + - jobservice + - trivy + items: + type: string + type: array + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + registry: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + relativeURLs: + default: true + type: boolean + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storageMiddlewares: + items: + properties: + name: + type: string + optionsRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + required: + - name + type: object + type: array + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + registryctl: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + storage: + properties: + kind: + enum: + - MinIO + - S3 + - Swift + - FileSystem + - Azure + - Gcs + - Oss + type: string + spec: + properties: + azure: + properties: + accountkeyRef: + type: string + accountname: + type: string + baseURL: + default: core.windows.net + type: string + container: + type: string + pathPrefix: + default: /azure/harbor/charts + type: string + type: object + fileSystem: + properties: + chartPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + registryPersistentVolume: + properties: + claimName: + type: string + maxthreads: + default: 100 + format: int32 + minimum: 25 + type: integer + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + required: + - registryPersistentVolume + type: object + gcs: + properties: + bucket: + type: string + chunkSize: + type: string + keyDataRef: + type: string + pathPrefix: + type: string + type: object + minIO: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: properties: - driver: - type: string - fsType: + name: type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: + type: object + x-kubernetes-map-type: atomic + type: array + mc: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: properties: name: type: string type: object x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: + type: array + type: object + operatorVersion: + default: 4.0.6 + type: string + redirect: + properties: + enable: + default: true + type: boolean + expose: + properties: + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour + type: string + host: + type: string + ingressClassName: + type: string + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + type: object + required: + - enable + type: object + replicas: + format: int32 + minimum: 1 + type: integer + resources: + properties: + claims: + items: properties: name: type: string + required: + - name type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + phase: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + resizeStatus: + type: string + type: object + type: object + volumesPerServer: + format: int32 + minimum: 1 + type: integer + required: + - operatorVersion + - replicas + - volumesPerServer + type: object + oss: + properties: + accessKeyID: + type: string + accessSecretRef: + type: string + bucket: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + endpoint: + type: string + internal: + default: false + type: boolean + pathPrefix: + type: string + region: + pattern: oss-.* + type: string + secure: + default: true + type: boolean + required: + - accessKeyID + - accessSecretRef + - bucket + - region + type: object + redirect: + properties: + enable: + default: true + type: boolean + expose: + properties: + ingress: + properties: + annotations: + additionalProperties: type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour + type: string + host: + type: string + ingressClassName: + type: string + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + type: object + required: + - enable + type: object + s3: + properties: + accesskey: + type: string + bucket: + type: string + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + keyid: + type: string + multipartcopychunksize: + format: int64 + type: integer + multipartcopymaxconcurrency: + format: int64 + type: integer + multipartcopythresholdsize: + format: int64 + type: integer + region: + type: string + regionendpoint: + type: string + rootdirectory: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + secure: + default: true + type: boolean + skipverify: + default: false + type: boolean + storageclass: + default: STANDARD + type: string + v4auth: + default: true + type: boolean + required: + - bucket + - region + type: object + swift: + properties: + accesskey: + type: string + authurl: + type: string + authversion: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + container: + type: string + domain: + type: string + domainID: + type: string + endpointtype: + default: public + enum: + - public + - internal + - admin + type: string + insecureskipverify: + default: false + type: boolean + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + region: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + tenant: + type: string + tenantID: + type: string + trustid: + type: string + username: + type: string + required: + - authurl + - container + type: object + type: object + required: + - kind + - spec + type: object + trace: + properties: + attributes: + additionalProperties: + type: string + type: object + enabled: + default: false + type: boolean + jaeger: + properties: + agent: + properties: + host: + type: string + port: + type: integer + type: object + collector: + properties: + endpoint: + type: string + passwordRef: + type: string + username: + type: string + required: + - endpoint + type: object + mode: + enum: + - collector + - agent + type: string + required: + - mode + type: object + namespace: + type: string + otel: + properties: + compression: + type: boolean + endpoint: + type: string + insecure: + type: boolean + timeout: + default: 10s + type: string + urlPath: + type: string + required: + - endpoint + - urlPath + type: object + provider: + enum: + - jaeger + - otel + type: string + sampleRate: + default: 1 + type: integer + required: + - provider + type: object + trivy: + properties: + certificateRefs: + items: + type: string + type: array + githubTokenRef: + type: string + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + offlineScan: + default: false + type: boolean + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + skipUpdate: + default: false + type: boolean + storage: + properties: + cachePersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + reportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - storage + type: object + updateStrategyType: + default: RollingUpdate + type: string + version: + pattern: '[0-9]+\.[0-9]+\.[0-9]+' + type: string + required: + - cache + - database + - expose + - externalURL + - harborAdminPasswordRef + - storage + - version + type: object + status: + properties: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + operator: + properties: + controllerGitCommit: + minLength: 1 + type: string + controllerName: + minLength: 1 + type: string + controllerVersion: + minLength: 1 + type: string + type: object + revision: + format: int64 + type: integer + status: + type: string + required: + - revision + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + goharbor.io/deploy-engine: Kustomization + goharbor.io/deploy-mode: harbor + goharbor.io/operator-version: v1.3.0 + name: harborconfigurations.goharbor.io +spec: + group: goharbor.io + names: + categories: + - goharbor + kind: HarborConfiguration + listKind: HarborConfigurationList + plural: harborconfigurations + shortNames: + - hc + singular: harborconfiguration + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: HarborCluster name + jsonPath: .spec.harborClusterRef + name: HarborCluster + type: string + - description: HarborConfiguration status + jsonPath: .status.status + name: Status + type: string + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + configuration: + properties: + authMode: + type: string + emailFrom: + type: string + emailHost: + type: string + emailIdentity: + type: string + emailInsecure: + type: boolean + emailPassword: + type: string + emailPort: + type: integer + emailSsl: + type: boolean + emailUsername: + type: string + httpAuthproxyAdminGroups: + type: string + httpAuthproxyAdminUsernames: + type: string + httpAuthproxyEndpoint: + type: string + httpAuthproxyServerCertificate: + type: boolean + httpAuthproxySkipSearch: + type: boolean + httpAuthproxyTokenreviewEndpoint: + type: string + httpAuthproxyVerifyCert: + type: boolean + ldapBaseDn: + type: string + ldapFilter: + type: string + ldapGroupAdminDn: + type: string + ldapGroupAttributeName: + type: string + ldapGroupBaseDn: + type: string + ldapGroupMembershipAttribute: + type: string + ldapGroupSearchFilter: + type: string + ldapGroupSearchScope: + type: integer + ldapScope: + type: integer + ldapSearchDn: + type: string + ldapSearchPassword: + type: string + ldapTimeout: + type: integer + ldapUid: + type: string + ldapUrl: + type: string + ldapVerifyCert: + type: boolean + notificationEnable: + type: boolean + oidcAdminGroup: + type: string + oidcAutoOnboard: + type: boolean + oidcClientId: + type: string + oidcClientSecret: + type: string + oidcEndpoint: + type: string + oidcExtraRedirectParms: + type: string + oidcGroupsClaim: + type: string + oidcName: + type: string + oidcScope: + type: string + oidcUserClaim: + type: string + oidcVerifyCert: + type: boolean + projectCreationRestriction: + type: string + quotaPerProjectEnable: + type: boolean + readOnly: + type: boolean + robotNamePrefix: + type: string + robotTokenDuration: + type: integer + selfRegistration: + type: boolean + storagePerProject: + type: integer + tokenExpiration: + type: integer + uaaClientId: + type: string + uaaClientSecret: + type: string + uaaEndpoint: + type: string + uaaVerifyCert: + type: boolean + type: object + harborClusterRef: + type: string + type: object + status: + properties: + lastApplyTime: + format: date-time + type: string + lastConfiguration: + properties: + configuration: + properties: + authMode: + type: string + emailFrom: + type: string + emailHost: + type: string + emailIdentity: + type: string + emailInsecure: + type: boolean + emailPassword: + type: string + emailPort: + type: integer + emailSsl: + type: boolean + emailUsername: + type: string + httpAuthproxyAdminGroups: + type: string + httpAuthproxyAdminUsernames: + type: string + httpAuthproxyEndpoint: + type: string + httpAuthproxyServerCertificate: + type: boolean + httpAuthproxySkipSearch: + type: boolean + httpAuthproxyTokenreviewEndpoint: + type: string + httpAuthproxyVerifyCert: + type: boolean + ldapBaseDn: + type: string + ldapFilter: + type: string + ldapGroupAdminDn: + type: string + ldapGroupAttributeName: + type: string + ldapGroupBaseDn: + type: string + ldapGroupMembershipAttribute: + type: string + ldapGroupSearchFilter: + type: string + ldapGroupSearchScope: + type: integer + ldapScope: + type: integer + ldapSearchDn: + type: string + ldapSearchPassword: + type: string + ldapTimeout: + type: integer + ldapUid: + type: string + ldapUrl: + type: string + ldapVerifyCert: + type: boolean + notificationEnable: + type: boolean + oidcAdminGroup: + type: string + oidcAutoOnboard: + type: boolean + oidcClientId: + type: string + oidcClientSecret: + type: string + oidcEndpoint: + type: string + oidcExtraRedirectParms: + type: string + oidcGroupsClaim: + type: string + oidcName: + type: string + oidcScope: + type: string + oidcUserClaim: + type: string + oidcVerifyCert: + type: boolean + projectCreationRestriction: + type: string + quotaPerProjectEnable: + type: boolean + readOnly: + type: boolean + robotNamePrefix: + type: string + robotTokenDuration: + type: integer + selfRegistration: + type: boolean + storagePerProject: + type: integer + tokenExpiration: + type: integer + uaaClientId: + type: string + uaaClientSecret: + type: string + uaaEndpoint: + type: string + uaaVerifyCert: + type: boolean + type: object + harborClusterRef: + type: string + type: object + message: + type: string + reason: + type: string + status: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + goharbor.io/deploy-engine: Kustomization + goharbor.io/deploy-mode: harbor + goharbor.io/operator-version: v1.3.0 + name: harborprojects.goharbor.io +spec: + group: goharbor.io + names: + categories: + - goharbor + kind: HarborProject + listKind: HarborProjectList + plural: harborprojects + shortNames: + - hp + singular: harborproject + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Project name in Harbor + jsonPath: .spec.projectName + name: ProjectName + type: string + - description: HarborServerConfiguration name + jsonPath: .spec.harborServerConfig + name: HarborServerConfig + type: string + - description: HarborProject status + jsonPath: .status.status + name: Status + type: string + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + cveAllowList: + items: + type: string + type: array + harborServerConfig: + type: string + memberships: + items: + properties: + name: + type: string + role: + enum: + - projectAdmin + - developer + - guest + - maintainer + type: string + type: + enum: + - group + - user + type: string + required: + - name + - role + - type + type: object + type: array + metadata: + properties: + autoScan: + type: boolean + enableContentTrust: + type: boolean + enableContentTrustCosign: + type: boolean + preventVulnerable: + type: boolean + public: + type: boolean + reuseSysCveAllowlist: + type: boolean + severity: + enum: + - none + - low + - medium + - high + - critical + type: string + type: object + projectName: + maxLength: 255 + minLength: 1 + pattern: ^[a-z0-9]+(?:[._-][a-z0-9]+)*$ + type: string + storageQuota: + pattern: ^[1-9][0-9]*(Ti|Gi|Mi|Ki)$ + type: string + required: + - harborServerConfig + - projectName + type: object + status: + properties: + lastApplyTime: + format: date-time + type: string + membershipHash: + type: string + message: + type: string + projectID: + format: int32 + type: integer + quotaID: + format: int64 + type: integer + reason: + type: string + status: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + goharbor.io/deploy-engine: Kustomization + goharbor.io/deploy-mode: harbor + goharbor.io/operator-version: v1.3.0 + name: harbors.goharbor.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: webhook-service + namespace: harbor-operator-ns + path: /convert + conversionReviewVersions: + - v1 + group: goharbor.io + names: + categories: + - goharbor + kind: Harbor + listKind: HarborList + plural: harbors + shortNames: + - h + singular: harbor + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The public URL to the Harbor application + jsonPath: .spec.externalURL + name: Public URL + priority: 5 + type: string + - description: The version to the Harbor application + jsonPath: .spec.version + name: Version + priority: 5 + type: string + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + priority: 1 + type: date + - description: Human readable message describing the failure + jsonPath: .status.conditions[?(@.type=="Failed")].message + name: Failure + priority: 5 + type: string + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + core: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tokenIssuer: + properties: + group: + type: string + kind: + type: string + name: + type: string + required: + - name + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + database: + properties: + hosts: + items: + properties: + host: + minLength: 1 + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + required: + - host + type: object + minItems: 1 + type: array + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + sslMode: + enum: + - disable + - allow + - prefer + - require + - verify-ca + - verify-full + type: string + username: + minLength: 1 + type: string + required: + - hosts + type: object + exporter: + properties: + cache: + properties: + cleanInterval: + default: 4h + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + duration: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + expose: + properties: + core: + properties: + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour + type: string + host: + type: string + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + type: object + required: + - core + type: object + externalURL: + pattern: https?://.* + type: string + harborAdminPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + imageChartStorage: + properties: + filesystem: + properties: + chartPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + registryPersistentVolume: + properties: + claimName: + type: string + maxthreads: + default: 100 + format: int32 + minimum: 25 + type: integer + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + required: + - registryPersistentVolume + type: object + redirect: + properties: + disable: + default: false + type: boolean + type: object + s3: + properties: + accesskey: + type: string + bucket: + type: string + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + keyid: + type: string + region: + type: string + regionendpoint: + type: string + rootdirectory: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + secure: + default: true + type: boolean + skipverify: + default: false + type: boolean + storageclass: + default: STANDARD + type: string + v4auth: + default: true + type: boolean + required: + - bucket + - region + type: object + swift: + properties: + accesskey: + type: string + authurl: + type: string + authversion: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + container: + type: string + domain: + type: string + domainID: + type: string + endpointtype: + default: public + enum: + - public + - internal + - admin + type: string + insecureskipverify: + default: false + type: boolean + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + region: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + tenant: + type: string + tenantID: + type: string + trustid: + type: string + username: + type: string + required: + - authurl + - container + type: object + type: object + imageSource: + properties: + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + repository: + type: string + tagSuffix: + type: string + type: object + internalTLS: + properties: + enabled: + default: false + type: boolean + type: object + jobservice: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + workerCount: + default: 10 + format: int32 + minimum: 1 + type: integer + type: object + logLevel: + default: info + enum: + - debug + - info + - warning + - error + - fatal + type: string + portal: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + proxy: + properties: + components: + default: + - core + - jobservice + - trivy + items: + type: string + type: array + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + host: + minLength: 1 + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + registry: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + relativeURLs: + default: true + type: boolean + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storageMiddlewares: + items: + properties: + name: + type: string + optionsRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + required: + - name + type: object + type: array + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + registryctl: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + trivy: + properties: + certificateRefs: + items: + type: string + type: array + githubTokenRef: + type: string + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + skipUpdate: + default: false + type: boolean + storage: + properties: + cachePersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + reportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - storage + type: object + updateStrategyType: + default: RollingUpdate + type: string + version: + pattern: '[0-9]+\.[0-9]+\.[0-9]+' + type: string + required: + - expose + - externalURL + - harborAdminPasswordRef + - version + type: object + status: + properties: + conditions: + items: + properties: + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + operator: + properties: + controllerGitCommit: + minLength: 1 + type: string + controllerName: + minLength: 1 + type: string + controllerVersion: + minLength: 1 + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + required: + - conditions + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: The public URL to the Harbor application + jsonPath: .spec.externalURL + name: Public URL + priority: 5 + type: string + - description: The version to the Harbor application + jsonPath: .spec.version + name: Version + priority: 5 + type: string + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + priority: 1 + type: date + - description: Human readable message describing the failure + jsonPath: .status.conditions[?(@.type=="Failed")].message + name: Failure + priority: 5 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + core: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + maxIdleConnections: + default: 50 + format: int32 + minimum: 0 + type: integer + maxOpenConnections: + default: 1000 + format: int32 + minimum: 0 + type: integer + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tokenIssuer: + properties: + group: + type: string + kind: + type: string + name: + type: string + required: + - name + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - tokenIssuer + type: object + database: + properties: + hosts: + items: + properties: + host: + minLength: 1 + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + required: + - host + type: object + minItems: 1 + type: array + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + sslMode: + enum: + - disable + - allow + - prefer + - require + - verify-ca + - verify-full + type: string + username: + minLength: 1 + type: string + required: + - hosts + type: object + exporter: + properties: + cache: + properties: + cleanInterval: + default: 4h + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + duration: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)? + type: string + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + expose: + properties: + core: + properties: + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + controller: + default: default + enum: + - default + - gce + - ncp + - contour + type: string + host: + type: string + ingressClassName: + type: string + required: + - host + type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + type: object + required: + - core + type: object + externalURL: + pattern: https?://.* + type: string + harborAdminPasswordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + imageChartStorage: + properties: + azure: + properties: + accountkeyRef: + type: string + accountname: + type: string + baseURL: + default: core.windows.net + type: string + container: + type: string + pathPrefix: + default: /azure/harbor/charts + type: string + type: object + filesystem: + properties: + chartPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + registryPersistentVolume: + properties: + claimName: + type: string + maxthreads: + default: 100 + format: int32 + minimum: 25 + type: integer + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + required: + - registryPersistentVolume + type: object + gcs: + properties: + bucket: + type: string + chunkSize: + type: string + keyDataRef: + type: string + pathPrefix: + type: string + type: object + oss: + properties: + accessKeyID: + type: string + accessSecretRef: + type: string + bucket: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + endpoint: + type: string + internal: + default: false + type: boolean + pathPrefix: + type: string + region: + pattern: oss-.* + type: string + secure: + default: true + type: boolean + required: + - accessKeyID + - accessSecretRef + - bucket + - region + type: object + redirect: + properties: + disable: + default: false + type: boolean + type: object + s3: + properties: + accesskey: + type: string + bucket: + type: string + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + encrypt: + default: false + type: boolean + keyid: + type: string + multipartcopychunksize: + format: int64 + type: integer + multipartcopymaxconcurrency: + format: int64 + type: integer + multipartcopythresholdsize: + format: int64 + type: integer + region: + type: string + regionendpoint: + type: string + rootdirectory: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + secure: + default: true + type: boolean + skipverify: + default: false + type: boolean + storageclass: + default: STANDARD + type: string + v4auth: + default: true + type: boolean + required: + - bucket + - region + type: object + swift: + properties: + accesskey: + type: string + authurl: + type: string + authversion: + type: string + chunksize: + format: int64 + minimum: 5242880 + type: integer + container: + type: string + domain: + type: string + domainID: + type: string + endpointtype: + default: public + enum: + - public + - internal + - admin + type: string + insecureskipverify: + default: false + type: boolean + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + prefix: + type: string + region: + type: string + secretkeyRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + tenant: + type: string + tenantID: + type: string + trustid: + type: string + username: + type: string + required: + - authurl + - container + type: object + type: object + imageSource: + properties: + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + repository: + type: string + tagSuffix: + type: string + type: object + internalTLS: + properties: + enabled: + default: false + type: boolean + type: object + jobservice: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storage: + properties: + scanDataExportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + workerCount: + default: 10 + format: int32 + minimum: 1 + type: integer + type: object + logLevel: + default: info + enum: + - debug + - info + - warning + - error + - fatal + type: string + network: + properties: + ipFamilies: + items: + type: string + type: array + type: object + portal: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + proxy: + properties: + components: + default: + - core + - jobservice + - trivy + items: + type: string + type: array + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + redis: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + host: + minLength: 1 + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + registry: + properties: + certificateRefs: + items: + type: string + type: array + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + metrics: + properties: + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ + type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer + type: object + nodeSelector: + additionalProperties: + type: string + type: object + relativeURLs: + default: true + type: boolean + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + storageMiddlewares: + items: + properties: + name: + type: string + optionsRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + required: + - name + type: object + type: array + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + registryctl: + properties: + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + type: object + trace: + properties: + attributes: + additionalProperties: + type: string + type: object + enabled: + default: false + type: boolean + jaeger: + properties: + agent: + properties: + host: + type: string + port: + type: integer + type: object + collector: + properties: + endpoint: + type: string + passwordRef: + type: string + username: + type: string + required: + - endpoint + type: object + mode: + enum: + - collector + - agent + type: string + required: + - mode + type: object + namespace: + type: string + otel: + properties: + compression: + type: boolean + endpoint: + type: string + insecure: + type: boolean + timeout: + default: 10s + type: string + urlPath: + type: string + required: + - endpoint + - urlPath + type: object + provider: + enum: + - jaeger + - otel + type: string + sampleRate: + default: 1 + type: integer + required: + - provider + type: object + trivy: + properties: + certificateRefs: + items: + type: string + type: array + githubTokenRef: + type: string + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + type: object + offlineScan: + default: false + type: boolean + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + serviceAccountName: + type: string + skipUpdate: + default: false + type: boolean + storage: + properties: + cachePersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + reportsPersistentVolume: + properties: + claimName: + type: string + prefix: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + type: object + templateAnnotations: + additionalProperties: + type: string + type: object + templateLabels: + additionalProperties: + type: string + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + required: + - storage + type: object + updateStrategyType: + default: RollingUpdate + type: string + version: + pattern: '[0-9]+\.[0-9]+\.[0-9]+' + type: string + required: + - database + - expose + - externalURL + - harborAdminPasswordRef + - imageChartStorage + - redis + - version + type: object + status: + properties: + conditions: + items: + properties: + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + operator: + properties: + controllerGitCommit: + minLength: 1 + type: string + controllerName: + minLength: 1 + type: string + controllerVersion: + minLength: 1 + type: string + type: object + replicas: + format: int32 + minimum: 0 + type: integer + required: + - conditions + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + goharbor.io/deploy-engine: Kustomization + goharbor.io/deploy-mode: harbor + goharbor.io/operator-version: v1.3.0 + name: harborserverconfigurations.goharbor.io +spec: + group: goharbor.io + names: + categories: + - goharbor + kind: HarborServerConfiguration + listKind: HarborServerConfigurationList + plural: harborserverconfigurations + shortNames: + - hsc + singular: harborserverconfiguration + scope: Cluster + versions: + - additionalPrinterColumns: + - description: The public URL to the Harbor server + jsonPath: .spec.serverURL + name: Harbor Server + type: string + - description: The status of the Harbor server + jsonPath: .status.status + name: Status + type: string + - description: The version of the Harbor server + jsonPath: .spec.version + name: Version + priority: 5 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + accessCredential: + properties: + accessSecretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + namespace: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + required: + - accessSecretRef + - namespace + type: object + default: + type: boolean + insecure: + type: boolean + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator type: object - nullable: true type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + rules: + items: + type: string + type: array + serverURL: + pattern: (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^https?://(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9]) + type: string + version: + pattern: (0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? + type: string + required: + - accessCredential + - serverURL + - version + type: object + status: + properties: + message: + type: string + reason: + type: string + status: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + goharbor.io/deploy-engine: Kustomization + goharbor.io/deploy-mode: harbor + goharbor.io/operator-version: v1.3.0 + name: jobservices.goharbor.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: webhook-service + namespace: harbor-operator-ns + path: /convert + conversionReviewVersions: + - v1 + group: goharbor.io + names: + categories: + - goharbor + kind: JobService + listKind: JobServiceList + plural: jobservices + singular: jobservice + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Timestamp representing the server time when this object was created. + It is not guaranteed to be set in happens-before order across separate operations. + Clients may not set this value. It is represented in RFC3339 form and is in + UTC. + jsonPath: .metadata.creationTimestamp + name: Age + priority: 1 + type: date + - description: Human readable message describing the failure + jsonPath: .status.conditions[?(@.type=="Failed")].message + name: Failure + priority: 5 + type: string + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + certificateRefs: + items: + type: string + type: array + core: + properties: + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + url: + pattern: https?://.+ + type: string + required: + - secretRef + - url + type: object + image: + type: string + imagePullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + jobLoggers: + default: + files: + - level: INFO + sweeper: 720h + volume: + emptyDir: + sizeLimit: 100Mi stdout: + level: INFO + properties: + database: properties: level: default: INFO @@ -14779,1430 +6468,1547 @@ spec: - ERROR - FATAL type: string - type: object - type: object - metrics: - properties: - enabled: - default: false - type: boolean - path: - default: /metrics - pattern: /.+ - type: string - port: - default: 8001 - format: int32 - minimum: 1 - type: integer - type: object - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string - type: object - proxy: - properties: - httpProxy: - pattern: https?://.+ - type: string - httpsProxy: - pattern: https?://.+ - type: string - noProxy: - default: - - 127.0.0.1 - - localhost - - .local - - .internal - items: - type: string - type: array - type: object - registry: - properties: - controllerURL: - pattern: https?://.+ - type: string - credentials: - properties: - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? type: string - required: - - passwordRef - - username type: object - url: - pattern: https?://.+ - type: string - required: - - controllerURL - - credentials - - url - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: + files: items: properties: - name: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - secretRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - serviceAccountName: - type: string - storage: - properties: - scanDataExports: - properties: - prefix: - type: string - volumeSource: - default: - emptyDir: - sizeLimit: 1Gi - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + volume: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - key - - path type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + x-kubernetes-map-type: atomic + volumeID: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - accessModes: - items: - type: string - type: array - dataSource: + fieldRef: properties: - apiGroup: - type: string - kind: + apiVersion: type: string - name: + fieldPath: type: string required: - - kind - - name + - fieldPath type: object x-kubernetes-map-type: atomic - dataSourceRef: + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - apiGroup: - type: string - kind: - type: string - name: + containerName: type: string - namespace: + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: type: string required: - - kind - - name + - resource type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - required: - - key - - operator + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: type: string - type: array - wwids: - items: + datasetUUID: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + type: object + gcePersistentDisk: + properties: + fsType: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + partition: + format: int32 + type: integer + pdName: type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + type: array + readOnly: + type: boolean + secretRef: properties: - configMap: - properties: - items: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - key - - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - type: object - type: object - required: - - scanDataExports - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tls: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - type: object - tokenService: - properties: - url: - pattern: https?://.+ - type: string - required: - - url - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - trace: - properties: - attributes: - additionalProperties: - type: string - type: object - enabled: - default: false - type: boolean - jaeger: + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + type: object + type: object + nullable: true + type: array + stdout: properties: - agent: - properties: - host: - type: string - port: - type: integer - type: object - collector: - properties: - endpoint: - type: string - passwordRef: - type: string - username: - type: string - required: - - endpoint - type: object - mode: + level: + default: INFO enum: - - collector - - agent - type: string - required: - - mode - type: object - namespace: - type: string - otel: - properties: - compression: - type: boolean - endpoint: - type: string - insecure: - type: boolean - timeout: - default: 10s - type: string - urlPath: - type: string - required: - - endpoint - - urlPath - type: object - provider: - enum: - - jaeger - - otel - type: string - sampleRate: - default: 1 - type: integer - required: - - provider - type: object - updateStrategyType: - default: RollingUpdate - type: string - workerPool: - properties: - backend: - default: redis - enum: - - redis - minLength: 1 - type: string - redisPool: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - database: - default: 0 - format: int32 - maximum: 8 - minimum: 0 - type: integer - host: - minLength: 1 - type: string - idleTimeout: - default: 30s - pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? - type: string - namespace: - type: string - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - sentinelMasterSet: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - required: - - host type: object - workers: - default: 10 - format: int32 - minimum: 1 - type: integer - type: object - required: - - core - - registry - - secretRef - - tokenService - - workerPool - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: notaryservers.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: NotaryServer - listKind: NotaryServerList - plural: notaryservers - singular: notaryserver - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1alpha3 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: + loggers: + default: + stdout: + level: INFO properties: - token: + database: properties: - autoredirect: - default: true - type: boolean - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - issuer: - type: string - realm: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - service: + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? type: string - required: - - certificateRef - - issuer - - realm - - service type: object - required: - - token - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic - type: string - type: object - migrationEnabled: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: - properties: - claims: + files: items: properties: - name: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - required: - - name + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + volume: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + type: object type: object + nullable: true type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - postgres: + stdout: properties: - database: - minLength: 1 - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string type: object - required: - - postgres - type: object - templateAnnotations: - additionalProperties: - type: string type: object - templateLabels: + nodeSelector: additionalProperties: type: string type: object - tls: + proxy: properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + httpProxy: + pattern: https?://.+ type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: type: string - type: object - type: array - trustService: - properties: - remote: - properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - host: - type: string - keyAlgorithm: - default: ecdsa - enum: - - ecdsa - - rsa - - ed25519 - type: string - port: - default: 443 - exclusiveMinimum: true - format: int64 - minimum: 0 - type: integer - required: - - host - type: object + type: array type: object - required: - - trustService - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: + registry: properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 + controllerURL: + pattern: https?://.+ type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentication: - properties: - token: + credentials: properties: - autoredirect: - default: true - type: boolean - certificateRef: + passwordRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - issuer: - type: string - realm: - type: string - service: - type: string - required: - - certificateRef - - issuer - - realm - - service - type: object - required: - - token - type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic + type: string + username: + type: string + required: + - passwordRef + - username + type: object + url: + pattern: https?://.+ type: string - type: object - migrationEnabled: - type: boolean - network: - properties: - ipFamilies: - items: - type: string - type: array - type: object - nodeSelector: - additionalProperties: - type: string + required: + - controllerURL + - credentials + - url type: object replicas: format: int32 @@ -16239,45 +8045,11 @@ spec: x-kubernetes-int-or-string: true type: object type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string serviceAccountName: type: string - storage: - properties: - postgres: - properties: - database: - minLength: 1 - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - type: object - required: - - postgres - type: object templateAnnotations: additionalProperties: type: string @@ -16292,6 +8064,14 @@ spec: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string type: object + tokenService: + properties: + url: + pattern: https?://.+ + type: string + required: + - url + type: object tolerations: items: properties: @@ -16308,34 +8088,59 @@ spec: type: string type: object type: array - trustService: + workerPool: properties: - remote: + backend: + default: redis + enum: + - redis + minLength: 1 + type: string + redisPool: properties: certificateRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer host: + minLength: 1 type: string - keyAlgorithm: - default: ecdsa - enum: - - ecdsa - - rsa - - ed25519 + idleTimeout: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + namespace: + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string port: - default: 443 exclusiveMinimum: true - format: int64 + format: int32 minimum: 0 type: integer + sentinelMasterSet: + type: string required: - host type: object + workers: + default: 10 + format: int32 + minimum: 1 + type: integer type: object required: - - trustService + - core + - registry + - secretRef + - tokenService + - workerPool type: object status: properties: @@ -16379,42 +8184,9 @@ spec: type: object type: object served: true - storage: true + storage: false subresources: status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: harbor-operator-ns/serving-cert - controller-gen.kubebuilder.io/version: v0.14.0 - goharbor.io/deploy-engine: Kustomization - goharbor.io/deploy-mode: harbor - goharbor.io/operator-version: v1.3.0 - name: notarysigners.goharbor.io -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - caBundle: Cg== - service: - name: webhook-service - namespace: harbor-operator-ns - path: /convert - conversionReviewVersions: - - v1 - group: goharbor.io - names: - categories: - - goharbor - kind: NotarySigner - listKind: NotarySignerList - plural: notarysigners - singular: notarysigner - scope: Namespaced - versions: - additionalPrinterColumns: - description: Timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. @@ -16429,7 +8201,7 @@ spec: name: Failure priority: 5 type: string - name: v1alpha3 + name: v1beta1 schema: openAPIV3Schema: properties: @@ -16441,13 +8213,21 @@ spec: type: object spec: properties: - authentatication: + certificateRefs: + items: + type: string + type: array + core: properties: - certificateRef: + secretRef: pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' type: string + url: + pattern: https?://.+ + type: string required: - - certificateRef + - secretRef + - url type: object image: type: string @@ -16465,241 +8245,1539 @@ spec: type: object x-kubernetes-map-type: atomic type: array - logging: - properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic - type: string - type: object - migrationEnabled: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - replicas: - format: int32 - minimum: 0 - type: integer - resources: + jobLoggers: + default: + files: + - level: INFO + sweeper: 720h + volume: + emptyDir: + sizeLimit: 100Mi + stdout: + level: INFO properties: - claims: + database: + properties: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL + type: string + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + type: object + files: items: properties: - name: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL type: string - required: - - name + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + volume: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + type: object type: object + nullable: true type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - serviceAccountName: - type: string - storage: - properties: - aliasesRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - postgres: + stdout: properties: - database: - minLength: 1 - type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string - type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string - type: object - required: - - aliasesRef - - postgres - type: object - templateAnnotations: - additionalProperties: - type: string - type: object - templateLabels: - additionalProperties: - type: string - type: object - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - required: - - authentatication - - storage - type: object - status: - properties: - conditions: - items: - properties: - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - type: array - observedGeneration: - format: int64 - type: integer - operator: - properties: - controllerGitCommit: - minLength: 1 - type: string - controllerName: - minLength: 1 - type: string - controllerVersion: - minLength: 1 - type: string + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL + type: string + type: object type: object - replicas: - format: int32 - minimum: 0 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - description: Timestamp representing the server time when this object was created. - It is not guaranteed to be set in happens-before order across separate operations. - Clients may not set this value. It is represented in RFC3339 form and is in - UTC. - jsonPath: .metadata.creationTimestamp - name: Age - priority: 1 - type: date - - description: Human readable message describing the failure - jsonPath: .status.conditions[?(@.type=="Failed")].message - name: Failure - priority: 5 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - authentatication: + loggers: + default: + stdout: + level: INFO properties: - certificateRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - required: - - certificateRef + database: + properties: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL + type: string + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + type: object + files: + items: + properties: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL + type: string + sweeper: + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + volume: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + type: object + type: object + nullable: true + type: array + stdout: + properties: + level: + default: INFO + enum: + - DEBUG + - INFO + - WARNING + - ERROR + - FATAL + type: string + type: object type: object - image: - type: string - imagePullPolicy: - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logging: + metrics: properties: - level: - default: info - enum: - - debug - - info - - warning - - error - - fatal - - panic + enabled: + default: false + type: boolean + path: + default: /metrics + pattern: /.+ type: string + port: + default: 8001 + format: int32 + minimum: 1 + type: integer type: object - migrationEnabled: - type: boolean network: properties: ipFamilies: @@ -16711,6 +9789,48 @@ spec: additionalProperties: type: string type: object + proxy: + properties: + httpProxy: + pattern: https?://.+ + type: string + httpsProxy: + pattern: https?://.+ + type: string + noProxy: + default: + - 127.0.0.1 + - localhost + - .local + - .internal + items: + type: string + type: array + type: object + registry: + properties: + controllerURL: + pattern: https?://.+ + type: string + credentials: + properties: + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + username: + type: string + required: + - passwordRef + - username + type: object + url: + pattern: https?://.+ + type: string + required: + - controllerURL + - credentials + - url + type: object replicas: format: int32 minimum: 0 @@ -16746,48 +9866,728 @@ spec: x-kubernetes-int-or-string: true type: object type: object + secretRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string serviceAccountName: type: string storage: properties: - aliasesRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - postgres: + scanDataExports: properties: - database: - minLength: 1 + prefix: type: string - hosts: - items: - properties: - host: - minLength: 1 - type: string - port: - exclusiveMinimum: true - format: int32 - minimum: 0 - type: integer - required: - - host - type: object - minItems: 1 - type: array - parameters: - additionalProperties: - type: string + volumeSource: + default: + emptyDir: + sizeLimit: 1Gi + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object type: object - passwordRef: - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' - type: string - username: - minLength: 1 - type: string type: object required: - - aliasesRef - - postgres + - scanDataExports type: object templateAnnotations: additionalProperties: @@ -16797,6 +10597,20 @@ spec: additionalProperties: type: string type: object + tls: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + type: object + tokenService: + properties: + url: + pattern: https?://.+ + type: string + required: + - url + type: object tolerations: items: properties: @@ -16813,9 +10627,129 @@ spec: type: string type: object type: array + trace: + properties: + attributes: + additionalProperties: + type: string + type: object + enabled: + default: false + type: boolean + jaeger: + properties: + agent: + properties: + host: + type: string + port: + type: integer + type: object + collector: + properties: + endpoint: + type: string + passwordRef: + type: string + username: + type: string + required: + - endpoint + type: object + mode: + enum: + - collector + - agent + type: string + required: + - mode + type: object + namespace: + type: string + otel: + properties: + compression: + type: boolean + endpoint: + type: string + insecure: + type: boolean + timeout: + default: 10s + type: string + urlPath: + type: string + required: + - endpoint + - urlPath + type: object + provider: + enum: + - jaeger + - otel + type: string + sampleRate: + default: 1 + type: integer + required: + - provider + type: object + updateStrategyType: + default: RollingUpdate + type: string + workerPool: + properties: + backend: + default: redis + enum: + - redis + minLength: 1 + type: string + redisPool: + properties: + certificateRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + database: + default: 0 + format: int32 + maximum: 8 + minimum: 0 + type: integer + host: + minLength: 1 + type: string + idleTimeout: + default: 30s + pattern: ([0-9]+h)?([0-9]+m)?([0-9]+s)?([0-9]+ms)?([0-9]+us)?([0-9]+µs)?([0-9]+ns)? + type: string + namespace: + type: string + passwordRef: + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' + type: string + port: + exclusiveMinimum: true + format: int32 + minimum: 0 + type: integer + sentinelMasterSet: + type: string + required: + - host + type: object + workers: + default: 10 + format: int32 + minimum: 1 + type: integer + type: object required: - - authentatication - - storage + - core + - registry + - secretRef + - tokenService + - workerPool type: object status: properties: @@ -24734,8 +18668,6 @@ rules: - '*' - apiGroups: - goharbor.io - resources: - - chartmuseums verbs: - get - list @@ -24743,12 +18675,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums - cores - exporters - jobservices - - notaryservers - - notarysigners - portals - registries - registrycontrollers @@ -24764,12 +18693,9 @@ rules: - apiGroups: - goharbor.io resources: - - chartmuseums/finalizers - cores/finalizers - exporters/finalizers - jobservices/finalizers - - notaryservers/finalizers - - notarysigners/finalizers - portals/finalizers - registries/finalizers - registrycontrollers/finalizers @@ -24784,8 +18710,6 @@ rules: - watch - apiGroups: - goharbor.io - resources: - - chartmuseums/status verbs: - get - patch @@ -24992,32 +18916,24 @@ rules: - update - apiGroups: - goharbor.io - resources: - - notaryservers verbs: - get - list - watch - apiGroups: - goharbor.io - resources: - - notaryservers/status verbs: - get - patch - update - apiGroups: - goharbor.io - resources: - - notarysigners verbs: - get - list - watch - apiGroups: - goharbor.io - resources: - - notarysigners/status verbs: - get - patch @@ -25186,10 +19102,6 @@ subjects: --- apiVersion: v1 data: - chartmuseum-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" config.yaml: | - key: controllers-config-directory priority: 100 @@ -25237,14 +19149,6 @@ data: - key: max-reconcile priority: 200 value: "1" - notaryserver-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" - notarysigner-ctrl.yaml: | - - key: max-reconcile - priority: 200 - value: "1" portal-ctrl.yaml: | - key: max-reconcile priority: 200 @@ -25272,84 +19176,6 @@ metadata: --- apiVersion: v1 data: - chartmuseum-config.yaml.tmpl: | - {{- if .Spec.Server.TLS.Enabled }} - port: 8443 - - tls: - ca.cert: /etc/chartmuseum/ssl/ca.crt - cert: /etc/chartmuseum/ssl/tls.crt - key: /etc/chartmuseum/ssl/tls.key - {{- else }} - port: 8080 - {{- end }} - - allow.overwrite: {{ .Spec.Chart.AllowOverwrite }} - - auth: - anonymous.get: {{ .Spec.Authentication.AnonymousGet }} - {{- if .Spec.Authentication.Bearer }} - {{- if .Spec.Authentication.Bearer.CertificateRef }} - cert-path: /etc/chartmuseum/auth-certificates/tls.crt - {{- end }} - {{- if .Spec.Authentication.Bearer.Realm }} - realm: {{ .Spec.Authentication.Bearer.Realm }} - service: {{ .Spec.Authentication.Bearer.Service }} - {{- end }} - {{- end }} - - {{- if .Spec.Authentication.Bearer }} - bearer.auth: 1 - {{- end }} - - {{- if .Spec.Cache.Redis }} - {{- if .Spec.Cache.Redis.SentinelMasterSet }} - cache: redis_sentinel - {{- else }} - cache: redis - {{- end }} - cache.redis: - {{- if .Spec.Cache.Redis.SentinelMasterSet }} - mastername: {{ .Spec.Cache.Redis.SentinelMasterSet | quote }} - {{- end }} - {{- if .Spec.Cache.Redis.Port }} - addr: {{ printf "%s:%d" .Spec.Cache.Redis.Host .Spec.Cache.Redis.Port | quote }} - {{- else }} - addr: {{ .Spec.Cache.Redis.Host | quote }} - {{- end }} - # password: setted through environment variable - db: {{ .Spec.Cache.Redis.Database }} - {{- end }} - - context.path: '' - - debug: {{ .Spec.Log.Debug }} - - {{- if .Spec.Chart.Repo.DepthDynamic }} - depth.dynamic: {{ .Spec.Chart.Repo.DepthDynamic }} - {{- else }} - depth: {{ .Spec.Chart.Repo.Depth }} - {{- end }} - - disable: - api: {{ .Spec.Disable.API }} - delete: {{ .Spec.Disable.Delete }} - force.overwrite: {{ .Spec.Disable.ForceOverwrite }} - metrics: {{ .Spec.Disable.Metrics }} - statefiles: {{ .Spec.Disable.StateFiles }} - - index.limit: {{ .Spec.Chart.Index.ParallelLimit }} - - log: - health: {{ .Spec.Log.Health }} - json: {{ .Spec.Log.JSON }} - - max: - storage.objects: {{ .Spec.Chart.Storage.MaxStorageObjects }} - upload.size: {{ .Spec.Server.MaxUploadSize }} - - chart.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Chart }} - prov.post.form.field.name: {{ .Spec.Chart.PostFormFieldName.Provenance }} core-config.conf.tmpl: | appname = {{ .Name }} runmode = prod @@ -25438,91 +19264,6 @@ data: settings: # Customized settings of sweeper work_dir: /mnt/logs/{{ $i }} {{- end }} - notaryserver-config.json.tmpl: | - {{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} - { - "server": { - {{- if .Spec.TLS }} - "tls_cert_file": "/etc/notary-server/certificates/tls.crt", - "tls_key_file": "/etc/notary-server/certificates/tls.key", - {{- end }} - "http_addr": ":4443" - }, - "trust_service": { - {{- if .Spec.TrustService.Remote }} - {{- if .Spec.TrustService.Remote.Host }} - "hostname": "{{ .Spec.TrustService.Remote.Host }}", - {{- end }} - {{- if .Spec.TrustService.Remote.Port }} - "port": "{{ .Spec.TrustService.Remote.Port }}", - {{- end }} - {{- if .Spec.TrustService.Remote.CertificateRef }} - "tls_ca_file": "/etc/notary-server/trust-certificates/ca.crt", - "tls_client_cert": "/etc/notary-server/trust-certificates/tls.crt", - "tls_client_key": "/etc/notary-server/trust-certificates/tls.key", - {{- end }} - {{- if .Spec.TrustService.Remote.KeyAlgorithm }} - "key_algorithm": "{{ .Spec.TrustService.Remote.KeyAlgorithm }}", - {{- end }} - "type": "remote" - {{- else }} - "type": "local" - {{- end }} - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}" - }, - {{- if .Spec.Authentication }} - "auth": { - "type": "token", - "options": { - "realm": "{{ .Spec.Authentication.Token.Realm }}", - "service": "{{ .Spec.Authentication.Token.Service }}", - "issuer": "{{ .Spec.Authentication.Token.Issuer }}", - "rootcertbundle": "/etc/notary-server/auth-certificates/tls.crt", - "autoredirect": "{{ .Spec.Authentication.Token.AutoRedirect }}" - } - }, - {{- end }} - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } - } - notarysigner-config.json.tmpl: | - {{/* https://github.com/theupdateframework/notary/blob/master/docs/reference/server-config.md */}} - { - "server": { - "tls_cert_file": "/etc/notary-signer/certificates/tls.crt", - "tls_key_file": "/etc/notary-signer/certificates/tls.key", - "client_ca_file": "/etc/notary-signer/certificates/ca.crt", - "grpc_addr": ":7899" - }, - {{- if .Spec.Logging.Level }} - "logging": { - "level": "{{ .Spec.Logging.Level }}" - }, - {{- end }} - "storage": { - "backend": "postgres", - "db_url": "{{ .Spec.Storage.GetPasswordFieldKey | secretData .Spec.Storage.Postgres.PostgresConnection.PostgresCredentials.PasswordRef | .Spec.Storage.Postgres.GetDSN | toString }}", - "default_alias": "default" - }, - "caching": { - "max_age": { - "current_metadata": 300, - "consistent_metadata": 31536000 - } - } - } portal-config.conf.tmpl: | worker_processes auto; pid /tmp/nginx.pid; diff --git a/manifests/samples/full_stack.yaml b/manifests/samples/full_stack.yaml index 7fa00d43a..7fd8ccc31 100644 --- a/manifests/samples/full_stack.yaml +++ b/manifests/samples/full_stack.yaml @@ -54,7 +54,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain - minio.harbor.domain issuerRef: name: selfsigned-issuer @@ -84,12 +83,6 @@ spec: controller: default tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.harbor.domain - controller: default - tls: - certificateRef: sample-public-certificate internalTLS: enabled: true portal: {} @@ -102,13 +95,10 @@ spec: kind: Issuer metrics: enabled: true - chartmuseum: {} exporter: {} trivy: skipUpdate: false storage: {} - notary: - migrationEnabled: true database: kind: Zlando/PostgreSQL spec: diff --git a/manifests/samples/minimal_stack_fs.yaml b/manifests/samples/minimal_stack_fs.yaml index 1cffdd21d..0eb10b448 100644 --- a/manifests/samples/minimal_stack_fs.yaml +++ b/manifests/samples/minimal_stack_fs.yaml @@ -43,7 +43,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain issuerRef: name: selfsigned-issuer kind: Issuer diff --git a/manifests/samples/minimal_stack_incluster.yaml b/manifests/samples/minimal_stack_incluster.yaml index 315b41cdb..85ababfdc 100644 --- a/manifests/samples/minimal_stack_incluster.yaml +++ b/manifests/samples/minimal_stack_incluster.yaml @@ -54,7 +54,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain - minio.harbor.domain issuerRef: name: selfsigned-issuer diff --git a/manifests/samples/standard_stack.yaml b/manifests/samples/standard_stack.yaml index 53e496572..1b98bd082 100644 --- a/manifests/samples/standard_stack.yaml +++ b/manifests/samples/standard_stack.yaml @@ -136,7 +136,6 @@ metadata: spec: dnsNames: - core.harbor.domain - - notary.harbor.domain issuerRef: name: sample-public-certificate secretName: sample-public-certificate @@ -204,7 +203,6 @@ spec: passwordRef: harbor-redis port: 6379 version: 2.6.2 - chartmuseum: {} core: tokenIssuer: kind: Issuer @@ -216,18 +214,10 @@ spec: controller: default tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.harbor.domain - controller: default - tls: - certificateRef: sample-public-certificate externalURL: https://core.harbor.domain harborAdminPasswordRef: admin-core-secret-7274ck5bh5 internalTLS: enabled: true - notary: - migrationEnabled: true portal: templateAnnotations: foo: "bar" diff --git a/manifests/samples/standard_stack_fs.yaml b/manifests/samples/standard_stack_fs.yaml index fd75988b6..6559e713c 100644 --- a/manifests/samples/standard_stack_fs.yaml +++ b/manifests/samples/standard_stack_fs.yaml @@ -54,7 +54,6 @@ spec: secretName: sample-public-certificate dnsNames: - core.harbor.domain - - notary.harbor.domain - minio.harbor.domain issuerRef: name: selfsigned-issuer @@ -132,12 +131,6 @@ spec: controller: default tls: certificateRef: sample-public-certificate - notary: - ingress: - host: notary.harbor.domain - controller: default - tls: - certificateRef: sample-public-certificate internalTLS: enabled: true portal: {} @@ -150,7 +143,6 @@ spec: kind: Issuer metrics: enabled: true - chartmuseum: {} exporter: {} trivy: skipUpdate: false @@ -159,8 +151,6 @@ spec: claimName: sample-harbor-trivy-cache reportsPersistentVolume: claimName: sample-harbor-trivy-reports - notary: - migrationEnabled: true database: kind: Zlando/PostgreSQL spec: diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index 9bb13a4ed..2cf0f6960 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -121,9 +121,9 @@ func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, erro tryOwnsInputs: blder.tryOwnsInputs, } - src := &source.Kind{Type: &v1.CustomResourceDefinition{}} + src := &v1.CustomResourceDefinition{} hdler := &handler.Funcs{ - CreateFunc: func(event.CreateEvent, workqueue.RateLimitingInterface) { + CreateFunc: func(context.Context, event.CreateEvent, workqueue.TypedRateLimitingInterface[reconcile.Request]) { w.TryWatch() }, } @@ -191,16 +191,16 @@ func (w *tryWatcher) TryWatch() { continue } - src := &source.Kind{Type: own.object} - hdler := &handler.EnqueueRequestForOwner{ - OwnerType: w.forObject, - IsController: true, - } + var mgr manager.Manager + + hdler := handler.TypedEnqueueRequestForOwner[client.Object](mgr.GetScheme(), mgr.GetRESTMapper(), w.forObject, handler.OnlyControllerOwner()) allPredicates := append([]predicate.Predicate(nil), w.globalPredicates...) allPredicates = append(allPredicates, own.predicates...) - if err := w.ctrl.Watch(src, hdler, allPredicates...); err != nil { + source := source.Kind(mgr.GetCache(), own.object, hdler, allPredicates...) + + if err := w.ctrl.Watch(source); err != nil { w.log.Error(err, "Watch Source Failed", "crd", own.crdDependency) } else { w.log.Info("Watch Source Success", "crd", own.crdDependency) diff --git a/pkg/cluster/controllers/cache/utils.go b/pkg/cluster/controllers/cache/utils.go index 4a5f94d92..5a81f075a 100644 --- a/pkg/cluster/controllers/cache/utils.go +++ b/pkg/cluster/controllers/cache/utils.go @@ -47,7 +47,7 @@ func GenerateStoragePVC(storageClass, name, size string, labels map[string]strin Spec: corev1.PersistentVolumeClaimSpec{ StorageClassName: sc, AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{"storage": storage}, }, }, diff --git a/pkg/cluster/controllers/database/readiness.go b/pkg/cluster/controllers/database/readiness.go index cace69366..6a5f34bc8 100644 --- a/pkg/cluster/controllers/database/readiness.go +++ b/pkg/cluster/controllers/database/readiness.go @@ -6,11 +6,11 @@ import ( "os" "strings" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/pkg/cluster/controllers/database/api" "github.com/plotly/harbor-operator/pkg/cluster/lcm" - "github.com/pkg/errors" acidzalando "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" acidzalandov1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" corev1 "k8s.io/api/core/v1" @@ -25,11 +25,9 @@ import ( ) const ( - CoreDatabase = "core" - NotaryServerDatabase = "notaryserver" - NotarySignerDatabase = "notarysigner" - DefaultDatabaseUser = "harbor" - PsqlRunningStatus = "Running" + CoreDatabase = "core" + DefaultDatabaseUser = "harbor" + PsqlRunningStatus = "Running" ) // Readiness reconcile will check postgre sql cluster if that has available. diff --git a/pkg/cluster/controllers/database/utils.go b/pkg/cluster/controllers/database/utils.go index dd9a14d73..3e166e4ea 100644 --- a/pkg/cluster/controllers/database/utils.go +++ b/pkg/cluster/controllers/database/utils.go @@ -5,10 +5,10 @@ import ( "fmt" "strconv" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/pkg/cluster/controllers/database/api" "github.com/plotly/harbor-operator/pkg/config" - "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" ) @@ -31,11 +31,6 @@ func (p *PostgreSQLController) GetDatabases(harborcluster *goharborv1.HarborClus CoreDatabase: DefaultDatabaseUser, } - if harborcluster.Spec.Notary != nil { - databases[NotaryServerDatabase] = DefaultDatabaseUser - databases[NotarySignerDatabase] = DefaultDatabaseUser - } - return databases } diff --git a/pkg/cluster/controllers/harbor/harbor.go b/pkg/cluster/controllers/harbor/harbor.go index d73f77168..fb21310cf 100644 --- a/pkg/cluster/controllers/harbor/harbor.go +++ b/pkg/cluster/controllers/harbor/harbor.go @@ -131,10 +131,8 @@ func (harbor *Controller) getHarborCR(ctx context.Context, harborcluster *goharb JobService: spec.JobService, Registry: spec.Registry, RegistryController: spec.RegistryController, - ChartMuseum: spec.ChartMuseum, Exporter: spec.Exporter, Trivy: spec.Trivy, - Notary: spec.Notary, }, ImageSource: spec.ImageSource, Proxy: spec.Proxy, @@ -233,7 +231,7 @@ func (harbor *Controller) getDatabaseSpec(dependencies *lcm.CRStatusCollection) return nil } -// getStorageSecretForChartMuseum will get the secret name of chart museum storage config. +// getStorageSpec will get the storage config. func (harbor *Controller) getStorageSpec(dependencies *lcm.CRStatusCollection) *goharborv1.HarborStorageImageChartStorageSpec { p := harbor.getProperty(dependencies, goharborv1.ComponentStorage, lcm.StoragePropertyName) if p != nil { @@ -300,8 +298,4 @@ func injectS3CertToHarborComponents(harbor *goharborv1.Harbor) { if harbor.Spec.Trivy != nil { harbor.Spec.Trivy.CertificateRefs = append(harbor.Spec.Trivy.CertificateRefs, certRef) } - // inject cert to chartmuseum - if harbor.Spec.ChartMuseum != nil { - harbor.Spec.ChartMuseum.CertificateRefs = append(harbor.Spec.ChartMuseum.CertificateRefs, certRef) - } } diff --git a/pkg/cluster/controllers/storage/tenant.go b/pkg/cluster/controllers/storage/tenant.go index cfa778c1b..1826a24a9 100644 --- a/pkg/cluster/controllers/storage/tenant.go +++ b/pkg/cluster/controllers/storage/tenant.go @@ -6,13 +6,13 @@ import ( "reflect" "strings" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" harbormetav1 "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/pkg/cluster/controllers/common" miniov2 "github.com/plotly/harbor-operator/pkg/cluster/controllers/storage/minio/apis/minio.min.io/v2" "github.com/plotly/harbor-operator/pkg/cluster/lcm" "github.com/plotly/harbor-operator/pkg/resources/checksum" - "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" k8serror "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -280,7 +280,7 @@ func (m *MinIOController) getVolumeClaimTemplate(harborcluster *goharborv1.Harbo Spec: corev1.PersistentVolumeClaimSpec{ StorageClassName: &defaultStorageClass, AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: map[corev1.ResourceName]resource.Quantity{ corev1.ResourceStorage: resource.MustParse("10Gi"), }, diff --git a/pkg/image/components.go b/pkg/image/components.go index 693858eac..4c9a3c9f3 100644 --- a/pkg/image/components.go +++ b/pkg/image/components.go @@ -106,16 +106,13 @@ func RegisterTag(component, tag string, harborVersions ...string) { func init() { //nolint:gochecknoinits // Register the harbor components harborComponentImageNames := map[string]string{ - "chartmuseum": "chartmuseum-photon", - "core": "harbor-core", - "exporter": "harbor-exporter", - "jobservice": "harbor-jobservice", - "notaryserver": "notary-server-photon", - "notarysigner": "notary-signer-photon", - "portal": "harbor-portal", - "registry": "registry-photon", - "registryctl": "harbor-registryctl", - "trivy": "trivy-adapter-photon", + "core": "harbor-core", + "exporter": "harbor-exporter", + "jobservice": "harbor-jobservice", + "portal": "harbor-portal", + "registry": "registry-photon", + "registryctl": "harbor-registryctl", + "trivy": "trivy-adapter-photon", } for component, imageName := range harborComponentImageNames { RegisterRepository(component, "goharbor", "*") // the goharbor repository of dockerhub diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index 8e98f91c5..8ee09014a 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -5,19 +5,19 @@ import ( "fmt" "net/http" - "github.com/plotly/harbor-operator/pkg/config" - "github.com/plotly/harbor-operator/pkg/factories/logger" nettracing "github.com/opentracing-contrib/go-stdlib/nethttp" "github.com/ovh/configstore" "github.com/pkg/errors" + "github.com/plotly/harbor-operator/pkg/config" + "github.com/plotly/harbor-operator/pkg/factories/logger" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/transport" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" ) const ( - WebHookPort = 9443 MetricsPort = 8080 ProbePort = 5000 @@ -26,9 +26,10 @@ const ( func New(ctx context.Context, scheme *runtime.Scheme) (manager.Manager, error) { mgrConfig := ctrl.Options{ - MetricsBindAddress: fmt.Sprintf(":%d", MetricsPort), + Metrics: server.Options{ + BindAddress: fmt.Sprintf(":%d", MetricsPort), + }, LeaderElection: false, - Port: WebHookPort, HealthProbeBindAddress: fmt.Sprintf(":%d", ProbePort), Scheme: scheme, } @@ -57,8 +58,7 @@ func New(ctx context.Context, scheme *runtime.Scheme) (manager.Manager, error) { logger.Get(ctx).Info( "Manager initialized", - "Webhook.Port", mgrConfig.Port, - "Metrics.Address", mgrConfig.MetricsBindAddress, + "Metrics.Address", mgrConfig.Metrics.BindAddress, "Probe.Address", mgrConfig.HealthProbeBindAddress, "LeaderElection.Enabled", mgrConfig.LeaderElection, "LeaderElection.Namespace", mgrConfig.LeaderElectionNamespace, diff --git a/pkg/resources/statuscheck/basic_test.go b/pkg/resources/statuscheck/basic_test.go index cc7e7c6d4..e2b040197 100644 --- a/pkg/resources/statuscheck/basic_test.go +++ b/pkg/resources/statuscheck/basic_test.go @@ -4,13 +4,10 @@ import ( "context" "fmt" - . "github.com/plotly/harbor-operator/pkg/resources/statuscheck" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "sigs.k8s.io/kustomize/kstatus/status" + . "github.com/plotly/harbor-operator/pkg/resources/statuscheck" - goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" - "github.com/plotly/harbor-operator/apis/meta/v1alpha1" "github.com/plotly/harbor-operator/pkg/scheme" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -20,202 +17,6 @@ import ( // http://onsi.github.io/ginkgo/ to learn more about Ginkgo. var _ = Describe("Check the status", func() { - Context("Of a chartMuseum resource", func() { - var resource *goharborv1.ChartMuseum - var data *goharborv1.ChartMuseum - - BeforeEach(func() { - s, err := scheme.New(context.TODO()) - Expect(err).ToNot(HaveOccurred()) - - data = &goharborv1.ChartMuseum{} - gvks, _, err := s.ObjectKinds(data) - Expect(err).ToNot(HaveOccurred()) - - gvk := gvks[0] - data.SetGroupVersionKind(gvk) - - resource = data.DeepCopy() - }) - - AfterEach(func() { - if !CurrentGinkgoTestDescription().Failed { - return - } - - if data == nil { - return - } - - fmt.Fprintf(GinkgoWriter, "%+v", data.Status) - }) - - JustBeforeEach(func() { - data.DeepCopyInto(resource) - }) - - JustAfterEach(func() { - if resource != nil { - resource.DeepCopyInto(data) - resource = nil - } - }) - - Context("With empty status", func() { - BeforeEach(func() { - data.Status = v1alpha1.ComponentStatus{} - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - - Context("With observedGeneration mismatching generation", func() { - BeforeEach(func() { - data.SetGeneration(882) - data.Status.ObservedGeneration = 881 - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - - Context("With Observed Generation up to date", func() { - JustBeforeEach(func() { - data.Status.ObservedGeneration = data.GetGeneration() - }) - - Context("With missing replicas", func() { - BeforeEach(func() { - var replicasCount int32 = 3 - var replicasStatus int32 = 0 - data.Spec.Replicas = &replicasCount - data.Status.Replicas = &replicasStatus - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - - Context("With matching replicas count", func() { - BeforeEach(func() { - var replicasCount int32 = 3 - data.Spec.Replicas = &replicasCount - data.Status.Replicas = &replicasCount - }) - - Context("With processing condition", func() { - Context("To False", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionInProgress, - Status: corev1.ConditionFalse, - }) - }) - - It("Should be ready", func(done Done) { - defer close(done) - - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeTrue()) - }) - - Context("With error condition", func() { - Context("To False", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionFailed, - Status: corev1.ConditionFalse, - }) - }) - - It("Should be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeTrue()) - }) - }) - - Context("To True", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionFailed, - Status: corev1.ConditionTrue, - }) - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - }) - }) - - Context("To True", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionInProgress, - Status: corev1.ConditionTrue, - }) - }) - - It("Should not be ready", func(done Done) { - defer close(done) - - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - - Context("With error condition", func() { - Context("To False", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionFailed, - Status: corev1.ConditionFalse, - }) - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - - Context("To True", func() { - BeforeEach(func() { - data.Status.Conditions = append(data.Status.Conditions, v1alpha1.Condition{ - Type: status.ConditionFailed, - Status: corev1.ConditionTrue, - }) - }) - - It("Should not be ready", func() { - ok, err := BasicCheck(context.TODO(), resource) - Expect(err).ToNot(HaveOccurred()) - Expect(ok).To(BeFalse()) - }) - }) - }) - }) - }) - }) - }) - }) - Context("Of a deployment resource", func() { var resource *appsv1.Deployment var data *appsv1.Deployment diff --git a/pkg/rest/model/harbor_server.go b/pkg/rest/model/harbor_server.go index 4a20845f2..1395c73dd 100644 --- a/pkg/rest/model/harbor_server.go +++ b/pkg/rest/model/harbor_server.go @@ -3,9 +3,7 @@ package model import ( gruntime "github.com/go-openapi/runtime" hc "github.com/goharbor/go-client/pkg/harbor" - assistclient "github.com/goharbor/go-client/pkg/sdk/assist/client" v2client "github.com/goharbor/go-client/pkg/sdk/v2.0/client" - legacyclient "github.com/goharbor/go-client/pkg/sdk/v2.0/legacy/client" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" ) @@ -49,16 +47,6 @@ func NewHarborServer(url, username, password string, insecure bool) *HarborServe } } -// HarborAssistClient keeps Harbor client. -type HarborAssistClient struct { - Client *assistclient.HarborAPI -} - -// HarborLegacyClient keeps Harbor client. -type HarborLegacyClient struct { - Client *legacyclient.HarborAPI -} - // HarborClientV2 keeps Harbor client v2. type HarborClientV2 struct { Client *v2client.HarborAPI diff --git a/pkg/setup/controllers.go b/pkg/setup/controllers.go index f9ab49c6f..23d6172ad 100644 --- a/pkg/setup/controllers.go +++ b/pkg/setup/controllers.go @@ -6,8 +6,9 @@ import ( "os" "path" + "github.com/ovh/configstore" + "github.com/pkg/errors" "github.com/plotly/harbor-operator/controllers" - "github.com/plotly/harbor-operator/controllers/goharbor/chartmuseum" "github.com/plotly/harbor-operator/controllers/goharbor/configuration" "github.com/plotly/harbor-operator/controllers/goharbor/core" "github.com/plotly/harbor-operator/controllers/goharbor/exporter" @@ -16,8 +17,6 @@ import ( "github.com/plotly/harbor-operator/controllers/goharbor/harborserverconfiguration" "github.com/plotly/harbor-operator/controllers/goharbor/jobservice" "github.com/plotly/harbor-operator/controllers/goharbor/namespace" - "github.com/plotly/harbor-operator/controllers/goharbor/notaryserver" - "github.com/plotly/harbor-operator/controllers/goharbor/notarysigner" "github.com/plotly/harbor-operator/controllers/goharbor/portal" "github.com/plotly/harbor-operator/controllers/goharbor/project" "github.com/plotly/harbor-operator/controllers/goharbor/pullsecretbinding" @@ -26,8 +25,6 @@ import ( "github.com/plotly/harbor-operator/pkg/config" commonCtrl "github.com/plotly/harbor-operator/pkg/controller" "github.com/plotly/harbor-operator/pkg/factories/logger" - "github.com/ovh/configstore" - "github.com/pkg/errors" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -41,10 +38,7 @@ var controllersBuilder = map[controllers.Controller]func(context.Context, *confi controllers.Harbor: harbor.New, controllers.JobService: jobservice.New, controllers.Registry: registry.New, - controllers.NotaryServer: notaryserver.New, - controllers.NotarySigner: notarysigner.New, controllers.Portal: portal.New, - controllers.ChartMuseum: chartmuseum.New, controllers.Trivy: trivy.New, controllers.HarborCluster: harborcluster.New, // old configmap controller is planned to be removed at v1.3, diff --git a/pkg/setup/webhooks.go b/pkg/setup/webhooks.go index 45a5c5779..c42ba3429 100644 --- a/pkg/setup/webhooks.go +++ b/pkg/setup/webhooks.go @@ -4,10 +4,10 @@ import ( "context" "fmt" + "github.com/ovh/configstore" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/controllers" "github.com/plotly/harbor-operator/pkg/config" - "github.com/ovh/configstore" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -16,7 +16,6 @@ const ( ) var webhooksBuilder = map[controllers.Controller][]WebHook{ - controllers.ChartMuseum: {&goharborv1.ChartMuseum{}}, controllers.Core: {&goharborv1.Core{}}, controllers.Exporter: {&goharborv1.Exporter{}}, controllers.Harbor: {&goharborv1.Harbor{}}, @@ -25,8 +24,6 @@ var webhooksBuilder = map[controllers.Controller][]WebHook{ controllers.Portal: {&goharborv1.Portal{}}, controllers.RegistryController: {&goharborv1.RegistryController{}}, controllers.Trivy: {&goharborv1.Trivy{}}, - controllers.NotaryServer: {&goharborv1.NotaryServer{}}, - controllers.NotarySigner: {&goharborv1.NotarySigner{}}, controllers.HarborCluster: {&goharborv1.HarborCluster{}}, controllers.HarborProject: {&goharborv1.HarborProject{}}, } diff --git a/webhooks/harborserverconfiguration/webhook.go b/webhooks/harborserverconfiguration/webhook.go index de89f0fc4..96bb0d94b 100644 --- a/webhooks/harborserverconfiguration/webhook.go +++ b/webhooks/harborserverconfiguration/webhook.go @@ -11,6 +11,7 @@ import ( "github.com/umisama/go-regexpcache" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + mgr "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) @@ -19,17 +20,19 @@ import ( type Validator struct { Client client.Client Log logr.Logger - decoder *admission.Decoder + decoder admission.Decoder } var ( - _ admission.Handler = (*Validator)(nil) - _ admission.DecoderInjector = (*Validator)(nil) + _ admission.Handler = (*Validator)(nil) ) func (h *Validator) Handle(ctx context.Context, req admission.Request) admission.Response { hsc := &goharborv1.HarborServerConfiguration{} + var mgr mgr.Manager + h.decoder = admission.NewDecoder(mgr.GetScheme()) + err := h.decoder.Decode(req, hsc) if err != nil { return admission.Errored(http.StatusBadRequest, err) @@ -59,12 +62,6 @@ func (h *Validator) Handle(ctx context.Context, req admission.Request) admission return admission.Allowed("") } -func (h *Validator) InjectDecoder(decoder *admission.Decoder) error { - h.decoder = decoder - - return nil -} - func (h *Validator) SetupWebhookWithManager(mgr ctrl.Manager) error { return ctrl.NewWebhookManagedBy(mgr).For(&goharborv1.HarborServerConfiguration{}).Complete() } diff --git a/webhooks/pod/mutate_image_path.go b/webhooks/pod/mutate_image_path.go index 04c41e014..4054f3c27 100644 --- a/webhooks/pod/mutate_image_path.go +++ b/webhooks/pod/mutate_image_path.go @@ -8,14 +8,15 @@ import ( "strings" "github.com/go-logr/logr" + "github.com/pkg/errors" goharborv1 "github.com/plotly/harbor-operator/apis/goharbor.io/v1beta1" "github.com/plotly/harbor-operator/pkg/rule" "github.com/plotly/harbor-operator/pkg/utils/consts" - "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" apierr "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" + mgr "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" ) @@ -25,13 +26,16 @@ import ( type ImagePathRewriter struct { Client client.Client Log logr.Logger - decoder *admission.Decoder + decoder admission.Decoder } // Handle the admission webhook for mutating the image path of deploying pods. func (ipr *ImagePathRewriter) Handle(ctx context.Context, req admission.Request) admission.Response { //nolint:funlen,gocognit pod := &corev1.Pod{} + var mgr mgr.Manager + ipr.decoder = admission.NewDecoder(mgr.GetScheme()) + err := ipr.decoder.Decode(req, pod) if err != nil { return admission.Errored(http.StatusBadRequest, err) @@ -218,14 +222,6 @@ func (ipr *ImagePathRewriter) lookupDefaultHarborServerConfig(ctx context.Contex return nil, nil } -// A decoder will be automatically injected. -// InjectDecoder injects the decoder. -func (ipr *ImagePathRewriter) InjectDecoder(d *admission.Decoder) error { - ipr.decoder = d - - return nil -} - func (ipr *ImagePathRewriter) getPodNamespace(ctx context.Context, ns string) (*corev1.Namespace, error) { namespace := &corev1.Namespace{}