diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml index bb20d3578cf..aa7bdcecedf 100644 --- a/.github/workflows/goreleaser.yml +++ b/.github/workflows/goreleaser.yml @@ -31,4 +31,4 @@ jobs: uses: goreleaser/goreleaser-action@v5 with: version: latest - args: release --skip-publish --clean --snapshot + args: release --skip=publish --clean --snapshot diff --git a/.github/workflows/kubernetes-tests.yml b/.github/workflows/kubernetes-tests.yml index 102742ffedd..85124f4d5ed 100644 --- a/.github/workflows/kubernetes-tests.yml +++ b/.github/workflows/kubernetes-tests.yml @@ -255,7 +255,6 @@ jobs: - name: Test PolicyBinding CRD and sts call on kind run: | "${GITHUB_WORKSPACE}/testing/test-policy-binding.sh" - helm: timeout-minutes: 30 # The type of runner that the job will run on @@ -321,3 +320,4 @@ jobs: chmod +x kubectl mv kubectl /usr/local/bin "${GITHUB_WORKSPACE}/testing/check-helm.sh" + diff --git a/.gitignore b/.gitignore index 11f6a880ff2..4bb4ac3b183 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,8 @@ minio-operator !tenant/ .idea/ dist/ -kubectl-minio/kubectl-minio *.minisig *.zip -kubectl-minio/crds *.log .vscode minio.yaml diff --git a/.goreleaser.yml b/.goreleaser.yml index d8ed4b55e80..6556804ba5e 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -15,7 +15,7 @@ before: hooks: - make clean - make swagger-gen - - go mod tidy -compat=1.19 + - go mod tidy -compat=1.21.8 - go mod download builds: @@ -33,32 +33,6 @@ builds: - -s -w -X github.com/minio/operator/pkg.ReleaseTag={{.Tag}} -X github.com/minio/operator/pkg.CommitID={{.FullCommit}} -X github.com/minio/operator/pkg.Version={{.Version}} -X github.com/minio/operator/pkg.ShortCommitID={{.ShortCommit}} -X github.com/minio/operator/pkg.ReleaseTime={{.Date}} flags: - -trimpath - hooks: - post: ./package.sh {{ .Path }} - - - id: kubectl-minio - dir: kubectl-minio - binary: kubectl-minio - goos: - - linux - - darwin - - windows - goarch: - - amd64 - - arm64 - - ppc64le - - s390x - ignore: - - goos: windows - goarch: arm64 - env: - - CGO_ENABLED=0 - ldflags: - - -s -w -X github.com/minio/kubectl-minio/cmd.version={{.Tag}} - flags: - - -trimpath - hooks: - post: ./package.sh {{ .Path }} archives: - allow_different_binary_count: true diff --git a/Dockerfile b/Dockerfile index 165e4d930f2..db40eed2bbb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ -FROM registry.access.redhat.com/ubi9/ubi-minimal:9.2 as build +FROM registry.access.redhat.com/ubi9/ubi-minimal:latest as build RUN microdnf update -y --nodocs && microdnf install ca-certificates -y --nodocs -FROM registry.access.redhat.com/ubi9/ubi-micro:9.2 +FROM registry.access.redhat.com/ubi9/ubi-micro:latest ARG TAG diff --git a/Makefile b/Makefile index fb36cd64aa7..46b6c206919 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,6 @@ HELM_TEMPLATES=$(HELM_HOME)/templates KUSTOMIZE_HOME=resources KUSTOMIZE_CRDS=$(KUSTOMIZE_HOME)/base/crds/ -PLUGIN_HOME=kubectl-minio all: build @@ -28,19 +27,21 @@ getdeps: @echo "Installing golangci-lint" && \ go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2 && \ echo "Installing govulncheck" && \ - go install golang.org/x/vuln/cmd/govulncheck@latest + go install golang.org/x/vuln/cmd/govulncheck@latest &&\ + echo "installng gopls" && \ + go install golang.org/x/tools/gopls@latest verify: getdeps govet lint binary: @CGO_ENABLED=0 GOOS=linux go build -trimpath --ldflags $(LDFLAGS) -o minio-operator ./cmd/operator -operator: assets binary +operator: binary docker: operator - @docker build --no-cache -t $(TAG) . + @docker buildx build --no-cache --load --platform linux/$(GOARCH) -t $(TAG) . -build: regen-crd verify plugin operator docker +build: regen-crd verify operator docker install: all @@ -65,26 +66,17 @@ clean: @rm -rf dist/ regen-crd: - @go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.11.1 + @go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.14.0 @${GOPATH}/bin/controller-gen crd:maxDescLen=0,generateEmbeddedObjectMeta=true paths="./..." output:crd:artifacts:config=$(KUSTOMIZE_CRDS) @sed 's#namespace: minio-operator#namespace: {{ .Release.Namespace }}#g' resources/base/crds/minio.min.io_tenants.yaml > $(HELM_TEMPLATES)/minio.min.io_tenants.yaml @sed 's#namespace: minio-operator#namespace: {{ .Release.Namespace }}#g' resources/base/crds/sts.min.io_policybindings.yaml > $(HELM_TEMPLATES)/sts.min.io_policybindings.yaml + @sed 's#namespace: minio-operator#namespace: {{ .Release.Namespace }}#g' resources/base/crds/job.min.io_miniojobs.yaml > $(HELM_TEMPLATES)/job.min.io_jobs.yaml regen-crd-docs: @echo "Installing crd-ref-docs" && GO111MODULE=on go install -v github.com/elastic/crd-ref-docs@latest @${GOPATH}/bin/crd-ref-docs --source-path=./pkg/apis/minio.min.io/v2 --config=docs/templates/config.yaml --renderer=asciidoctor --output-path=docs/tenant_crd.adoc --templates-dir=docs/templates/asciidoctor/ @${GOPATH}/bin/crd-ref-docs --source-path=./pkg/apis/sts.min.io/v1alpha1 --config=docs/templates/config.yaml --renderer=asciidoctor --output-path=docs/policybinding_crd.adoc --templates-dir=docs/templates/asciidoctor/ - -plugin: regen-crd - @echo "Building 'kubectl-minio' binary" - @(cd $(PLUGIN_HOME); \ - go vet ./... && \ - go test -race ./... && \ - GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean && \ - GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=5m --config ../.golangci.yml) - -plugin-binary: plugin - @(cd $(PLUGIN_HOME) && CGO_ENABLED=0 go build -trimpath --ldflags $(LDFLAGS) -o kubectl-minio .) + @${GOPATH}/bin/crd-ref-docs --source-path=./pkg/apis/job.min.io/v1alpha1 --config=docs/templates/config.yaml --renderer=asciidoctor --output-path=docs/job_crd.adoc --templates-dir=docs/templates/asciidoctor/ generate-code: @./k8s/update-codegen.sh @@ -92,8 +84,13 @@ generate-code: generate-openshift-manifests: @./olm.sh -release: assets generate-openshift-manifests +helm-reindex: + @echo "Re-indexing helm chart release" + @./helm-reindex.sh + +release: assets @./release.sh + @./olm.sh apply-gofmt: @echo "Applying gofmt to all generated an existing files" diff --git a/README.md b/README.md index fb406567be1..b7afda2999c 100644 --- a/README.md +++ b/README.md @@ -47,15 +47,6 @@ status. For more complete documentation on using the MinIO Console, see the [MinIO Console Github Repository](https://github.com/minio/console). -## MinIO Operator and `kubectl` Plugin - -The MinIO Operator extends the Kubernetes API to support deploying MinIO-specific -resources as a Tenant in a Kubernetes cluster. - -The MinIO `kubectl minio` plugin wraps the Operator to provide a simplified interface -for deploying and managing MinIO Tenants in a Kubernetes cluster through the -`kubectl` command line tool. - # Deploy the MinIO Operator and Create a Tenant This procedure installs the MinIO Operator and creates a 4-node MinIO Tenant for supporting object storage operations in @@ -65,10 +56,12 @@ a Kubernetes cluster. ### Kubernetes 1.21 or Later -Starting with Operator v5.0.0, MinIO requires Kubernetes version 1.21.0 or later. You must upgrade your Kubernetes cluster to 1.21.0 or later to use Operator +Starting with Operator v5.0.0, MinIO requires Kubernetes version 1.21.0 or later. You must upgrade your Kubernetes +cluster to 1.21.0 or later to use Operator v5.0.0+. -Starting with Operator v4.0.0, MinIO requires Kubernetes version 1.19.0 or later. Previous versions of the Operator supported Kubernetes 1.17.0 or later. You must upgrade your Kubernetes cluster to 1.19.0 or later to use Operator +Starting with Operator v4.0.0, MinIO requires Kubernetes version 1.19.0 or later. Previous versions of the Operator +supported Kubernetes 1.17.0 or later. You must upgrade your Kubernetes cluster to 1.19.0 or later to use Operator v4.0.0+. This procedure assumes the host machine has [`kubectl`](https://kubernetes.io/docs/tasks/tools) installed and configured @@ -80,7 +73,7 @@ MinIO supports no more than *one* MinIO Tenant per Namespace. The following `kub for the MinIO Tenant. ```sh -kubectl create namespace minio-tenant-1 +kubectl create namespace minio-tenant ``` The MinIO Operator Console supports creating a namespace as part of the Tenant Creation procedure. @@ -165,47 +158,14 @@ performance: ## Procedure -### 1) Install the MinIO Operator - -Run the following commands to install the MinIO Operator and Plugin using the Kubernetes ``krew`` plugin manager: - -```sh -kubectl krew update -kubectl krew install minio -``` - -See the ``krew`` [installation documentation](https://krew.sigs.k8s.io/docs/user-guide/setup/install/) for instructions -on installing ``krew``. +### 1) Install the MinIO Operator via Kustomization -Run the following command to verify installation of the plugin: +The standard `kubectl` tool ships with support +for [kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/) out of the box, so you can +use that to install MiniO Operator. ```sh -kubectl minio version -``` - -As an alternative to `krew`, you can download the `kubectl-minio` plugin from -the [Operator Releases Page](https://github.com/minio/operator/releases). Download the `kubectl-minio` package -appropriate for your operating system and extract the contents as `kubectl-minio`. Set the `kubectl-minio` binary to be -executable (e.g. `chmod +x`) and place it in your system `PATH`. - -For example, the following code downloads the latest stable version of the MinIO Kubernetes Plugin and installs it to -the system ``$PATH``. The example assumes a Linux operating system: - -```sh -wget -qO- https://github.com/minio/operator/releases/latest/download/kubectl-minio_linux_amd64_v1.zip | sudo bsdtar -xvf- -C /usr/local/bin -sudo chmod +x /usr/local/bin/kubectl-minio -``` - -Run the following command to verify installation of the plugin: - -```sh -kubectl minio version -``` - -Run the following command to initialize the Operator: - -```sh -kubectl minio init +kubectl kustomize github.com/minio/operator\?ref=v5.0.14 ``` Run the following command to verify the status of the Operator: @@ -227,24 +187,46 @@ interface for creating and managing MinIO Tenants. The `minio-operator-*` pod runs the MinIO Operator itself. -### 2) Access the Operator Console +### 2) Access the Operator Console via NodePort -Run the following command to create a local proxy to the MinIO Operator -Console: +Get the token: ```sh -kubectl minio proxy -n minio-operator +kubectl apply -f - <. // -// Package api MinIO Console Server +// Package api MinIO Operator // // Schemes: // http diff --git a/api/embedded_spec.go b/api/embedded_spec.go index d9cc9295826..0ff2a2f3f59 100644 --- a/api/embedded_spec.go +++ b/api/embedded_spec.go @@ -47,7 +47,7 @@ func init() { ], "swagger": "2.0", "info": { - "title": "MinIO Console Server", + "title": "MinIO Operator", "version": "0.1.0" }, "basePath": "/api/v1", @@ -4778,7 +4778,7 @@ func init() { ], "swagger": "2.0", "info": { - "title": "MinIO Console Server", + "title": "MinIO Operator", "version": "0.1.0" }, "basePath": "/api/v1", diff --git a/api/encryption-handlers.go b/api/encryption-handlers.go index 5d43a9730e3..986e5324adb 100644 --- a/api/encryption-handlers.go +++ b/api/encryption-handlers.go @@ -56,15 +56,25 @@ const ( const ( // KesConfigVersion1 identifier v1 + // For KES releases before 2023-04-03T16-41-28Z and versions below v0.20.0 KesConfigVersion1 = "v1" // KesConfigVersion2 identifier v2 + // For KES releases after 2023-04-03T16-41-28Z and versions above v0.20.0 + // This corresponds to the rename of the `keys` sections to `keystore` in the kes server-config.yaml and some more fields added. + // See https://github.com/minio/kes/pull/342 KesConfigVersion2 = "v2" + // KesConfigVersion3 identifier v3. + // For KES releases after 2023-11-09T17-35-47Z + // This corresponds to the deprecation of the `--key`, `--cert` and `--auth` kes command arguments. + // See https://github.com/minio/kes/pull/414 + KesConfigVersion3 = "v3" ) // KesConfigVersionsMap is a map of kes config version types var KesConfigVersionsMap = map[string]interface{}{ KesConfigVersion1: kes.ServerConfigV1{}, KesConfigVersion2: kes.ServerConfigV2{}, + KesConfigVersion3: kes.ServerConfigV2{}, } type configVersion func(clientCrtIdentity string, encryptionCfg *models.EncryptionConfiguration, mTLSCertificates map[string][]byte) ([]byte, error) @@ -311,7 +321,7 @@ func tenantEncryptionInfo(ctx context.Context, operatorClient OperatorClientI, c return nil, err } if rawConfiguration, ok := configSecret.Data["server-config.yaml"]; ok { - kesConfigVersion, err := getKesConfigVersion(encryptConfig.Image) + kesConfigVersion, err := GetKesConfigVersion(encryptConfig.Image) if err != nil { return nil, err } @@ -683,7 +693,7 @@ func createOrReplaceKesConfigurationSecrets(ctx context.Context, clientSet K8sCl serverRawConfig = []byte(encryptionCfg.Raw) // verify provided configuration is in valid YAML format - cv, err := getKesConfigVersion(image) + cv, err := GetKesConfigVersion(image) if err != nil { return nil, nil, err } @@ -1105,7 +1115,7 @@ func createKesConfigV2(clientCrtIdentity string, encryptionCfg *models.Encryptio // getKesConfigMethod identify the config method to use based from the KES image name func getKesConfigMethod(image string) (configVersion, error) { - version, err := getKesConfigVersion(image) + version, err := GetKesConfigVersion(image) if err != nil { return nil, err } @@ -1118,8 +1128,11 @@ func getKesConfigMethod(image string) (configVersion, error) { } } -func getKesConfigVersion(image string) (string, error) { - version := KesConfigVersion2 +// GetKesConfigVersion Identifies the "Operator level" KES config version by evaluating the KES container tag. +// At some point KES versions were published using semantic versioning and date-time versioning later on, +// this method takes that into consideration to determine the right config to apply to KES containers. +func GetKesConfigVersion(image string) (string, error) { + version := KesConfigVersion3 imageStrings := strings.Split(image, ":") var imageTag string @@ -1134,7 +1147,7 @@ func getKesConfigVersion(image string) (string, error) { } if imageTag == "latest" { - return KesConfigVersion2, nil + return KesConfigVersion3, nil } // When the image tag is semantic version is config v1 @@ -1143,7 +1156,10 @@ func getKesConfigVersion(image string) (string, error) { if semver.Compare(imageTag, "v0.22.0") < 0 { return KesConfigVersion1, nil } - return KesConfigVersion2, nil + if semver.Compare(imageTag, "v0.23.0") < 0 { + return KesConfigVersion2, nil + } + return KesConfigVersion3, nil } releaseTagNoArch := imageTag @@ -1157,16 +1173,34 @@ func getKesConfigVersion(image string) (string, error) { } // v0.22.0 is the initial image version for Kes config v2, any time format came after and is v2 - _, err := miniov2.ReleaseTagToReleaseTime(releaseTagNoArch) + // v0.23.0 deprecated `--key`, `--cert` and `--auth` flags, for this is v3 config + imageVersionTime, err := miniov2.ReleaseTagToReleaseTime(releaseTagNoArch) if err != nil { // could not parse semversion either, returning error return "", fmt.Errorf("could not identify KES version from image TAG: %s", releaseTagNoArch) } - // Leaving this snippet as comment as this will helpful to compare in future config versions - // kesv2ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-04-03T16-41-28Z") - // if imageVersionTime.Before(kesv2ReleaseTime) { - // version = kesConfigVersion2 - // } + kesv2ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-04-03T16-41-28Z") + kesv3ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-11-09T17-35-47Z") + + if imageVersionTime.Equal(kesv2ReleaseTime) { + return KesConfigVersion2, nil + } + + if imageVersionTime.Equal(kesv3ReleaseTime) { + return KesConfigVersion3, nil + } + + if imageVersionTime.Before(kesv2ReleaseTime) { + return KesConfigVersion1, nil + } + + if imageVersionTime.Before(kesv3ReleaseTime) { + return KesConfigVersion2, nil + } + + if imageVersionTime.After(kesv3ReleaseTime) { + return KesConfigVersion3, nil + } return version, nil } diff --git a/api/encryption-handlers_test.go b/api/encryption-handlers_test.go index e4d48c9ff7f..37e2fadefe3 100644 --- a/api/encryption-handlers_test.go +++ b/api/encryption-handlers_test.go @@ -30,7 +30,6 @@ import ( "github.com/minio/operator/pkg/kes" "gopkg.in/yaml.v2" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -101,7 +100,7 @@ func (suite *TenantTestSuite) TestTenantUpdateEncryptionAWSWithoutError() { }, }, } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { @@ -201,7 +200,7 @@ func (suite *TenantTestSuite) TestTenantUpdateEncryptionAzureWithoutError() { } func (suite *TenantTestSuite) prepareEncryptionUpdateMocksNoError() { - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { diff --git a/api/errors.go b/api/errors.go index fa2377a20a0..30b8fca177f 100644 --- a/api/errors.go +++ b/api/errors.go @@ -23,7 +23,7 @@ import ( "strings" "github.com/go-openapi/swag" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/minio-go/v7" "github.com/minio/operator/models" ) diff --git a/api/idp-handlers_test.go b/api/idp-handlers_test.go index 5049550ac05..60887d04764 100644 --- a/api/idp-handlers_test.go +++ b/api/idp-handlers_test.go @@ -26,7 +26,6 @@ import ( "github.com/minio/operator/models" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -86,7 +85,7 @@ func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithSecretCreation }, }, nil } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, errors.New("mock-create-error") } params, _ := suite.initUpdateTenantIdentityProviderRequest() @@ -102,7 +101,7 @@ func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithoutError() { opClientTenantUpdateMock = func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { return &miniov2.Tenant{}, nil } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } params, _ := suite.initUpdateTenantIdentityProviderRequest() diff --git a/api/k8s_client_mock.go b/api/k8s_client_mock.go index 111b01a640c..3045289d788 100644 --- a/api/k8s_client_mock.go +++ b/api/k8s_client_mock.go @@ -20,7 +20,6 @@ import ( "context" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -28,8 +27,8 @@ import ( type k8sClientMock struct{} var ( - k8sClientGetResourceQuotaMock func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) - k8sClientGetNameSpaceMock func(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Namespace, error) + k8sClientGetResourceQuotaMock func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*corev1.ResourceQuota, error) + k8sClientGetNameSpaceMock func(ctx context.Context, name string, opts metav1.GetOptions) (*corev1.Namespace, error) k8sClientStorageClassesMock func(ctx context.Context, opts metav1.ListOptions) (*storagev1.StorageClassList, error) k8sClientGetConfigMapMock func(ctx context.Context, namespace, configMap string, opts metav1.GetOptions) (*corev1.ConfigMap, error) @@ -40,17 +39,17 @@ var ( k8sClientDeletePodCollectionMock func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error k8sClientDeleteSecretMock func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error k8sClientDeleteSecretsCollectionMock func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - k8sClientCreateSecretMock func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) - k8sClientUpdateSecretMock func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) + k8sClientCreateSecretMock func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) + k8sClientUpdateSecretMock func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) k8sclientGetSecretMock func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) k8sclientGetServiceMock func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) ) -func (c k8sClientMock) getResourceQuota(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { +func (c k8sClientMock) getResourceQuota(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*corev1.ResourceQuota, error) { return k8sClientGetResourceQuotaMock(ctx, namespace, resource, opts) } -func (c k8sClientMock) getNamespace(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Namespace, error) { +func (c k8sClientMock) getNamespace(ctx context.Context, name string, opts metav1.GetOptions) (*corev1.Namespace, error) { return k8sClientGetNameSpaceMock(ctx, name, opts) } @@ -86,11 +85,11 @@ func (c k8sClientMock) deleteSecretsCollection(ctx context.Context, namespace st return k8sClientDeleteSecretsCollectionMock(ctx, namespace, opts, listOpts) } -func (c k8sClientMock) createSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { +func (c k8sClientMock) createSecret(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return k8sClientCreateSecretMock(ctx, namespace, secret, opts) } -func (c k8sClientMock) updateSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) { +func (c k8sClientMock) updateSecret(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { return k8sClientUpdateSecretMock(ctx, namespace, secret, opts) } diff --git a/api/operator_subnet.go b/api/operator_subnet.go index fd2367cab86..3a5959c7a3e 100644 --- a/api/operator_subnet.go +++ b/api/operator_subnet.go @@ -27,7 +27,6 @@ import ( "github.com/minio/operator/api/operations/operator_api" "github.com/minio/operator/models" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" xhttp "github.com/minio/operator/pkg/http" "github.com/minio/operator/pkg/subnet" corev1 "k8s.io/api/core/v1" @@ -154,7 +153,7 @@ func getTenantsToRegister(ctx context.Context, session *models.Principal, k8sCli if err != nil { return nil, err } - tenantStructs := make([]tenantInterface, len(tenantList.Items)) + var tenantStructs []tenantInterface for _, tenant := range tenantList.Items { svcURL := tenant.GetTenantServiceURL() mAdmin, err := getTenantAdminClient(ctx, k8sClient, &tenant, svcURL) @@ -168,7 +167,7 @@ func getTenantsToRegister(ctx context.Context, session *models.Principal, k8sCli func registerTenants(ctx context.Context, k8sClient K8sClientI, tenants []tenantInterface, apiKey string) (*models.OperatorSubnetRegisterAPIKeyResponse, *models.Error) { for _, tenant := range tenants { - if err := registerTenant(ctx, k8sClient, tenant.mAdminClient, tenant.tenant, apiKey); err != nil { + if err := registerTenant(ctx, tenant.mAdminClient, apiKey); err != nil { return nil, ErrorWithContext(ctx, err) } } @@ -202,7 +201,7 @@ func SubnetRegisterWithAPIKey(ctx context.Context, minioClient MinioAdmin, apiKe return true, nil } -func registerTenant(ctx context.Context, k8sClient K8sClientI, adminClient MinioAdmin, tenant v2.Tenant, apiKey string) error { +func registerTenant(ctx context.Context, adminClient MinioAdmin, apiKey string) error { _, err := SubnetRegisterWithAPIKey(ctx, adminClient, apiKey) return err } diff --git a/api/operator_subnet_test.go b/api/operator_subnet_test.go index 098835a374a..1e9601fd03c 100644 --- a/api/operator_subnet_test.go +++ b/api/operator_subnet_test.go @@ -26,7 +26,7 @@ import ( "os" "testing" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/operator/api/operations" "github.com/minio/operator/api/operations/operator_api" "github.com/minio/operator/models" @@ -35,7 +35,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -62,7 +61,7 @@ func (suite *OperatorSubnetTestSuite) SetupSuite() { suite.registerAPIKeyServer = httptest.NewServer(http.HandlerFunc(suite.registerAPIKeyHandler)) suite.k8sClient = k8sClientMock{} suite.adminClient = AdminClientMock{} - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return &corev1.Secret{}, nil } k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { diff --git a/api/pool-handlers_test.go b/api/pool-handlers_test.go index 7a1a54d7481..ee264b4b829 100644 --- a/api/pool-handlers_test.go +++ b/api/pool-handlers_test.go @@ -187,7 +187,7 @@ func (suite *TenantTestSuite) TestUpdateTenantPoolsWithoutError() { Pools: []miniov2.Pool{{ VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: resource.MustParse("1Gi"), }, diff --git a/api/subnet-utils.go b/api/subnet-utils.go index 183ba03eb7d..62ebfe97c62 100644 --- a/api/subnet-utils.go +++ b/api/subnet-utils.go @@ -32,7 +32,7 @@ import ( "strings" "time" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" mc "github.com/minio/mc/cmd" "github.com/tidwall/gjson" "golang.org/x/crypto/ssh/terminal" diff --git a/api/tenant-add-handlers.go b/api/tenant-add-handlers.go index 719cfe10eff..5d12e0b50df 100644 --- a/api/tenant-add-handlers.go +++ b/api/tenant-add-handlers.go @@ -54,7 +54,7 @@ func createTenant(ctx context.Context, params operator_api.CreateTenantParams, c accessKey, secretKey := getTenantCredentials(tenantReq.AccessKey, tenantReq.SecretKey) tenantName := *tenantReq.Name - var users []*corev1.LocalObjectReference + var users []corev1.LocalObjectReference // delete secrets created if an errors occurred during tenant creation, defer func() { @@ -387,7 +387,7 @@ func deleteSecretsIfTenantCreationFails(ctx context.Context, mError *models.Erro } } -func setTenantActiveDirectoryConfig(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, tenantConfigurationENV map[string]string, users []*corev1.LocalObjectReference) (map[string]string, []*corev1.LocalObjectReference, error) { +func setTenantActiveDirectoryConfig(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, tenantConfigurationENV map[string]string, users []corev1.LocalObjectReference) (map[string]string, []corev1.LocalObjectReference, error) { imm := true serverAddress := *tenantReq.Idp.ActiveDirectory.URL tlsSkipVerify := tenantReq.Idp.ActiveDirectory.SkipTLSVerification @@ -427,7 +427,7 @@ func setTenantActiveDirectoryConfig(ctx context.Context, clientSet K8sClientI, t // Attach the list of LDAP user DNs that will be administrator for the Tenant for i, userDN := range tenantReq.Idp.ActiveDirectory.UserDNS { userSecretName := fmt.Sprintf("%s-user-%d", *tenantReq.Name, i) - users = append(users, &corev1.LocalObjectReference{Name: userSecretName}) + users = append(users, corev1.LocalObjectReference{Name: userSecretName}) userSecret := corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ @@ -466,11 +466,11 @@ func setTenantOIDCConfig(tenantReq *models.CreateTenantRequest, tenantConfigurat return tenantConfigurationENV } -func setTenantBuiltInUsers(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, users []*corev1.LocalObjectReference) ([]*corev1.LocalObjectReference, error) { +func setTenantBuiltInUsers(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, users []corev1.LocalObjectReference) ([]corev1.LocalObjectReference, error) { imm := true for i := 0; i < len(tenantReq.Idp.Keys); i++ { userSecretName := fmt.Sprintf("%s-user-%d", *tenantReq.Name, i) - users = append(users, &corev1.LocalObjectReference{Name: userSecretName}) + users = append(users, corev1.LocalObjectReference{Name: userSecretName}) userSecret := corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: userSecretName, diff --git a/api/tenant-handlers.go b/api/tenant-handlers.go index 7a0f826018f..a3626f9bd93 100644 --- a/api/tenant-handlers.go +++ b/api/tenant-handlers.go @@ -30,7 +30,7 @@ import ( utils2 "github.com/minio/operator/pkg/http" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/operator/api/operations/operator_api" @@ -45,6 +45,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" v1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/utils/ptr" ) type imageRegistry struct { @@ -57,6 +58,14 @@ type imageRegistryCredentials struct { Auth string `json:"auth"` } +var defaultSecurityContext = models.SecurityContext{ + RunAsUser: ptr.To("1000"), + RunAsGroup: ptr.To("1000"), + FsGroup: "1000", + FsGroupChangePolicy: string(corev1.FSGroupChangeOnRootMismatch), + RunAsNonRoot: ptr.To(true), +} + func registerTenantHandlers(api *operations.OperatorAPI) { // Add Tenant api.OperatorAPICreateTenantHandler = operator_api.CreateTenantHandlerFunc(func(params operator_api.CreateTenantParams, session *models.Principal) middleware.Responder { @@ -864,7 +873,7 @@ func parseTenantPoolRequest(poolParams *models.Pool) (*miniov2.Pool, error) { AccessModes: []corev1.PersistentVolumeAccessMode{ corev1.ReadWriteOnce, }, - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *volumeSize, }, @@ -1018,13 +1027,31 @@ func parseTenantPoolRequest(poolParams *models.Pool) (*miniov2.Pool, error) { Tolerations: tolerations, RuntimeClassName: &poolParams.RuntimeClassName, } - // if security context for Tenant is present, configure it. - if poolParams.SecurityContext != nil { - sc, err := convertModelSCToK8sSC(poolParams.SecurityContext) - if err != nil { - return nil, err - } - pool.SecurityContext = sc + // use default security context for Tenant if none is present + scp := poolParams.SecurityContext + if scp == nil { + scp = &defaultSecurityContext + } + var err error + pool.SecurityContext, err = convertModelSCToK8sSC(scp) + if err != nil { + return nil, err + } + pool.ContainerSecurityContext = &corev1.SecurityContext{ + // use security context as the base for the container security context + RunAsUser: pool.SecurityContext.RunAsUser, + RunAsGroup: pool.SecurityContext.RunAsGroup, + RunAsNonRoot: pool.SecurityContext.RunAsNonRoot, + + // allow running the tenant with restricted pod standards + // see https://kubernetes.io/docs/concepts/security/pod-security-standards + AllowPrivilegeEscalation: ptr.To(false), + Capabilities: &corev1.Capabilities{ + Drop: []corev1.Capability{"ALL"}, + }, + SeccompProfile: &corev1.SeccompProfile{ + Type: corev1.SeccompProfileTypeRuntimeDefault, + }, } return pool, nil } @@ -1292,6 +1319,7 @@ func parseTenantPool(pool *miniov2.Pool) *models.Pool { VolumeConfiguration: &models.PoolVolumeConfiguration{ Size: size, StorageClassName: storageClassName, + Annotations: pool.VolumeClaimTemplate.ObjectMeta.Annotations, }, NodeSelector: pool.NodeSelector, Resources: resources, diff --git a/api/tenant-handlers_test.go b/api/tenant-handlers_test.go index 7c7520312bb..7021b279aa0 100644 --- a/api/tenant-handlers_test.go +++ b/api/tenant-handlers_test.go @@ -397,7 +397,7 @@ func Test_TenantInfo(t *testing.T) { VolumesPerServer: 4, VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: map[corev1.ResourceName]resource.Quantity{ corev1.ResourceStorage: resource.MustParse("1Mi"), }, diff --git a/api/tenants_2_test.go b/api/tenants_2_test.go index eb9e4ace030..abc55f6c36e 100644 --- a/api/tenants_2_test.go +++ b/api/tenants_2_test.go @@ -25,7 +25,7 @@ import ( "testing" "time" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/operator/api/operations" "github.com/minio/operator/api/operations/operator_api" "github.com/minio/operator/models" @@ -33,7 +33,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -78,7 +77,7 @@ func (suite *TenantTestSuite) TestCreateTenantHandlerWithError() { func (suite *TenantTestSuite) TestCreateTenantWithWrongECP() { params, _ := suite.initCreateTenantRequest() params.Body.ErasureCodingParity = 1 - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) @@ -100,7 +99,7 @@ func (suite *TenantTestSuite) TestCreateTenantWithWrongActiveDirectoryConfig() { LookupBindDn: &lookup, }, } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-user-", *params.Body.Name)) { return nil, errors.New("mock-create-error") } @@ -123,7 +122,7 @@ func (suite *TenantTestSuite) TestCreateTenantWithWrongBuiltInUsers() { }, }, } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-user-", *params.Body.Name)) { return nil, errors.New("mock-create-error") } @@ -191,7 +190,7 @@ func (suite *TenantTestSuite) TestCreateTenantWithWrongCAsCertificates() { k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { return nil } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-ca-certificate-", *params.Body.Name)) { return nil, errors.New("mock-create-error") } @@ -245,7 +244,7 @@ func (suite *TenantTestSuite) TestCreateTenantWithWrongPool() { params, _ := suite.initCreateTenantRequest() params.Body.Annotations = map[string]string{"mock": "mock"} params.Body.Pools = []*models.Pool{{}} - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { @@ -267,7 +266,7 @@ func (suite *TenantTestSuite) TestCreateTenantWithImageRegistryCreateError() { Password: &password, } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-secret", *params.Body.Name)) { return nil, nil } @@ -290,14 +289,14 @@ func (suite *TenantTestSuite) TestCreateTenantWithImageRegistryUpdateError() { Username: &username, Password: &password, } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, nil } - k8sClientUpdateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) { + k8sClientUpdateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { return nil, errors.New("mock-update-error") } k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &v1.Secret{}, nil + return &corev1.Secret{}, nil } _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) suite.assert.NotNil(err) @@ -559,7 +558,7 @@ func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongCASecretCertificates( }, }, nil } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { + k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { return nil, errors.New("mock-create-error") } params, _ := suite.initUpdateTenantSecurityRequest() @@ -941,9 +940,9 @@ func (suite *TenantTestSuite) TestGetTenantLogReportWithError() { } func (suite *TenantTestSuite) TestGetTenantLogReportWithoutError() { - // fakePods := []v1.Pod{{ObjectMeta: metav1.ObjectMeta{Name: "pod1"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod2"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod3"}}} + // fakePods := []corev1.Pod{{ObjectMeta: metav1.ObjectMeta{Name: "pod1"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod2"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod3"}}} objs := []runtime.Object{ - &v1.PodList{Items: []v1.Pod{ + &corev1.PodList{Items: []corev1.Pod{ { Status: corev1.PodStatus{ ContainerStatuses: []corev1.ContainerStatus{{}}, diff --git a/api/tenants_helper_test.go b/api/tenants_helper_test.go index ca5683e4fd0..e534e3eab7e 100644 --- a/api/tenants_helper_test.go +++ b/api/tenants_helper_test.go @@ -388,6 +388,14 @@ func Test_GetConfigVersion(t *testing.T) { wantversion string wantErr bool }{ + { + name: "error unexpected KES config version", + args: args{ + kesImage: "minio/kes:v0.23.0", + }, + wantversion: KesConfigVersion3, + wantErr: false, + }, { name: "error unexpected KES config version", args: args{ @@ -409,7 +417,7 @@ func Test_GetConfigVersion(t *testing.T) { args: args{ kesImage: "minio/kes:2023-02-15T14-54-37Z", }, - wantversion: KesConfigVersion2, + wantversion: KesConfigVersion1, wantErr: false, }, { @@ -436,6 +444,23 @@ func Test_GetConfigVersion(t *testing.T) { wantversion: KesConfigVersion2, wantErr: false, }, + { + name: "error unexpected KES config version", + args: args{ + kesImage: "minio/kes:2023-11-09T17-35-47Z", + }, + wantversion: KesConfigVersion3, + wantErr: false, + }, + { + name: "error unexpected KES config version", + args: args{ + kesImage: "minio/kes:2023-11-09T17-35-47Z-arm64", + }, + wantversion: KesConfigVersion3, + wantErr: false, + }, + { name: "error unexpected KES config version", args: args{ @@ -449,20 +474,20 @@ func Test_GetConfigVersion(t *testing.T) { args: args{ kesImage: "minio/kes:latest", }, - wantversion: KesConfigVersion2, + wantversion: KesConfigVersion3, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := getKesConfigVersion(tt.args.kesImage) + got, err := GetKesConfigVersion(tt.args.kesImage) if (err != nil) != tt.wantErr { - t.Errorf("getKesConfigVersion() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("GetKesConfigVersion() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.wantversion) { - t.Errorf("getKesConfigVersion() got = %v, want %v", got, tt.wantversion) + t.Errorf("GetKesConfigVersion() got = %v, want %v", got, tt.wantversion) } }) } diff --git a/api/tls.go b/api/tls.go index beb7f3c5600..3f05679a278 100644 --- a/api/tls.go +++ b/api/tls.go @@ -25,7 +25,7 @@ import ( // PrepareSTSClientTransport : func PrepareSTSClientTransport(insecure bool) *http.Transport { - // This takes github.com/minio/madmin-go/v2/transport.go as an example + // This takes github.com/minio/madmin-go/v3/transport.go as an example // // DefaultTransport - this default transport is similar to // http.DefaultTransport but with additional param DisableCompression diff --git a/bundle.Dockerfile b/bundle.Dockerfile index 4a9a94ebd42..42ce9e0785d 100644 --- a/bundle.Dockerfile +++ b/bundle.Dockerfile @@ -8,5 +8,5 @@ LABEL operators.operatorframework.io.bundle.package.v1=minio-operator LABEL operators.operatorframework.io.bundle.channels.v1=stable # Copy files to locations specified by labels. -COPY bundles/community-operators/5.0.10/manifests /manifests/ -COPY bundles/community-operators/5.0.10/metadata /metadata/ +COPY bundles/community-operators/5.0.14/manifests /manifests/ +COPY bundles/community-operators/5.0.14/metadata /metadata/ diff --git a/bundles/certified-operators/5.0.11/manifests/console-env_v1_configmap.yaml b/bundles/certified-operators/5.0.11/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/certified-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml b/bundles/certified-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/certified-operators/5.0.11/manifests/console_v1_service.yaml b/bundles/certified-operators/5.0.11/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml b/bundles/certified-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..92d1a4d3706 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,766 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator.v5.0.11 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: console + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator + - image: quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3 + name: minio-91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3-annotation + version: 5.0.11 diff --git a/bundles/certified-operators/5.0.11/manifests/minio.min.io_tenants.yaml b/bundles/certified-operators/5.0.11/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..697304ebed5 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5040 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.11/manifests/operator_v1_service.yaml b/bundles/certified-operators/5.0.11/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.11/manifests/sts.min.io_policybindings.yaml b/bundles/certified-operators/5.0.11/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..fbbf279207d --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.11/manifests/sts_v1_service.yaml b/bundles/certified-operators/5.0.11/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/certified-operators/5.0.11/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.11/metadata/annotations.yaml b/bundles/certified-operators/5.0.11/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/certified-operators/5.0.11/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/certified-operators/5.0.12/manifests/console-env_v1_configmap.yaml b/bundles/certified-operators/5.0.12/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/certified-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml b/bundles/certified-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/certified-operators/5.0.12/manifests/console_v1_service.yaml b/bundles/certified-operators/5.0.12/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.12/manifests/job.min.io_miniojobs.yaml b/bundles/certified-operators/5.0.12/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml b/bundles/certified-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..27177ab1332 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,780 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator.v5.0.12 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: console + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator + - image: quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7 + name: minio-68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7-annotation + version: 5.0.12 + replaces: minio-operator.v5.0.11 diff --git a/bundles/certified-operators/5.0.12/manifests/minio.min.io_tenants.yaml b/bundles/certified-operators/5.0.12/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..3f1fc75edb3 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5208 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.12/manifests/operator_v1_service.yaml b/bundles/certified-operators/5.0.12/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.12/manifests/sts.min.io_policybindings.yaml b/bundles/certified-operators/5.0.12/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.12/manifests/sts_v1_service.yaml b/bundles/certified-operators/5.0.12/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/certified-operators/5.0.12/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.12/metadata/annotations.yaml b/bundles/certified-operators/5.0.12/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/certified-operators/5.0.12/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/certified-operators/5.0.13/manifests/console-env_v1_configmap.yaml b/bundles/certified-operators/5.0.13/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/certified-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml b/bundles/certified-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/certified-operators/5.0.13/manifests/console_v1_service.yaml b/bundles/certified-operators/5.0.13/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.13/manifests/job.min.io_miniojobs.yaml b/bundles/certified-operators/5.0.13/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml b/bundles/certified-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..f1215e4e6f5 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,792 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator.v5.0.13 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator + - image: quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320 + name: minio-ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320-annotation + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: console + version: 5.0.13 + replaces: minio-operator.v5.0.12 diff --git a/bundles/certified-operators/5.0.13/manifests/minio.min.io_tenants.yaml b/bundles/certified-operators/5.0.13/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..778a306bf6a --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5269 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.13/manifests/operator_v1_service.yaml b/bundles/certified-operators/5.0.13/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.13/manifests/sts.min.io_policybindings.yaml b/bundles/certified-operators/5.0.13/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.13/manifests/sts_v1_service.yaml b/bundles/certified-operators/5.0.13/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/certified-operators/5.0.13/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.13/metadata/annotations.yaml b/bundles/certified-operators/5.0.13/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/certified-operators/5.0.13/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/certified-operators/5.0.14/manifests/console-env_v1_configmap.yaml b/bundles/certified-operators/5.0.14/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..a74206147b2 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-env diff --git a/bundles/certified-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml b/bundles/certified-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..77a6d71d9e6 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/certified-operators/5.0.14/manifests/console_v1_service.yaml b/bundles/certified-operators/5.0.14/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..544027e0a9c --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/console_v1_service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.14/manifests/job.min.io_miniojobs.yaml b/bundles/certified-operators/5.0.14/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml b/bundles/certified-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..6b7a4fd3042 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,783 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator.v5.0.14 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + - job.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: console + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 + replaces: minio-operator.v5.0.13 diff --git a/bundles/certified-operators/5.0.14/manifests/minio.min.io_tenants.yaml b/bundles/certified-operators/5.0.14/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..1c9fa3aa98d --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5270 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.14/manifests/operator_v1_service.yaml b/bundles/certified-operators/5.0.14/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..6b7b8d53ba8 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/operator_v1_service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.14/manifests/sts.min.io_policybindings.yaml b/bundles/certified-operators/5.0.14/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..d74cf747abc --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,85 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/certified-operators/5.0.14/manifests/sts_v1_service.yaml b/bundles/certified-operators/5.0.14/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..34c64e69366 --- /dev/null +++ b/bundles/certified-operators/5.0.14/manifests/sts_v1_service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/certified-operators/5.0.14/metadata/annotations.yaml b/bundles/certified-operators/5.0.14/metadata/annotations.yaml new file mode 100644 index 00000000000..ee5177c4ba7 --- /dev/null +++ b/bundles/certified-operators/5.0.14/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.15 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/community-operators/5.0.11/manifests/console-env_v1_configmap.yaml b/bundles/community-operators/5.0.11/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/community-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml b/bundles/community-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/community-operators/5.0.11/manifests/console_v1_service.yaml b/bundles/community-operators/5.0.11/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml b/bundles/community-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..92d1a4d3706 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,766 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator.v5.0.11 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: iVBORw0KGgoAAAANSUhEUgAAAKcAAACnCAYAAAB0FkzsAAAACXBIWXMAABcRAAAXEQHKJvM/AAAIj0lEQVR4nO2dT6hVVRSHjykI/gMDU0swfKAi2KgGOkv6M1RpqI9qZBYo9EAHSaIopGCQA8tJDXzNgnRcGm+SgwLDIFR4omBmCQrqE4Tkxu/6Tlyv7569zzn73Lvu3t83VO+5HN/31t5r7bX3ntVqtVoZgD0mnuOHAlZBTjALcoJZkBPMgpxgFuQEsyAnmAU5wSzICWZBTjALcoJZkBPMgpxgFuQEsyAnmAU5wSzICWZBTjDLHH40Yfn3/lR299zP2Z2z57PH9x889exFr72SLd60MZu/dtXwv2gfYA9RICTl9SNfZbfP/Oh84Lw1q7KX9+5oywo9mUDOANw5dz6b/ORY9vjBVKmHLX59QzZyeCybs3C+0TcbKMhZl9tnfsgm931e+SmKouu+OYqgz8Luyzrc++ViLTHFw8tXsz/e39OeFsDTIGcNJvcdC/IcCXpl14EBvYVdkLMiGs4f3fwn2PPu/fp79tep031+C9sgZ0V8RJr74gvZks1vZIteXe/1JTdOjGePbv49kPexCHXOCkggDcVFrNi5LVvx4fb//4U+c3nXwcLPKdtX1q8ECYiclXj0Z3F0U4moU8ysHUWXtqVTdl6EhneVpgA5KzF1qThqLh/dMuOfq1zkI6iiJ9k7claie1myDLmgmo/2QsO75p+pg5wVcC07upIaCbr6i/3Z7AW9C++3xk+366gpg5wVmL1wQeGHrn120jn0q/lDEbRI0GtHTvbpjWyCnBWQWK5hWas+rgjqElSZfcq1T+SsyJLNbxZ+UIKqdORKbFyCau6ZanKEnBVZNrq1cEjOSqyb54LORF77TBHkrIiSGrW7uSgj6Mihj2f8u7s/nU8yOULOGjy/aUO2bPvMNc1OfAXVVKGXoKGaTIYJ5KxJu6PdY+28rqBqMkmt9omcAVh9fL9z1Scr0RrXS1Bl7ik1hiBnAHyXJbPptXOfIVqCdk8ZUkuOkDMQZQTVJjgfQTVlUMtdJyk1hiBnQJoQdOTQ2DOCapdnCrVP5AxMPwRVcnTr1PeG3roZkLMBfDqPcqoKeuPLb6NPjpCzIXw6j3IkqE+ThwTtjMixJ0fI2SA+nUc5apHTpjkXnVOG2JMj5GyYMoJqD7xL0O45bczJEXL2gSYFjXnlCDn7RJOCakrgam4eRpCzj5QV1DWfzAXV8zS8xwZy9pmi3s1ulI27ImIuaIzzTk6ZGxC+p9OpVrr+uxMpnkLHKXODoqh3sxMlPKke8oWcA8RXUNUzfWqgsYGcA8ZX0BQ3uiFnn9A6uNbQZ6pJStDuzqNuNLzfPp1W9ETOhlG0k5AX3n6v8DIDrZu7tnvcGo+/E6kT5GwQzRMvvPVuu4PIB9duTkXPlE6gQ84G0BCuzWwqFZW5YUPHJOpczyJ0x1EqIGdgtAnt4jsftTPsKizZUnySSEr715EzEHm0vH70ZOn7iDpR9NThs73Q0J7KDkzkDIDmgXWiZTfOIxYdJyvHAnLWRB3sV3YfrBUtu3HJmcrQzoUFFVGJSMO46+KCKnBx6xOQswLqFJKYIaMlPAtylkS1S51cjJjNg5wlqHsJK5QDOT3REqTvSk9duOblCcjpgRo2fC75F9oyUXfIf3hpsvDv5760tNbzhwVKSQ7KiKnGDZ/Tjl241s9VqE8B5CygjJg6rjDUpf6u9XNXHTQWGNZ7oDVyXzHVLOy6XcMXFdiLrsr2vYE4BoicM6CsXGvkPoQUM5tOvIpYvGljsO+yDpGzC833fMpFSnw0jIdczdEvhWt93tW1FBNEzg608uNzclsTYqrTSMX9IrSVI6Utwsg5jWqLV3YfcJaBmhBT363b3lzf3X2He+wg5zTaG16UiOSsOf5pcDF9GkgUNVMpIeUg53QS4tOLqeQnZBlHmbn2GLnEVLReufeDYN87LCSfEEkQn2XJlXt2BMvKNb/UL4R3qerwWIrH0aQtZz7Xc6Ehdfmo+xpBH5SRl1mj13frGsMUSXpYV2buSkJ0/qX2lIfCZ16bo71EIb972EhWTtUzdRtvEXlmPghCrdMPM0kO6xrOfeqZyswHMdfTUJ5yxMxJUk4lI86a4s5tpTNzSe9zZUsvFKlVyww1vx12kpNT2bnOUC9C88wyBW9JqRvV1CxStZczH8ZTq2UWkZycrsYKRS8N5z6EkFInF7cP8UqkDa4MScnp01ihIdUneklIn+lBLySlonPIjqbYSEpOV9T0Gc7bdcoT46VKQp0gpT/JyCmpXELpfvOiz9eRMufJQbGI6UMycvq0o80071MCpQy8iZM9oJgk5FTUK5ob5iWcTtpr7p4NIdAMScjpmmt2JkFIaYfo5XTNNRU1l41urS2lniPJ560daZ86B/WJXk6VfIpQ47AajetKKcG11JnSycNNE7Wc2hPkSmTqDN9KotQEnGKvZT+IWs6mrkaRlEqgWGpslmjl1NLinbNhr0VByv4SrZw60iXUGZpIORiilTNE1ETKwRKlnBrSXV3uRSClDaKUs+otZ0hpiyjlLDukI6VN4oycnkM6UtomOjl9btVFyuEgOjmLlg+RcrhIQk6kHE6iklMlpM61dKQcbqKSM78iRdts1ZDBHZLDTXTD+rqvj7DNNhKikhMp44LDY8EsyAlmQU4wC3KCWZATzIKcYBbkBLMgJ5gFOcEsyAlmQU4wC3KCWZATzIKcYBbkBLMgJ5gFOcEsyAlmQU4wC3KCWZATzIKcYBbkBLMgJ5gFOcEsyAlmQU4wC3KCWZATzIKcgdFJdzq0FuqDnA0wcmgMQQOAnA2BoPVBzgZB0HogZ8MgaHWQsw8gaDWivdLaGhIUyjGr1Wq1+D/rH1OXrnIFjR8TyAlWmWDOCWZBTjALcoJZkBPMgpxgFuQEsyAnmAU5wSzICWZBTjALcoJZkBPMgpxgFuQEsyAnmAU5wSzICWbRHqIJfjxgjiz77T8hbd197bqGkwAAAABJRU5ErkJggg== + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: console + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator + - image: quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3 + name: minio-91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3-annotation + version: 5.0.11 diff --git a/bundles/community-operators/5.0.11/manifests/minio.min.io_tenants.yaml b/bundles/community-operators/5.0.11/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..697304ebed5 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5040 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.11/manifests/operator_v1_service.yaml b/bundles/community-operators/5.0.11/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.11/manifests/sts.min.io_policybindings.yaml b/bundles/community-operators/5.0.11/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..fbbf279207d --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.11/manifests/sts_v1_service.yaml b/bundles/community-operators/5.0.11/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/community-operators/5.0.11/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.11/metadata/annotations.yaml b/bundles/community-operators/5.0.11/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/community-operators/5.0.11/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/community-operators/5.0.12/manifests/console-env_v1_configmap.yaml b/bundles/community-operators/5.0.12/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/community-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml b/bundles/community-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/community-operators/5.0.12/manifests/console_v1_service.yaml b/bundles/community-operators/5.0.12/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.12/manifests/job.min.io_miniojobs.yaml b/bundles/community-operators/5.0.12/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml b/bundles/community-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..125410ddf08 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,779 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator.v5.0.12 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: console + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator + - image: quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7 + name: minio-68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7-annotation + version: 5.0.12 diff --git a/bundles/community-operators/5.0.12/manifests/minio.min.io_tenants.yaml b/bundles/community-operators/5.0.12/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..3f1fc75edb3 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5208 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.12/manifests/operator_v1_service.yaml b/bundles/community-operators/5.0.12/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.12/manifests/sts.min.io_policybindings.yaml b/bundles/community-operators/5.0.12/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.12/manifests/sts_v1_service.yaml b/bundles/community-operators/5.0.12/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/community-operators/5.0.12/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.12/metadata/annotations.yaml b/bundles/community-operators/5.0.12/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/community-operators/5.0.12/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/community-operators/5.0.13/manifests/console-env_v1_configmap.yaml b/bundles/community-operators/5.0.13/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/community-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml b/bundles/community-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/community-operators/5.0.13/manifests/console_v1_service.yaml b/bundles/community-operators/5.0.13/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.13/manifests/job.min.io_miniojobs.yaml b/bundles/community-operators/5.0.13/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml b/bundles/community-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..28e088c09a7 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,791 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator.v5.0.13 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator + - image: quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320 + name: minio-ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320-annotation + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: console + version: 5.0.13 diff --git a/bundles/community-operators/5.0.13/manifests/minio.min.io_tenants.yaml b/bundles/community-operators/5.0.13/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..778a306bf6a --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5269 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.13/manifests/operator_v1_service.yaml b/bundles/community-operators/5.0.13/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.13/manifests/sts.min.io_policybindings.yaml b/bundles/community-operators/5.0.13/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.13/manifests/sts_v1_service.yaml b/bundles/community-operators/5.0.13/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/community-operators/5.0.13/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.13/metadata/annotations.yaml b/bundles/community-operators/5.0.13/metadata/annotations.yaml new file mode 100644 index 00000000000..2a015c4d0eb --- /dev/null +++ b/bundles/community-operators/5.0.13/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/community-operators/5.0.14/manifests/console-env_v1_configmap.yaml b/bundles/community-operators/5.0.14/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..a74206147b2 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-env diff --git a/bundles/community-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml b/bundles/community-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..77a6d71d9e6 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/community-operators/5.0.14/manifests/console_v1_service.yaml b/bundles/community-operators/5.0.14/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..544027e0a9c --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/console_v1_service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.14/manifests/job.min.io_miniojobs.yaml b/bundles/community-operators/5.0.14/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml b/bundles/community-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..770192ea522 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/minio-operator.clusterserviceversion.yaml @@ -0,0 +1,784 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator.v5.0.14 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + - job.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: console + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 + skips: + - minio-operator.v5.0.13 \ No newline at end of file diff --git a/bundles/community-operators/5.0.14/manifests/minio.min.io_tenants.yaml b/bundles/community-operators/5.0.14/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..1c9fa3aa98d --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5270 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.14/manifests/operator_v1_service.yaml b/bundles/community-operators/5.0.14/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..6b7b8d53ba8 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/operator_v1_service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.14/manifests/sts.min.io_policybindings.yaml b/bundles/community-operators/5.0.14/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..d74cf747abc --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,85 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/community-operators/5.0.14/manifests/sts_v1_service.yaml b/bundles/community-operators/5.0.14/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..34c64e69366 --- /dev/null +++ b/bundles/community-operators/5.0.14/manifests/sts_v1_service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/community-operators/5.0.14/metadata/annotations.yaml b/bundles/community-operators/5.0.14/metadata/annotations.yaml new file mode 100644 index 00000000000..ee5177c4ba7 --- /dev/null +++ b/bundles/community-operators/5.0.14/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.15 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/redhat-marketplace/5.0.11/manifests/console-env_v1_configmap.yaml b/bundles/redhat-marketplace/5.0.11/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/redhat-marketplace/5.0.11/manifests/console-sa-secret_v1_secret.yaml b/bundles/redhat-marketplace/5.0.11/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/redhat-marketplace/5.0.11/manifests/console_v1_service.yaml b/bundles/redhat-marketplace/5.0.11/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.11/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/bundles/redhat-marketplace/5.0.11/manifests/minio-operator-rhmp.clusterserviceversion.yaml new file mode 100644 index 00000000000..2b3d404ede9 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -0,0 +1,768 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console + marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator-rhmp.v5.0.11 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator Rhmp + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: minio-operator + - image: quay.io/minio/minio@sha256:91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3 + name: minio-91866cdaad4cc11d2f86056b234f33f3768a44adc600ea37c225708c83076bc3-annotation + - image: quay.io/minio/operator@sha256:3ab501c476f269c4e4fc84017543ff7f6c8209ed474d77de472311472ba2e2ff + name: console + version: 5.0.11 diff --git a/bundles/redhat-marketplace/5.0.11/manifests/minio.min.io_tenants.yaml b/bundles/redhat-marketplace/5.0.11/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..697304ebed5 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5040 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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 + name: + type: string + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.11/manifests/operator_v1_service.yaml b/bundles/redhat-marketplace/5.0.11/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.11/manifests/sts.min.io_policybindings.yaml b/bundles/redhat-marketplace/5.0.11/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..fbbf279207d --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.11/manifests/sts_v1_service.yaml b/bundles/redhat-marketplace/5.0.11/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.11/metadata/annotations.yaml b/bundles/redhat-marketplace/5.0.11/metadata/annotations.yaml new file mode 100644 index 00000000000..c9166a34c2b --- /dev/null +++ b/bundles/redhat-marketplace/5.0.11/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/redhat-marketplace/5.0.12/manifests/console-env_v1_configmap.yaml b/bundles/redhat-marketplace/5.0.12/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/redhat-marketplace/5.0.12/manifests/console-sa-secret_v1_secret.yaml b/bundles/redhat-marketplace/5.0.12/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/redhat-marketplace/5.0.12/manifests/console_v1_service.yaml b/bundles/redhat-marketplace/5.0.12/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.12/manifests/job.min.io_miniojobs.yaml b/bundles/redhat-marketplace/5.0.12/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.12/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/bundles/redhat-marketplace/5.0.12/manifests/minio-operator-rhmp.clusterserviceversion.yaml new file mode 100644 index 00000000000..3f647e1fa68 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -0,0 +1,782 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + k8sMinVersion: "1.18" + marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console + marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator-rhmp.v5.0.12 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator Rhmp + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: console + - image: quay.io/minio/operator@sha256:bf19ad5a3ba1bd2951e582cd13891073c5314d0d1d5c27fdca3a5ec85bbc7920 + name: minio-operator + - image: quay.io/minio/minio@sha256:68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7 + name: minio-68622c3e49dd98fbbcb8200729297207759d52e3b02d2ed908c1a7ff3b83f3f7-annotation + version: 5.0.12 + replaces: minio-operator-rhmp.v5.0.11 diff --git a/bundles/redhat-marketplace/5.0.12/manifests/minio.min.io_tenants.yaml b/bundles/redhat-marketplace/5.0.12/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..3f1fc75edb3 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5208 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.12/manifests/operator_v1_service.yaml b/bundles/redhat-marketplace/5.0.12/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.12/manifests/sts.min.io_policybindings.yaml b/bundles/redhat-marketplace/5.0.12/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.12/manifests/sts_v1_service.yaml b/bundles/redhat-marketplace/5.0.12/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.12/metadata/annotations.yaml b/bundles/redhat-marketplace/5.0.12/metadata/annotations.yaml new file mode 100644 index 00000000000..c9166a34c2b --- /dev/null +++ b/bundles/redhat-marketplace/5.0.12/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/redhat-marketplace/5.0.13/manifests/console-env_v1_configmap.yaml b/bundles/redhat-marketplace/5.0.13/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..1c276708cd0 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-env diff --git a/bundles/redhat-marketplace/5.0.13/manifests/console-sa-secret_v1_secret.yaml b/bundles/redhat-marketplace/5.0.13/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..8f7c7e18363 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/redhat-marketplace/5.0.13/manifests/console_v1_service.yaml b/bundles/redhat-marketplace/5.0.13/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..1d2af3ffb8a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/console_v1_service.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.13/manifests/job.min.io_miniojobs.yaml b/bundles/redhat-marketplace/5.0.13/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..fb8c80c2e36 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,120 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + phase: + type: string + required: + - commands + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.13/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/bundles/redhat-marketplace/5.0.13/manifests/minio-operator-rhmp.clusterserviceversion.yaml new file mode 100644 index 00000000000..3db9495ce14 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -0,0 +1,794 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console + marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator-rhmp.v5.0.13 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator Rhmp + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - job.min.io + resources: + - miniojobs + verbs: + - list + - get + - update + - delete + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + min.io/operator: v5.0.13 + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: console + - image: quay.io/minio/operator@sha256:0a5688b6ac83800d61c32b3f8a19913278d9322ed8974f4e6b444074ecf3d3ee + name: minio-operator + - image: quay.io/minio/minio@sha256:ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320 + name: minio-ab5551aa2f7d8a950f83bf64c2bb53b7eae9e0b7ea906a5288d3bbf37fc3d320-annotation + version: 5.0.13 + replaces: minio-operator-rhmp.v5.0.12 diff --git a/bundles/redhat-marketplace/5.0.13/manifests/minio.min.io_tenants.yaml b/bundles/redhat-marketplace/5.0.13/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..778a306bf6a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5269 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.13/manifests/operator_v1_service.yaml b/bundles/redhat-marketplace/5.0.13/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..011f9599ff8 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/operator_v1_service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.13/manifests/sts.min.io_policybindings.yaml b/bundles/redhat-marketplace/5.0.13/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..49d7e739f4a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,84 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.13/manifests/sts_v1_service.yaml b/bundles/redhat-marketplace/5.0.13/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..cdec8486952 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/manifests/sts_v1_service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.13/metadata/annotations.yaml b/bundles/redhat-marketplace/5.0.13/metadata/annotations.yaml new file mode 100644 index 00000000000..c9166a34c2b --- /dev/null +++ b/bundles/redhat-marketplace/5.0.13/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.14 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/bundles/redhat-marketplace/5.0.14/manifests/console-env_v1_configmap.yaml b/bundles/redhat-marketplace/5.0.14/manifests/console-env_v1_configmap.yaml new file mode 100644 index 00000000000..a74206147b2 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/console-env_v1_configmap.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +data: + CONSOLE_PORT: "9090" + CONSOLE_TLS_PORT: "9443" +kind: ConfigMap +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-env diff --git a/bundles/redhat-marketplace/5.0.14/manifests/console-sa-secret_v1_secret.yaml b/bundles/redhat-marketplace/5.0.14/manifests/console-sa-secret_v1_secret.yaml new file mode 100644 index 00000000000..77a6d71d9e6 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/console-sa-secret_v1_secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + kubernetes.io/service-account.name: console-sa + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + name: console-sa-secret +type: kubernetes.io/service-account-token diff --git a/bundles/redhat-marketplace/5.0.14/manifests/console_v1_service.yaml b/bundles/redhat-marketplace/5.0.14/manifests/console_v1_service.yaml new file mode 100644 index 00000000000..544027e0a9c --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/console_v1_service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: console-tls + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + name: console +spec: + ports: + - name: http + port: 9090 + targetPort: 0 + - name: https + port: 9443 + targetPort: 0 + selector: + app: console +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.14/manifests/job.min.io_miniojobs.yaml b/bundles/redhat-marketplace/5.0.14/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.14/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/bundles/redhat-marketplace/5.0.14/manifests/minio-operator-rhmp.clusterserviceversion.yaml new file mode 100644 index 00000000000..84f7135007f --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -0,0 +1,786 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "minio.min.io/v2", + "kind": "Tenant", + "metadata": { + "annotations": { + "prometheus.io/path": "/minio/v2/metrics/cluster", + "prometheus.io/port": "9000", + "prometheus.io/scrape": "true" + }, + "labels": { + "app": "minio" + }, + "name": "myminio", + "namespace": "minio-operator" + }, + "spec": { + "certConfig": {}, + "configuration": { + "name": "storage-configuration" + }, + "env": [], + "externalCaCertSecret": [], + "externalCertSecret": [], + "externalClientCertSecrets": [], + "features": { + "bucketDNS": false, + "domains": {} + }, + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", + "imagePullSecret": {}, + "mountPath": "/export", + "podManagementPolicy": "Parallel", + "pools": [ + { + "containerSecurityContext": {}, + "name": "pool-0", + "securityContext": {}, + "servers": 4, + "volumeClaimTemplate": { + "metadata": { + "name": "data" + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + "volumesPerServer": 2 + } + ], + "priorityClassName": "", + "requestAutoCert": true, + "serviceAccountName": "", + "serviceMetadata": { + "consoleServiceAnnotations": {}, + "consoleServiceLabels": {}, + "minioServiceAnnotations": {}, + "minioServiceLabels": {} + }, + "subPath": "", + "users": [ + { + "name": "storage-user" + } + ] + } + } + ] + capabilities: Full Lifecycle + categories: AI/Machine Learning, Big Data, Cloud Provider, Storage + description: |- + MinIO is a Kubernetes-native high performance object store with an + S3-compatible API. The MinIO Operator supports deploying MinIO Tenants + onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + k8sMinVersion: "1.18" + marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console + marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console + operatorframework.io/suggested-namespace: minio-operator + operators.operatorframework.io/builder: operator-sdk-v1.22.2 + operators.operatorframework.io/project_layout: unknown + repository: https://github.com/minio/operator + containerImage: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator-rhmp.v5.0.14 + namespace: minio-operator +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 + - kind: PolicyBinding + name: policybindings.sts.min.io + version: v1alpha1 + - kind: Tenant + name: tenants.minio.min.io + version: v2 + description: |- + ## Overview + + + The MinIO Operator brings native support for deploying and managing MinIO + deployments (“MinIO Tenants”) on a Kubernetes cluster. + + + MinIO is a high performance, Kubernetes native object storage suite. With an + extensive list of enterprise features, it is scalable, secure and resilient + while remaining remarkably simple to deploy and operate at scale. + Software-defined, MinIO can run on any infrastructure and in any cloud - + public, private or edge. MinIO is the world's fastest object storage and can + run the broadest set of workloads in the industry. It is widely considered + to be the leader in compatibility with Amazon's S3 API. + + ## Features + + + The MinIO Operator takes care of the deployment of MinIO Tenant along with: + + * TLS Certificate Management + + * Configuration of the encryption at rest + + * Cluster expansion + + * Hot Updates + + * Users and Buckets bootstrapping + + ## Prerequisites for enabling this Operator + + * At least Kubernetes 1.18 + + * [CSR + Capability](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) + must be enabled + + * Locally attached volumes for performance or some CSI to provision block + storage to the MinIO pods. + displayName: Minio Operator Rhmp + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - list + - patch + - update + - delete + - deletecollection + - apiGroups: + - "" + resources: + - namespaces + - services + - events + - resourcequotas + - nodes + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - watch + - create + - list + - patch + - delete + - deletecollection + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - deletecollection + - list + - get + - watch + - update + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - create + - list + - patch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - minio.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - list + - watch + - update + - patch + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshotcontents + verbs: + - get + - list + - apiGroups: + - storage.k8s.io + resources: + - csinodes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - volumeattachments + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - endpoints + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - pod + - pods/log + verbs: + - get + - list + - watch + serviceAccountName: console-sa + - rules: + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - update + - list + - delete + - apiGroups: + - "" + resources: + - namespaces + - nodes + verbs: + - get + - watch + - list + - apiGroups: + - "" + resources: + - pods + - services + - events + - configmaps + verbs: + - get + - watch + - create + - list + - delete + - deletecollection + - update + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - create + - update + - list + - delete + - deletecollection + - apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - statefulsets + - deployments + - deployments/finalizers + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - create + - list + - patch + - watch + - update + - delete + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - list + - apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + - kubernetes.io/kube-apiserver-client + - kubernetes.io/kubelet-serving + - beta.eks.amazonaws.com/app-serving + resources: + - signers + verbs: + - approve + - sign + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - minio.min.io + - sts.min.io + - job.min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - min.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - prometheuses + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - update + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - deletecollection + serviceAccountName: minio-operator + deployments: + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: console + spec: + replicas: 1 + selector: + matchLabels: + app: console + strategy: {} + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app: console + app.kubernetes.io/instance: minio-operator-console + app.kubernetes.io/name: operator + spec: + containers: + - args: + - ui + - --certs-dir=/tmp/certs + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: console + ports: + - containerPort: 9090 + name: http + - containerPort: 9443 + name: https + resources: {} + volumeMounts: + - mountPath: /tmp/certs + name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp + serviceAccountName: console-sa + volumes: + - name: tls-certificates + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: console-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: CAs/ca.crt + name: openshift-service-ca.crt + optional: true + - emptyDir: {} + name: tmp + - label: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + replicas: 1 + selector: + matchLabels: + name: minio-operator + strategy: + type: Recreate + template: + metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - minio-operator + topologyKey: kubernetes.io/hostname + containers: + - args: + - controller + env: + - name: MINIO_OPERATOR_RUNTIME + value: OpenShift + - name: MINIO_CONSOLE_TLS_ENABLE + value: "on" + - name: OPERATOR_STS_ENABLED + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + imagePullPolicy: IfNotPresent + name: minio-operator + resources: + requests: + cpu: 200m + ephemeral-storage: 500Mi + memory: 256Mi + volumeMounts: + - mountPath: /tmp/service-ca + name: openshift-service-ca + - mountPath: /tmp/csr-signer-ca + name: openshift-csr-signer-ca + - mountPath: /tmp/sts + name: sts-tls + serviceAccountName: minio-operator + volumes: + - name: sts-tls + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: public.crt + - key: tls.key + path: private.key + name: sts-tls + optional: true + - configMap: + items: + - key: service-ca.crt + path: service-ca.crt + name: openshift-service-ca.crt + optional: true + name: openshift-service-ca + - name: openshift-csr-signer-ca + projected: + defaultMode: 420 + sources: + - secret: + items: + - key: tls.crt + path: tls.crt + name: openshift-csr-signer-ca + optional: true + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - S3 + - MinIO + - Object Storage + labels: + operatorframework.io/arch.386: supported + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.amd64p32: supported + operatorframework.io/arch.arm: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.arm64be: supported + operatorframework.io/arch.armbe: supported + operatorframework.io/arch.loong64: supported + operatorframework.io/arch.mips: supported + operatorframework.io/arch.mips64: supported + operatorframework.io/arch.mips64le: supported + operatorframework.io/arch.mips64p32: supported + operatorframework.io/arch.mips64p32le: supported + operatorframework.io/arch.mipsle: supported + operatorframework.io/arch.ppc: supported + operatorframework.io/arch.ppc64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.riscv: supported + operatorframework.io/arch.riscv64: supported + operatorframework.io/arch.s390: supported + operatorframework.io/arch.s390x: supported + operatorframework.io/arch.sparc: supported + operatorframework.io/arch.sparc64: supported + operatorframework.io/arch.wasm: supported + operatorframework.io/os.aix: supported + operatorframework.io/os.android: supported + operatorframework.io/os.darwin: supported + operatorframework.io/os.dragonfly: supported + operatorframework.io/os.freebsd: supported + operatorframework.io/os.hurd: supported + operatorframework.io/os.illumos: supported + operatorframework.io/os.ios: supported + operatorframework.io/os.js: supported + operatorframework.io/os.linux: supported + operatorframework.io/os.nacl: supported + operatorframework.io/os.netbsd: supported + operatorframework.io/os.openbsd: supported + operatorframework.io/os.plan9: supported + operatorframework.io/os.solaris: supported + operatorframework.io/os.windows: supported + operatorframework.io/os.zos: supported + links: + - name: Website + url: https://min.io + - name: Support + url: https://subnet.min.io + - name: Github + url: https://github.com/minio/operator + maintainers: + - email: dev@min.io + name: MinIO Team + maturity: stable + provider: + name: MinIO Inc + url: https://min.io + relatedImages: + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: console + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 + name: minio-operator + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 + skips: + - minio-operator-rhmp.v5.0.13 diff --git a/bundles/redhat-marketplace/5.0.14/manifests/minio.min.io_tenants.yaml b/bundles/redhat-marketplace/5.0.14/manifests/minio.min.io_tenants.yaml new file mode 100644 index 00000000000..1c9fa3aa98d --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/minio.min.io_tenants.yaml @@ -0,0 +1,5270 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: tenants.minio.min.io +spec: + group: minio.min.io + names: + kind: Tenant + listKind: TenantList + plural: tenants + shortNames: + - tenant + singular: tenant + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v2 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + scheduler: + properties: + name: + type: string + required: + - name + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + buckets: + items: + properties: + name: + type: string + objectLock: + type: boolean + region: + type: string + type: object + type: array + certConfig: + properties: + commonName: + type: string + dnsNames: + items: + type: string + type: array + organizationName: + items: + type: string + type: array + type: object + configuration: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + credsSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + exposeServices: + properties: + console: + type: boolean + minio: + type: boolean + type: object + externalCaCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalCertSecret: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + externalClientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + externalClientCertSecrets: + items: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + type: array + features: + properties: + bucketDNS: + type: boolean + domains: + properties: + console: + type: string + minio: + items: + type: string + type: array + type: object + enableSFTP: + type: boolean + type: object + image: + type: string + imagePullPolicy: + type: string + imagePullSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + kes: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + clientCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + externalCertSecret: + properties: + name: + type: string + type: + type: string + required: + - name + type: object + gcpCredentialSecretName: + type: string + gcpWorkloadIdentityPool: + type: string + image: + type: string + imagePullPolicy: + type: string + kesSecret: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + keyName: + type: string + labels: + additionalProperties: + type: string + type: object + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + format: int32 + 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 + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccountName: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + required: + - kesSecret + type: object + liveness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + logging: + properties: + anonymous: + type: boolean + json: + type: boolean + quiet: + type: boolean + type: object + mountPath: + type: string + podManagementPolicy: + type: string + pools: + items: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + 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 + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + reclaimStorage: + type: boolean + 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 + runtimeClassName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + servers: + format: int32 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + 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 + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + volumeClaimTemplate: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + volumesPerServer: + format: int32 + type: integer + required: + - servers + - volumeClaimTemplate + - volumesPerServer + type: object + type: array + priorityClassName: + type: string + prometheusOperator: + type: boolean + readiness: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + requestAutoCert: + type: boolean + serviceAccountName: + type: string + serviceMetadata: + properties: + consoleServiceAnnotations: + additionalProperties: + type: string + type: object + consoleServiceLabels: + additionalProperties: + type: string + type: object + minioServiceAnnotations: + additionalProperties: + type: string + type: object + minioServiceLabels: + additionalProperties: + type: string + type: object + type: object + sideCars: + properties: + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + 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 + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + 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 + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + 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 + volumeClaimTemplates: + items: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + status: + properties: + accessModes: + items: + type: string + type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular + 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 + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: + type: string + type: object + type: object + type: array + volumes: + 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: + 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: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + 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: + 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 + volumeAttributesClassName: + 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 + name: + type: string + 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: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + 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 + required: + - name + type: object + type: array + type: object + startup: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + subPath: + type: string + users: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + required: + - pools + type: object + status: + properties: + availableReplicas: + format: int32 + type: integer + certificates: + nullable: true + properties: + autoCertEnabled: + nullable: true + type: boolean + customCertificates: + nullable: true + properties: + client: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minio: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + minioCAs: + items: + properties: + certName: + type: string + domains: + items: + type: string + type: array + expiresIn: + type: string + expiry: + type: string + serialNo: + type: string + type: object + type: array + type: object + type: object + currentState: + type: string + drivesHealing: + format: int32 + type: integer + drivesOffline: + format: int32 + type: integer + drivesOnline: + format: int32 + type: integer + healthMessage: + type: string + healthStatus: + type: string + pools: + items: + properties: + legacySecurityContext: + type: boolean + ssName: + type: string + state: + type: string + required: + - ssName + - state + type: object + nullable: true + type: array + provisionedBuckets: + type: boolean + provisionedUsers: + type: boolean + revision: + format: int32 + type: integer + syncVersion: + type: string + usage: + properties: + capacity: + format: int64 + type: integer + rawCapacity: + format: int64 + type: integer + rawUsage: + format: int64 + type: integer + tiers: + items: + properties: + Name: + type: string + Type: + type: string + totalSize: + format: int64 + type: integer + required: + - Name + - totalSize + type: object + type: array + usage: + format: int64 + type: integer + type: object + waitingOnReady: + format: date-time + type: string + writeQuorum: + format: int32 + type: integer + required: + - availableReplicas + - certificates + - currentState + - pools + - revision + - syncVersion + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.14/manifests/operator_v1_service.yaml b/bundles/redhat-marketplace/5.0.14/manifests/operator_v1_service.yaml new file mode 100644 index 00000000000..6b7b8d53ba8 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/operator_v1_service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + labels: + app.kubernetes.io/instance: minio-operator + app.kubernetes.io/name: operator + name: minio-operator + name: operator +spec: + ports: + - name: http + port: 4221 + targetPort: 0 + selector: + name: minio-operator + operator: leader + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.14/manifests/sts.min.io_policybindings.yaml b/bundles/redhat-marketplace/5.0.14/manifests/sts.min.io_policybindings.yaml new file mode 100644 index 00000000000..d74cf747abc --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/sts.min.io_policybindings.yaml @@ -0,0 +1,85 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: policybindings.sts.min.io +spec: + group: sts.min.io + names: + kind: PolicyBinding + listKind: PolicyBindingList + plural: policybindings + shortNames: + - policybinding + singular: policybinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.currentState + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + application: + properties: + namespace: + type: string + serviceaccount: + type: string + required: + - namespace + - serviceaccount + type: object + policies: + items: + type: string + type: array + required: + - application + - policies + type: object + status: + properties: + currentState: + type: string + usage: + nullable: true + properties: + authotizations: + format: int64 + type: integer + type: object + required: + - currentState + - usage + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bundles/redhat-marketplace/5.0.14/manifests/sts_v1_service.yaml b/bundles/redhat-marketplace/5.0.14/manifests/sts_v1_service.yaml new file mode 100644 index 00000000000..34c64e69366 --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/manifests/sts_v1_service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + service.beta.openshift.io/serving-cert-secret-name: sts-tls + creationTimestamp: null + labels: + name: minio-operator + name: sts +spec: + ports: + - name: https + port: 4223 + targetPort: 4223 + selector: + name: minio-operator + type: ClusterIP +status: + loadBalancer: {} diff --git a/bundles/redhat-marketplace/5.0.14/metadata/annotations.yaml b/bundles/redhat-marketplace/5.0.14/metadata/annotations.yaml new file mode 100644 index 00000000000..cc61e37d00a --- /dev/null +++ b/bundles/redhat-marketplace/5.0.14/metadata/annotations.yaml @@ -0,0 +1,12 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp + operators.operatorframework.io.bundle.channels.v1: stable + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.8-v4.15 + # Annotation to add default bundle channel as potential is declared + operators.operatorframework.io.bundle.channel.default.v1: stable + operatorframework.io/suggested-namespace: minio-operator diff --git a/certified-operators/manifests/console-env_v1_configmap.yaml b/certified-operators/manifests/console-env_v1_configmap.yaml index 1c276708cd0..a74206147b2 100644 --- a/certified-operators/manifests/console-env_v1_configmap.yaml +++ b/certified-operators/manifests/console-env_v1_configmap.yaml @@ -8,4 +8,5 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-env diff --git a/certified-operators/manifests/console-sa-secret_v1_secret.yaml b/certified-operators/manifests/console-sa-secret_v1_secret.yaml index 8f7c7e18363..77a6d71d9e6 100644 --- a/certified-operators/manifests/console-sa-secret_v1_secret.yaml +++ b/certified-operators/manifests/console-sa-secret_v1_secret.yaml @@ -6,5 +6,6 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-sa-secret type: kubernetes.io/service-account-token diff --git a/certified-operators/manifests/console_v1_service.yaml b/certified-operators/manifests/console_v1_service.yaml index 1d2af3ffb8a..544027e0a9c 100644 --- a/certified-operators/manifests/console_v1_service.yaml +++ b/certified-operators/manifests/console_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: console-tls creationTimestamp: null labels: diff --git a/certified-operators/manifests/job.min.io_miniojobs.yaml b/certified-operators/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/certified-operators/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/certified-operators/manifests/minio-operator.clusterserviceversion.yaml b/certified-operators/manifests/minio-operator.clusterserviceversion.yaml index 0359a8421f7..0ad1f1ee51c 100644 --- a/certified-operators/manifests/minio-operator.clusterserviceversion.yaml +++ b/certified-operators/manifests/minio-operator.clusterserviceversion.yaml @@ -32,7 +32,7 @@ metadata: "bucketDNS": false, "domains": {} }, - "image": "quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65", + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", "imagePullSecret": {}, "mountPath": "/export", "podManagementPolicy": "Parallel", @@ -80,23 +80,35 @@ metadata: ] capabilities: Full Lifecycle categories: AI/Machine Learning, Big Data, Cloud Provider, Storage - createdAt: "2023-10-12T17:54:20Z" description: |- MinIO is a Kubernetes-native high performance object store with an S3-compatible API. The MinIO Operator supports deploying MinIO Tenants onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" k8sMinVersion: "1.18" operatorframework.io/suggested-namespace: minio-operator - operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/builder: operator-sdk-v1.22.2 operators.operatorframework.io/project_layout: unknown repository: https://github.com/minio/operator - containerImage: quay.io/minio/operator:v5.0.10 - name: minio-operator.v5.0.10 + containerImage: quay.io/minio/operator:v5.0.14 + name: minio-operator.v5.0.14 namespace: minio-operator spec: apiservicedefinitions: {} customresourcedefinitions: owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 - kind: PolicyBinding name: policybindings.sts.min.io version: v1alpha1 @@ -378,6 +390,7 @@ spec: - get - update - list + - delete - apiGroups: - "" resources: @@ -499,6 +512,7 @@ spec: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - '*' verbs: @@ -553,6 +567,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app: console app.kubernetes.io/instance: minio-operator-console @@ -562,7 +577,7 @@ spec: - args: - ui - --certs-dir=/tmp/certs - image: quay.io/minio/operator:v5.0.10 + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: console ports: @@ -575,6 +590,8 @@ spec: volumeMounts: - mountPath: /tmp/certs name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp serviceAccountName: console-sa volumes: - name: tls-certificates @@ -595,6 +612,8 @@ spec: path: CAs/ca.crt name: openshift-service-ca.crt optional: true + - emptyDir: {} + name: tmp - label: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -612,6 +631,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -636,8 +656,8 @@ spec: - name: MINIO_CONSOLE_TLS_ENABLE value: "on" - name: OPERATOR_STS_ENABLED - value: "off" - image: quay.io/minio/operator:v5.0.10 + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: minio-operator resources: @@ -755,11 +775,10 @@ spec: name: MinIO Inc url: https://min.io relatedImages: - - image: quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65 - name: minio-7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65-annotation - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: console - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: minio-operator - version: 5.0.10 - replaces: minio-operator.v5.0.9 + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 diff --git a/certified-operators/manifests/minio.min.io_tenants.yaml b/certified-operators/manifests/minio.min.io_tenants.yaml index d18f067d261..1c9fa3aa98d 100644 --- a/certified-operators/manifests/minio.min.io_tenants.yaml +++ b/certified-operators/manifests/minio.min.io_tenants.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: tenants.minio.min.io spec: @@ -312,18 +313,6 @@ spec: 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: @@ -367,6 +356,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -555,6 +546,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1109,6 +1137,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1159,6 +1195,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1355,6 +1399,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -1386,6 +1443,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -1702,6 +1761,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1770,6 +1839,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1836,6 +1915,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1904,6 +1993,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1953,6 +2052,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2442,6 +2602,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2510,6 +2680,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2576,6 +2756,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2644,6 +2834,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2755,6 +2955,8 @@ spec: additionalProperties: type: string type: object + reclaimStorage: + type: boolean resources: properties: claims: @@ -2983,18 +3185,6 @@ spec: 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: @@ -3038,6 +3228,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3049,6 +3241,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -3087,9 +3284,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -3350,6 +3556,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3400,6 +3614,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3596,6 +3818,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -3627,6 +3862,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -3906,18 +4143,6 @@ spec: 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: @@ -3961,6 +4186,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3972,6 +4199,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -4010,9 +4242,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -4264,18 +4505,6 @@ spec: 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: @@ -4319,6 +4548,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4507,6 +4738,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -4745,8 +5013,6 @@ spec: - name type: object type: array - required: - - containers type: object startup: properties: diff --git a/certified-operators/manifests/operator_v1_service.yaml b/certified-operators/manifests/operator_v1_service.yaml index 011f9599ff8..6b7b8d53ba8 100644 --- a/certified-operators/manifests/operator_v1_service.yaml +++ b/certified-operators/manifests/operator_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null labels: app.kubernetes.io/instance: minio-operator diff --git a/certified-operators/manifests/sts.min.io_policybindings.yaml b/certified-operators/manifests/sts.min.io_policybindings.yaml index fbbf279207d..d74cf747abc 100644 --- a/certified-operators/manifests/sts.min.io_policybindings.yaml +++ b/certified-operators/manifests/sts.min.io_policybindings.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: policybindings.sts.min.io spec: diff --git a/certified-operators/manifests/sts_v1_service.yaml b/certified-operators/manifests/sts_v1_service.yaml index cdec8486952..34c64e69366 100644 --- a/certified-operators/manifests/sts_v1_service.yaml +++ b/certified-operators/manifests/sts_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: sts-tls creationTimestamp: null labels: diff --git a/certified-operators/metadata/annotations.yaml b/certified-operators/metadata/annotations.yaml index c842f73a8db..b4745c091c5 100644 --- a/certified-operators/metadata/annotations.yaml +++ b/certified-operators/metadata/annotations.yaml @@ -5,6 +5,6 @@ annotations: operators.operatorframework.io.bundle.metadata.v1: metadata/ operators.operatorframework.io.bundle.package.v1: minio-operator operators.operatorframework.io.bundle.channels.v1: stable - operators.operatorframework.io.metrics.builder: operator-sdk-v1.32.0 + operators.operatorframework.io.metrics.builder: operator-sdk-v1.22.2 operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 operators.operatorframework.io.metrics.project_layout: unknown diff --git a/cmd/operator/ui.go b/cmd/operator/ui.go index 59d348c8808..17e034b392d 100644 --- a/cmd/operator/ui.go +++ b/cmd/operator/ui.go @@ -186,7 +186,12 @@ func startOperatorServer(ctx *cli.Context) error { defer server.Shutdown() - return server.Serve() + if err = server.Serve(); err != nil { + server.Logf("error serving API: %v", err) + return err + } + + return nil } func loadAllCerts(ctx *cli.Context) error { diff --git a/community-operators/manifests/console-env_v1_configmap.yaml b/community-operators/manifests/console-env_v1_configmap.yaml index 1c276708cd0..a74206147b2 100644 --- a/community-operators/manifests/console-env_v1_configmap.yaml +++ b/community-operators/manifests/console-env_v1_configmap.yaml @@ -8,4 +8,5 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-env diff --git a/community-operators/manifests/console-sa-secret_v1_secret.yaml b/community-operators/manifests/console-sa-secret_v1_secret.yaml index 8f7c7e18363..77a6d71d9e6 100644 --- a/community-operators/manifests/console-sa-secret_v1_secret.yaml +++ b/community-operators/manifests/console-sa-secret_v1_secret.yaml @@ -6,5 +6,6 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-sa-secret type: kubernetes.io/service-account-token diff --git a/community-operators/manifests/console_v1_service.yaml b/community-operators/manifests/console_v1_service.yaml index 1d2af3ffb8a..544027e0a9c 100644 --- a/community-operators/manifests/console_v1_service.yaml +++ b/community-operators/manifests/console_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: console-tls creationTimestamp: null labels: diff --git a/community-operators/manifests/job.min.io_miniojobs.yaml b/community-operators/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/community-operators/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/community-operators/manifests/minio-operator.clusterserviceversion.yaml b/community-operators/manifests/minio-operator.clusterserviceversion.yaml index 5c753ab1d8d..0ad1f1ee51c 100644 --- a/community-operators/manifests/minio-operator.clusterserviceversion.yaml +++ b/community-operators/manifests/minio-operator.clusterserviceversion.yaml @@ -32,7 +32,7 @@ metadata: "bucketDNS": false, "domains": {} }, - "image": "quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65", + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", "imagePullSecret": {}, "mountPath": "/export", "podManagementPolicy": "Parallel", @@ -80,23 +80,35 @@ metadata: ] capabilities: Full Lifecycle categories: AI/Machine Learning, Big Data, Cloud Provider, Storage - createdAt: "2023-10-12T17:54:27Z" description: |- MinIO is a Kubernetes-native high performance object store with an S3-compatible API. The MinIO Operator supports deploying MinIO Tenants onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" k8sMinVersion: "1.18" operatorframework.io/suggested-namespace: minio-operator - operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/builder: operator-sdk-v1.22.2 operators.operatorframework.io/project_layout: unknown repository: https://github.com/minio/operator - containerImage: quay.io/minio/operator:v5.0.10 - name: minio-operator.v5.0.10 + containerImage: quay.io/minio/operator:v5.0.14 + name: minio-operator.v5.0.14 namespace: minio-operator spec: apiservicedefinitions: {} customresourcedefinitions: owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 - kind: PolicyBinding name: policybindings.sts.min.io version: v1alpha1 @@ -378,6 +390,7 @@ spec: - get - update - list + - delete - apiGroups: - "" resources: @@ -499,6 +512,7 @@ spec: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - '*' verbs: @@ -553,6 +567,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app: console app.kubernetes.io/instance: minio-operator-console @@ -562,7 +577,7 @@ spec: - args: - ui - --certs-dir=/tmp/certs - image: quay.io/minio/operator:v5.0.10 + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: console ports: @@ -575,6 +590,8 @@ spec: volumeMounts: - mountPath: /tmp/certs name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp serviceAccountName: console-sa volumes: - name: tls-certificates @@ -595,6 +612,8 @@ spec: path: CAs/ca.crt name: openshift-service-ca.crt optional: true + - emptyDir: {} + name: tmp - label: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -612,6 +631,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -636,8 +656,8 @@ spec: - name: MINIO_CONSOLE_TLS_ENABLE value: "on" - name: OPERATOR_STS_ENABLED - value: "off" - image: quay.io/minio/operator:v5.0.10 + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: minio-operator resources: @@ -755,11 +775,10 @@ spec: name: MinIO Inc url: https://min.io relatedImages: - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: console - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: minio-operator - - image: quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65 - name: minio-7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65-annotation - version: 5.0.10 - replaces: "null" + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 diff --git a/community-operators/manifests/minio.min.io_tenants.yaml b/community-operators/manifests/minio.min.io_tenants.yaml index d18f067d261..1c9fa3aa98d 100644 --- a/community-operators/manifests/minio.min.io_tenants.yaml +++ b/community-operators/manifests/minio.min.io_tenants.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: tenants.minio.min.io spec: @@ -312,18 +313,6 @@ spec: 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: @@ -367,6 +356,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -555,6 +546,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1109,6 +1137,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1159,6 +1195,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1355,6 +1399,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -1386,6 +1443,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -1702,6 +1761,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1770,6 +1839,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1836,6 +1915,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1904,6 +1993,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1953,6 +2052,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2442,6 +2602,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2510,6 +2680,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2576,6 +2756,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2644,6 +2834,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2755,6 +2955,8 @@ spec: additionalProperties: type: string type: object + reclaimStorage: + type: boolean resources: properties: claims: @@ -2983,18 +3185,6 @@ spec: 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: @@ -3038,6 +3228,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3049,6 +3241,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -3087,9 +3284,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -3350,6 +3556,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3400,6 +3614,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3596,6 +3818,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -3627,6 +3862,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -3906,18 +4143,6 @@ spec: 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: @@ -3961,6 +4186,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3972,6 +4199,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -4010,9 +4242,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -4264,18 +4505,6 @@ spec: 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: @@ -4319,6 +4548,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4507,6 +4738,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -4745,8 +5013,6 @@ spec: - name type: object type: array - required: - - containers type: object startup: properties: diff --git a/community-operators/manifests/operator_v1_service.yaml b/community-operators/manifests/operator_v1_service.yaml index 011f9599ff8..6b7b8d53ba8 100644 --- a/community-operators/manifests/operator_v1_service.yaml +++ b/community-operators/manifests/operator_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null labels: app.kubernetes.io/instance: minio-operator diff --git a/community-operators/manifests/sts.min.io_policybindings.yaml b/community-operators/manifests/sts.min.io_policybindings.yaml index fbbf279207d..d74cf747abc 100644 --- a/community-operators/manifests/sts.min.io_policybindings.yaml +++ b/community-operators/manifests/sts.min.io_policybindings.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: policybindings.sts.min.io spec: diff --git a/community-operators/manifests/sts_v1_service.yaml b/community-operators/manifests/sts_v1_service.yaml index cdec8486952..34c64e69366 100644 --- a/community-operators/manifests/sts_v1_service.yaml +++ b/community-operators/manifests/sts_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: sts-tls creationTimestamp: null labels: diff --git a/community-operators/metadata/annotations.yaml b/community-operators/metadata/annotations.yaml index c842f73a8db..b4745c091c5 100644 --- a/community-operators/metadata/annotations.yaml +++ b/community-operators/metadata/annotations.yaml @@ -5,6 +5,6 @@ annotations: operators.operatorframework.io.bundle.metadata.v1: metadata/ operators.operatorframework.io.bundle.package.v1: minio-operator operators.operatorframework.io.bundle.channels.v1: stable - operators.operatorframework.io.metrics.builder: operator-sdk-v1.32.0 + operators.operatorframework.io.metrics.builder: operator-sdk-v1.22.2 operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 operators.operatorframework.io.metrics.project_layout: unknown diff --git a/config/manifests/bases/minio-operator-rhmp.clusterserviceversion.yaml b/config/manifests/bases/minio-operator-rhmp.clusterserviceversion.yaml index 5b1b4dcb66a..42dcd81fd17 100644 --- a/config/manifests/bases/minio-operator-rhmp.clusterserviceversion.yaml +++ b/config/manifests/bases/minio-operator-rhmp.clusterserviceversion.yaml @@ -2,6 +2,16 @@ apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" alm-examples: '[]' categories: "AI/Machine Learning, Big Data, Cloud Provider, Storage" description: |- diff --git a/config/manifests/bases/minio-operator.clusterserviceversion.yaml b/config/manifests/bases/minio-operator.clusterserviceversion.yaml index c3c44e80a02..16bed1b741d 100644 --- a/config/manifests/bases/minio-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/minio-operator.clusterserviceversion.yaml @@ -2,6 +2,16 @@ apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" alm-examples: '[]' categories: "AI/Machine Learning, Big Data, Cloud Provider, Storage" description: |- diff --git a/config/manifests/kustomization.yaml b/config/manifests/kustomization.yaml index e81650bc8e5..09a83b31311 100644 --- a/config/manifests/kustomization.yaml +++ b/config/manifests/kustomization.yaml @@ -12,7 +12,7 @@ patchesStrategicMerge: - overlay/console_v1_service.yaml - overlay/sts_v1_service.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/docs/console.md b/docs/console.md deleted file mode 100644 index c2edf5c229a..00000000000 --- a/docs/console.md +++ /dev/null @@ -1,23 +0,0 @@ -# Console Configuration [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io) - -This document explains how to enable Console with MinIO Operator. - -## Getting Started - -### Prerequisites - -- MinIO Operator up and running as explained in the [document here](https://github.com/minio/operator#operator-setup). -- Install [`kubectl minio` plugin](https://github.com/minio/operator/tree/master/kubectl-minio#install-plugin). - -### Create MinIO Tenant - -Use `kubectl minio` plugin to create the MinIO tenant with console enabled: - -``` -kubectl create ns tenant1-ns -kubectl create secret generic tenant1-secret --from-literal=accesskey=YOUR-ACCESS-KEY --from-literal=secretkey=YOUR-SECRET-KEY --namespace tenant1-ns -kubectl create -f https://raw.githubusercontent.com/minio/operator/master/examples/console-secret.yaml --namespace tenant1-ns -kubectl minio tenant create --name tenant1 --secret tenant1-secret --servers 4 --volumes 16 --capacity 16Ti --namespace tenant1-ns --console-secret console-secret -``` - -A complete list of values is available [here](tenant_crd.adoc##consoleconfiguration) in the API reference. diff --git a/docs/expansion.md b/docs/expansion.md index e5ce40372e1..9a5e7529a69 100644 --- a/docs/expansion.md +++ b/docs/expansion.md @@ -1,22 +1,53 @@ # Adding capacity to a MinIO Tenant [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io) -This document explains how to expand an existing MinIO Tenant with Operator. This is only applicable to a Tenant (MinIO Deployment) created by MinIO Operator. +This document explains how to expand an existing MinIO Tenant with Operator. This is only applicable to a Tenant (MinIO +Deployment) created by MinIO Operator. -MinIO expansion is done in terms of MinIO pools, read more about the design in [MinIO Docs](https://github.com/minio/minio/blob/master/docs/distributed). +MinIO expansion is done in terms of MinIO pools, read more about the design +in [MinIO Docs](https://github.com/minio/minio/blob/master/docs/distributed). ## Getting Started -You can add capacity to the tenant using `kubectl minio` plugin. +You can add capacity to the tenant using editing your tenant yaml or using the MinIO Operator Console. ``` -kubectl minio tenant volume add --name TENANT_NAME --servers SERVERS --volumes TOTAL_VOLUMES --capacity TOTAL_RAW_CAPACITY +kubectl -n NAMESPACE edit tenant TENANT_NAME ``` -Remember to replace `TENANT_NAME` with tenant name where you want to add volumes, `SERVERS` with new servers to be added to the tenant, `TOTAL_VOLUMES` with total new volumes to be added to tenant and `TOTAL_RAW_CAPACITY` with total new raw capacity to be added to the tenant. +Modify the `.spec.pools` section to add an additional pool. For example, to add a pool with 4 drives, modify the yaml +as: + +```yaml +spec: + pools: + ... + - servers: 4 + ## For naming of the pool, you can use any name, but keeping sequential numbers is recommended. + name: pool-1 + ## volumesPerServer specifies the number of volumes attached per MinIO Tenant Pod / Server. + volumesPerServer: 4 + ## This VolumeClaimTemplate is used across all the volumes provisioned for MinIO Tenant in this Pool. + volumeClaimTemplate: + metadata: + name: data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi +``` **NOTE**: Important points to consider _before_ using Tenant expansion: -- During Tenant expansion, MinIO Operator removes the existing StatefulSet and creates a new StatefulSet with required number of Pods. This means, there is a downtime during expansion, as the pods are terminated and created again. As existing StatefulSet pods are terminated, its PVCs are also deleted. It is _very important_ to ensure PVs bound to MinIO StatefulSet PVCs are not deleted at this time to avoid data loss. We recommend configuring every PV with reclaim policy [`retain`](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#retain), to ensure the PV is not deleted. If you attempt Tenant expansion while the PV reclaim policy is set to something else, it may lead to data loss. If you have the reclaim policy set to something else, change it as explained in [Kubernetes documents](https://kubernetes.io/docs/tasks/administer-Tenant/change-pv-reclaim-policy/). +- During Tenant expansion, MinIO Operator removes the existing StatefulSet and creates a new StatefulSet with required + number of Pods. This means, there is a downtime during expansion, as the pods are terminated and created again. As + existing StatefulSet pods are terminated, its PVCs are also deleted. It is _very important_ to ensure PVs bound to + MinIO StatefulSet PVCs are not deleted at this time to avoid data loss. We recommend configuring every PV with reclaim + policy [`retain`](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#retain), to ensure the PV is not + deleted. If you attempt Tenant expansion while the PV reclaim policy is set to something else, it may lead to data + loss. If you have the reclaim policy set to something else, change it as explained + in [Kubernetes documents](https://kubernetes.io/docs/tasks/administer-Tenant/change-pv-reclaim-policy/). - MinIO server currently doesn't support reducing storage capacity. @@ -24,20 +55,34 @@ Remember to replace `TENANT_NAME` with tenant name where you want to add volumes ### What are MinIO pools -A MinIO pool is a self contained entity with same SLA's (read/write quorum) for each object. There are no limits on how many pools can be combined. After adding of a pool, MinIO simply uses the least used pool. All pools are for all purposes are invisible to an any application, and MinIO handles the pools internally. +A MinIO pool is a self-contained entity with same SLA's (read/write quorum) for each object. There are no limits on how +many pools can be combined. After adding of a pool, MinIO simply uses the least used pool. All pools are for all +purposes are invisible to an any application, and MinIO handles the pools internally. ### Rules of Adding pools -There is only one requirement, i.e. based on initial pool's erasure set count (say `n`), new pools are expected to have a minimum of `n` drives to match the original Tenant SLA or it should be in multiples of `n`. For example if initial set count is 4, new pools should have at least 4 or multiple of 4 drives. +There is only one requirement, i.e. based on initial pool's erasure set count (say `n`), new pools are expected to have +a minimum of `n` drives to match the original Tenant SLA, or it should be in multiples of `n`. For example if initial +set count is 4, new pools should have at least 4 or multiple of 4 drives. ### Effects on KES/TLS Enabled Instance -If your MinIO Operator configuration has [KES](https://github.com/minio/operator/blob/master/docs/kes.md) or [Automatic TLS](https://github.com/minio/operator/blob/master/docs/tls.md#automatic-csr-generation) enabled, there are additional considerations: +If your MinIO Operator configuration has [KES](https://github.com/minio/operator/blob/master/docs/kes.md) +or [Automatic TLS](https://github.com/minio/operator/blob/master/docs/tls.md#automatic-csr-generation) enabled, there +are additional considerations: -- When new pools are added, Operator invalidates older self signed TLS certificates and the related secrets. Operator then creates new certificate signing requests (CSR). This is because there are new MinIO nodes that must be added in certificate DNS names. The administrator must approve these CSRs for MinIO server to be deployed again. Unless the CSR are approved, Operator will not create MinIO StatefulSet pods. +- When new pools are added, Operator invalidates older self-signed TLS certificates and the related secrets. Operator + then creates new certificate signing requests (CSR). This is because there are new MinIO nodes that must be added in + certificate DNS names. The administrator must approve these CSRs for MinIO server to be deployed again. Unless the CSR + are approved, Operator will not create MinIO StatefulSet pods. -- If you're using your own certificates, as explained [here](https://github.com/minio/operator/blob/master/docs/tls.md#pass-certificate-secret-to-tenant), please ensure to use/update proper certificates that allow older and new MinIO nodes. +- If you're using your own certificates, as + explained [here](https://github.com/minio/operator/blob/master/docs/tls.md#pass-certificate-secret-to-tenant), please + ensure to use/update proper certificates that allow older and new MinIO nodes. ## Downtime -The Tenant expansion process requires removing the existing StatefulSet and creating a new StatefulSet with the required number of pods. Kubernetes automatically terminates and re-creates pods and PVCs during this process. Since MinIO requires at least (Volumes/2)+1 volumes to support regular read and write operations, the expansion process may result in a period of downtime where MinIO returns errors for read and write operations. +The Tenant expansion process requires removing the existing StatefulSet and creating a new StatefulSet with the required +number of pods. Kubernetes automatically terminates and re-creates pods and PVCs during this process. Since MinIO +requires at least (Volumes/2)+1 volumes to support regular read and write operations, the expansion process may result +in a period of downtime where MinIO returns errors for read and write operations. diff --git a/docs/job_crd.adoc b/docs/job_crd.adoc new file mode 100644 index 00000000000..ea3717553b4 --- /dev/null +++ b/docs/job_crd.adoc @@ -0,0 +1,201 @@ +// Generated documentation. Please do not edit. +:anchor_prefix: k8s-api + +[id="{p}-api-reference"] +== API Reference + +:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2024-03-15T01-07-19Z] +:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2024-03-13T17-52-13Z] + + +[id="{anchor_prefix}-job-min-io-v1alpha1"] +=== job.min.io/v1alpha1 + +Package v1alpha1 - The following parameters are specific to the `job.min.io/v1alpha1` MinIOJob CRD API. + +MinIOJob is an automated InfrastructureAsCode integrated with Minio Operator STS to configure MinIO Tenants. + + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-commandspec"] +==== CommandSpec + +CommandSpec (`spec`) defines the configuration of a MinioClient Command. + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec[$$MinIOJobSpec$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`op`* __string__ +|*Required* + + + +Operation is the MinioClient Action + +|*`name`* __string__ +|Name is the Command Name, optional, required if want to reference it with `DependsOn` + +|*`args`* __object (keys:string, values:string)__ +|Args Arguments to pass to the action + +|*`dependsOn`* __string array__ +|DependsOn List of named `command` in this MinioJob that have to be scheduled and executed before this command runs + +|=== + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-commandstatus"] +==== CommandStatus + +CommandStatus Status of MinioJob command execution + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobstatus[$$MinIOJobStatus$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`name`* __string__ +| + +|*`result`* __string__ +|*Required* + + +|*`message`* __string__ +| + +|=== + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-execution"] +==== Execution (string) + +Execution is the MinIO Job level execution policy + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec[$$MinIOJobSpec$$] +**** + + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-failurestrategy"] +==== FailureStrategy (string) + +FailureStrategy is the failure strategy at MinIO Job level + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec[$$MinIOJobSpec$$] +**** + + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojob"] +==== MinIOJob + +MinIOJob is a top-level type. A client is created for it + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojoblist[$$MinIOJobList$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`metadata`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta[$$ObjectMeta$$]__ +|Refer to Kubernetes API documentation for fields of `metadata`. + + +|*`spec`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec[$$MinIOJobSpec$$]__ +|*Required* + + + +The root field for the MinIOJob object. + +|=== + + + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec"] +==== MinIOJobSpec + +MinIOJobSpec (`spec`) defines the configuration of a MinIOJob object. + + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojob[$$MinIOJob$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`serviceAccountName`* __string__ +|*Required* + + + +Service Account name for the jobs to run + +|*`tenant`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-tenantref[$$TenantRef$$]__ +|*Required* + + + +TenantRef Reference for minio Tenant to eun the jobs against + +|*`execution`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-execution[$$Execution$$]__ +|Execution order of the jobs, either `parallel` or `sequential`. +Defaults to `parallel` if not provided. + +|*`failureStrategy`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-failurestrategy[$$FailureStrategy$$]__ +|FailureStrategy is the forward plan in case of the failure of one or more MinioJob pods +Either `stopOnFailure` or `continueOnFailure`, defaults to `continueOnFailure`. + +|*`commands`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-commandspec[$$CommandSpec$$] array__ +|*Required* + + + +Commands List of MinioClient commands + +|*`mcImage`* __string__ +|mc job image + +|=== + + + + +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-tenantref"] +==== TenantRef + +TenantRef Is the reference to the target tenant of the jobs + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-job-min-io-v1alpha1-miniojobspec[$$MinIOJobSpec$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`name`* __string__ +|*Required* + + +|*`namespace`* __string__ +|*Required* + + +|=== + + diff --git a/docs/kes.md b/docs/kes.md index ff84096abc0..cce0f32f4f3 100644 --- a/docs/kes.md +++ b/docs/kes.md @@ -7,24 +7,28 @@ This document explains how to enable KES with MinIO Operator. ### Prerequisites - MinIO Operator up and running as explained in the [document here](https://github.com/minio/operator#operator-setup). -- Install [`kubectl minio` plugin](https://github.com/minio/operator/tree/master/kubectl-minio#install-plugin). -- KES requires a KMS backend in [configuration](https://raw.githubusercontent.com/minio/operator/master/examples/kes-secret.yaml). Currently KES supports [AWS Secrets Manager](https://github.com/minio/kes/wiki/AWS-SecretsManager) and [Hashicorp Vault](https://github.com/minio/kes/wiki/Hashicorp-Vault-Keystore) as KMS backend for production.S Set up one of these as the KMS backend before setting up KES. +- KES requires a KMS backend + in [configuration](https://raw.githubusercontent.com/minio/operator/master/examples/kes-secret.yaml). Currently KES + supports [AWS Secrets Manager](https://github.com/minio/kes/wiki/AWS-SecretsManager) + and [Hashicorp Vault](https://github.com/minio/kes/wiki/Hashicorp-Vault-Keystore) as KMS backend for production.S Set + up one of these as the KMS backend before setting up KES. ### Create MinIO Tenant -Use `kubectl minio` plugin to create the MinIO tenant with console and encryption enabled: +We have an example Tenant with KES encryption available +at [examples/tenant-kes-encryption](../examples/tenant-kes-encryption). -``` -kubectl create ns tenant1-ns -kubectl create secret generic tenant1-secret --from-literal=accesskey=YOUR-ACCESS-KEY --from-literal=secretkey=YOUR-SECRET-KEY --namespace tenant1-ns -kubectl create -f https://raw.githubusercontent.com/minio/operator/master/examples/console-secret.yaml --namespace tenant1-ns -kubectl create -f https://raw.githubusercontent.com/minio/operator/master/examples/kes-secret.yaml --namespace tenant1-ns -kubectl minio tenant create --name tenant1 --secret tenant1-secret --servers 4 --volumes 16 --capacity 16Ti --namespace tenant1-ns --console-secret console-secret --kes-secret kes-config +You can install the example like: + +```shell +kubectl apply -k github.com/minio/operator/examples/kustomization/tenant-kes-encryption ``` ## KES Configuration -KES Configuration is a part of Tenant yaml file. Check the sample file [available here](https://raw.githubusercontent.com/minio/operator/master/examples/kustomization/tenant-kes-encryption/tenant.yaml). The config offers below options +KES Configuration is a part of Tenant yaml file. Check the sample +file [available here](https://raw.githubusercontent.com/minio/operator/master/examples/kustomization/tenant-kes-encryption/tenant.yaml). +The config offers below options ### KES Fields diff --git a/docs/nginx-ingress.md b/docs/nginx-ingress.md index 8991a42269e..672ce3bfb38 100644 --- a/docs/nginx-ingress.md +++ b/docs/nginx-ingress.md @@ -1,46 +1,62 @@ # Ingress Configuration [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io) -Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource. This document explains how to enable Ingress for a MinIO Tenant using the [Nginx Ingress Controller](https://kubernetes.github.io/ingress-nginx/). +Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is +controlled by rules defined on the Ingress resource. This document explains how to enable Ingress for a MinIO Tenant +using the [Nginx Ingress Controller](https://kubernetes.github.io/ingress-nginx/). ## Getting Started ### Prerequisites -- MinIO Operator up and running as explained in the [document here](https://min.io/docs/minio/kubernetes/upstream/operations/installation.html). -- Nginx Ingress Controller installed and running as explained [here](https://kubernetes.github.io/ingress-nginx/deploy/). -- Network routing rules that enable external client access to Kubernetes worker nodes. For example, this tutorial assumes `minio.example.com` and `console.minio.example.com` as an externally resolvable URL. +- MinIO Operator up and running as explained in + the [document here](https://min.io/docs/minio/kubernetes/upstream/operations/installation.html). +- Nginx Ingress Controller installed and running as + explained [here](https://kubernetes.github.io/ingress-nginx/deploy/). +- Network routing rules that enable external client access to Kubernetes worker nodes. For example, this tutorial + assumes `minio.example.com` and `console.minio.example.com` as an externally resolvable URL. ### Create MinIO Tenant -Use the `kubectl minio` plugin to create the MinIO tenant if one does not already exist. See [Deploy a MinIO Tenant using the MinIO Plugin](https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html) or [`kubectl minio tenant create`](https://min.io/docs/minio/kubernetes/upstream/reference/kubectl-minio-plugin/kubectl-minio-tenant-create.html#command-kubectl.minio.tenant.create)for more complete documentation. +Create the MinIO tenant if one does not already exist. +See [Deploy a MinIO Tenant using the MinIO Operator](https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html). -The following example deploys a MinIO Tenant with 4 servers and 16 volumes in total and a total capacity of 16 Terabytes into the `tenant1-ns` namespace using the default Kubernetes storage class. Change these values as appropriate for your requirements. +The following example deploys a MinIO Tenant with 4 servers and 16 volumes in total and a total capacity of 16 Terabytes +into the `minio-tenant` namespace using the default Kubernetes storage class. Change these values as appropriate for +your requirements. ```sh -kubectl create ns tenant1-ns -kubectl minio tenant create --name tenant1 --servers 4 --volumes 16 --capacity 16Ti --namespace tenant1-ns --storage-class default +kubectl apply -k github.com/minio/operator/examples/kustomization/base ``` ### TLS Certificate -To enable TLS termination at Ingress, we'll need to either acquire a CA certificate or create a self signed certificate. Either way, after acquiring the certificate, we'll need to create a secret with the certificate as its content. We'll then need to refer this secret from the Ingress rule. +To enable TLS termination at Ingress, we'll need to either acquire a CA certificate or create a self signed certificate. +Either way, after acquiring the certificate, we'll need to create a secret with the certificate as its content. We'll +then need to refer this secret from the Ingress rule. -The following example creates a self-signed certificate for `minio.example.com` and then adds it to a Kubernetes secret using the below commands. +The following example creates a self-signed certificate for `minio.example.com` and then adds it to a Kubernetes secret +using the below commands. -- If you want to use a different hostname for your tenants, replace `minio.example.com` with the preferred hostname throughout this procedure. +- If you want to use a different hostname for your tenants, replace `minio.example.com` with the preferred hostname + throughout this procedure. -- If specifying a certificate signed by your preferred CA, perform only the `kubectl create` command, replacing the values for `--key` and `-cert` with your TLS `.key` and `.cert` files respectively. +- If specifying a certificate signed by your preferred CA, perform only the `kubectl create` command, replacing the + values for `--key` and `-cert` with your TLS `.key` and `.cert` files respectively. ```sh openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.cert -subj "/CN=minio.example.com/O=minio.example.com" kubectl create secret tls nginx-tls --key tls.key --cert tls.cert -n tenant1-ns ``` -*Note*: Using self-signed certificates may prevent client applications which require strict TLS validation and trust from connecting to the cluster. You may need to disable TLS validation / verification to allow connections to the Tenant. +*Note*: Using self-signed certificates may prevent client applications which require strict TLS validation and trust +from connecting to the cluster. You may need to disable TLS validation / verification to allow connections to the +Tenant. ### Create Ingress Rule -Use the `kubectl apply -f ingress.yaml -n tenant1-ns` using the example YAML file below to create the Ingress object in the `tenant1-ns` namespace. Once created successfully, you should be able to access the MinIO Tenant from clients outside the Kubernetes cluster using the specified hostname on the domain specified in the rule. +Use the `kubectl apply -f ingress.yaml -n tenant1-ns` using the example YAML file below to create the Ingress object in +the `tenant1-ns` namespace. Once created successfully, you should be able to access the MinIO Tenant from clients +outside the Kubernetes cluster using the specified hostname on the domain specified in the rule. ```yaml apiVersion: networking.k8s.io/v1 @@ -61,23 +77,25 @@ metadata: chunked_transfer_encoding off; spec: tls: - - hosts: - - minio.example.com - secretName: nginx-tls + - hosts: + - minio.example.com + secretName: nginx-tls rules: - - host: minio.example.com - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: minio - port: - number: 443 + - host: minio.example.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: minio + port: + number: 443 ``` -To enable Ingress route for the Tenant Console, we'll need to create a new Ingress rule. Note that this would require a separate TLS certificate with relevant domain and a secret with this TLS certificate as well (`nginx-tls-console` in below example). +To enable Ingress route for the Tenant Console, we'll need to create a new Ingress rule. Note that this would require a +separate TLS certificate with relevant domain and a secret with this TLS certificate as well (`nginx-tls-console` in +below example). ```yaml apiVersion: networking.k8s.io/v1 @@ -98,18 +116,18 @@ metadata: chunked_transfer_encoding off; spec: tls: - - hosts: - - console.minio.example.com - secretName: nginx-tls-console + - hosts: + - console.minio.example.com + secretName: nginx-tls-console rules: - - host: console.minio.example.com - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: api-mgmt-console - port: - number: 9443 + - host: console.minio.example.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: api-mgmt-console + port: + number: 9443 ``` diff --git a/docs/policybinding_crd.adoc b/docs/policybinding_crd.adoc index 5e785a93eb1..ef0bf3636e6 100644 --- a/docs/policybinding_crd.adoc +++ b/docs/policybinding_crd.adoc @@ -4,8 +4,8 @@ [id="{p}-api-reference"] == API Reference -:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2023-10-07T15-07-38Z] -:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2023-10-03T00-48-37Z] +:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2024-03-15T01-07-19Z] +:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2024-03-13T17-52-13Z] [id="{anchor_prefix}-sts-min-io-v1alpha1"] @@ -61,8 +61,10 @@ PolicyBinding is a https://kubernetes.io/docs/concepts/overview/working-with-obj |*`spec`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-sts-min-io-v1alpha1-policybindingspec[$$PolicyBindingSpec$$]__ -|*Required* + - The root field for the MinIO PolicyBinding object. +|*Required* + + + +The root field for the MinIO PolicyBinding object. |=== @@ -84,8 +86,10 @@ PolicyBindingSpec (`spec`) defines the configuration of a MinIO PolicyBinding ob | Field | Description |*`application`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-sts-min-io-v1alpha1-application[$$Application$$]__ -|*Required* + - The Application Property identifies the namespace and service account that will be authorized +|*Required* + + + +The Application Property identifies the namespace and service account that will be authorized |*`policies`* __string array__ |*Required* + diff --git a/docs/templates/asciidoctor/gv_list.tpl b/docs/templates/asciidoctor/gv_list.tpl index 20b2ad6f9b4..cef8160e764 100644 --- a/docs/templates/asciidoctor/gv_list.tpl +++ b/docs/templates/asciidoctor/gv_list.tpl @@ -7,8 +7,8 @@ [id="{p}-api-reference"] == API Reference -:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2023-10-07T15-07-38Z] -:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2023-10-03T00-48-37Z] +:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2024-03-15T01-07-19Z] +:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2024-03-13T17-52-13Z] {{ range $groupVersions }} {{ template "gvDetails" . }} diff --git a/docs/tenant-creation.md b/docs/tenant-creation.md new file mode 100644 index 00000000000..c684126ccd2 --- /dev/null +++ b/docs/tenant-creation.md @@ -0,0 +1,74 @@ +# Tenant Creation + +The basic recommended tenant creation method is +using [kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/) to create a tenant. The +following steps will guide you through the process. + +In this document we'll use the basic tenant, but there are other examples available in the `examples/kustomization` +folder in this repository. + +## Using Kustomize + +We have a base tenant example that can be used to create a tenant. The base tenant example is available in +the `examples/kustomization/base` directory and can be used like: + +```shell +kubectl apply -k github.com/minio/operator/examples/kustomization/base +``` + +This will create a tenant with the name `myminio` in the namespace `minio-tenant`. The tenant will have 4 servers and 4 +drives per server (16 drives in total) with a total capacity of 16Ti. The tenant will use the default storage class for +storage. + +It is possible to customize the tenant by creating a `kustomization.yaml` and using the example tenant as a base. + +For example, to use a particular version of MinIO in your tenant and not the one the Operator is defaulting to, you can +create a `kustomization.yaml` like: + +```yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: minio-tenant + +resources: + - github.com/minio/operator/examples/kustomization/base + +patchesStrategicMerge: + - tenant.yaml +``` + +and an overlay `tenant.yaml` like: + +```yaml +apiVersion: minio.min.io/v2 +kind: Tenant +metadata: + name: myminio + namespace: minio-tenant +spec: + image: quay.io/minio/minio:RELEASE.2024-03-15T01-07-19Z +``` + +This will create a tenant with the name `myminio` in the namespace `minio-tenant` with the MinIO version specified in +your overlay. + +Assuming you placed the `kustomization.yaml` and `tenant.yaml` in the same directory, you can create the tenant like: + +```shell +kubectl apply -k . +``` + +## Using YAML Manifests + +You can create a single static YAML file containing an example tenant as shown below: + +```yaml +kubectl kustomize github.com/minio/operator/examples/kustomization/base > minio-tenant.yaml +``` + +The YAML will have all the necessary fields to create a tenant. You can then apply the YAML to create the tenant: + +```shell +kubectl apply -f minio-tenant.yaml +``` \ No newline at end of file diff --git a/docs/tenant_crd.adoc b/docs/tenant_crd.adoc index e5aef0f1899..d2241ab0fa2 100644 --- a/docs/tenant_crd.adoc +++ b/docs/tenant_crd.adoc @@ -4,8 +4,8 @@ [id="{p}-api-reference"] == API Reference -:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2023-10-07T15-07-38Z] -:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2023-10-03T00-48-37Z] +:minio-image: https://hub.docker.com/r/minio/minio/tags[minio/minio:RELEASE.2024-03-15T01-07-19Z] +:kes-image: https://hub.docker.com/r/minio/kes/tags[minio/kes:2024-03-13T17-52-13Z] [id="{anchor_prefix}-minio-min-io-v2"] @@ -64,16 +64,22 @@ CertificateConfig (`certConfig`) defines controlling attributes associated to an | Field | Description |*`commonName`* __string__ -|*Optional* + - The `CommonName` or `CN` attribute to associate to automatically generated TLS certificates. + +|*Optional* + + + +The `CommonName` or `CN` attribute to associate to automatically generated TLS certificates. + |*`organizationName`* __string array__ -|*Optional* + - Specify one or more `OrganizationName` or `O` attributes to associate to automatically generated TLS certificates. + +|*Optional* + + + +Specify one or more `OrganizationName` or `O` attributes to associate to automatically generated TLS certificates. + |*`dnsNames`* __string array__ -|*Optional* + - Specify one or more x.509 Subject Alternative Names (SAN) to associate to automatically generated TLS certificates. MinIO Server pods use SNI to determine which certificate to respond with based on the requested hostname. +|*Optional* + + + +Specify one or more x.509 Subject Alternative Names (SAN) to associate to automatically generated TLS certificates. MinIO Server pods use SNI to determine which certificate to respond with based on the requested hostname. |=== @@ -101,6 +107,51 @@ CertificateStatus keeps track of all the certificates managed by the operator |=== +[id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig"] +==== CustomCertificateConfig + +CustomCertificateConfig (`customCertificateConfig`) provides attributes associated of the TLS certificates manually added to the Operator as part of tenant creation. These fields contain no data if there are no custom TLS certificates. + +.Appears In: +**** +- xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates[$$CustomCertificates$$] +**** + +[cols="25a,75a", options="header"] +|=== +| Field | Description + +|*`certName`* __string__ +|*Optional* + + + +Output one or more `CertName` attributes associated with the manually provided TLS certificates. + + +|*`domains`* __string array__ +|*Optional* + + + +Output one or more `Domains` attributes associated with the manually provided TLS certificates. + + +|*`expiry`* __string__ +|*Optional* + + + +Output one or more `Expiry` attributes associated with the manually provided TLS certificates. + + +|*`expiresIn`* __string__ +|*Optional* + + + +Output one or more `ExpiresIn` attributes associated with the manually provided TLS certificates. + + +|*`serialNo`* __string__ +|*Optional* + + + +Output one or more `SerialNo` attributes associated with the manually provided TLS certificates. + + +|=== [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates"] @@ -118,16 +169,22 @@ CustomCertificates (`customCertificates`) provides groupings of the TLS certific | Field | Description |*`client`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ -|*Optional* + - Client +|*Optional* + + + +Client |*`minio`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ -|*Optional* + - Minio +|*Optional* + + + +Minio |*`minioCAs`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ -|*Optional* + - Certificate Authorities +|*Optional* + + + +Certificate Authorities |=== @@ -147,12 +204,16 @@ ExposeServices (`exposeServices`) defines the exposure of the MinIO object stora | Field | Description |*`minio`* __boolean__ -|*Optional* + - Directs the Operator to expose the MinIO service. Defaults to `true`. + +|*Optional* + + + +Directs the Operator to expose the MinIO service. Defaults to `false`. + |*`console`* __boolean__ -|*Optional* + - Directs the Operator to expose the MinIO Console service. Defaults to `true`. + +|*Optional* + + + +Directs the Operator to expose the MinIO Console service. Defaults to `false`. + |=== @@ -172,16 +233,22 @@ Features (`features`) - Object describing which MinIO features to enable/disable | Field | Description |*`bucketDNS`* __boolean__ -|*Optional* + - Specify `true` to allow clients to access buckets using the DNS path `.minio.default.svc.cluster.local`. Defaults to `false`. +|*Optional* + + + +Specify `true` to allow clients to access buckets using the DNS path `.minio.default.svc.cluster.local`. Defaults to `false`. |*`domains`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantdomains[$$TenantDomains$$]__ -|*Optional* + - Specify a list of domains used to access MinIO and Console. +|*Optional* + + + +Specify a list of domains used to access MinIO and Console. |*`enableSFTP`* __boolean__ -|*Optional* + - Starts minio server with SFTP support +|*Optional* + + + +Starts minio server with SFTP support |=== @@ -213,99 +280,178 @@ KESConfig (`kes`) defines the configuration of the https://github.com/minio/kes[ | Field | Description |*`replicas`* __integer__ -|*Optional* + - Specify the number of replica KES pods to deploy in the tenant. Defaults to `2`. +|*Optional* + + + +Specify the number of replica KES pods to deploy in the tenant. Defaults to `2`. |*`image`* __string__ -|*Optional* + - The Docker image to use for deploying MinIO KES. Defaults to {kes-image}. + +|*Optional* + + + +The Docker image to use for deploying MinIO KES. Defaults to {kes-image}. + |*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ -|*Optional* + - The pull policy for the MinIO Docker image. Specify one of the following: + - * `Always` + - * `Never` + - * `IfNotPresent` (Default) + - Refer to the Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images +|*Optional* + + + +The pull policy for the MinIO Docker image. Specify one of the following: + + + +* `Always` + + + +* `Never` + + + +* `IfNotPresent` (Default) + + + +Refer to the Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images |*`serviceAccountName`* __string__ -|*Optional* + - The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO KES pods created as part of the Tenant. + +|*Optional* + + + +The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO KES pods created as part of the Tenant. + |*`kesSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ -|*Required* + - Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secret] which contains environment variables to use for setting up the MinIO KES service. + - See the https://github.com/minio/operator/blob/master/examples/kes-secret.yaml[MinIO Operator `console-secret.yaml`] for an example. +|*Required* + + + +Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secret] which contains environment variables to use for setting up the MinIO KES service. + + + +See the https://github.com/minio/operator/blob/master/examples/kes-secret.yaml[MinIO Operator `console-secret.yaml`] for an example. |*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ -|*Optional* + - Enables TLS with SNI support on each MinIO KES pod in the tenant. If `externalCertSecret` is omitted *and* `spec.requestAutoCert` is set to `false`, MinIO KES pods deploy *without* TLS enabled. + - Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secret]. The MinIO Operator copies the specified certificate to every MinIO pod in the tenant. When the MinIO pod/service responds to a TLS connection request, it uses SNI to select the certificate with matching `subjectAlternativeName`. + - Specify an object containing the following fields: + - * - `name` - The name of the Kubernetes secret containing the TLS certificate. + - * - `type` - Specify `kubernetes.io/tls` + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. +|*Optional* + + + +Enables TLS with SNI support on each MinIO KES pod in the tenant. If `externalCertSecret` is omitted *and* `spec.requestAutoCert` is set to `false`, MinIO KES pods deploy *without* TLS enabled. + + + +Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secret]. The MinIO Operator copies the specified certificate to every MinIO pod in the tenant. When the MinIO pod/service responds to a TLS connection request, it uses SNI to select the certificate with matching `subjectAlternativeName`. + + + +Specify an object containing the following fields: + + + +* - `name` - The name of the Kubernetes secret containing the TLS certificate. + + + +* - `type` - Specify `kubernetes.io/tls` + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. |*`clientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ -|*Optional* + - Specify a a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secret] containing a custom root Certificate Authority and x.509 certificate to use for performing mTLS authentication with an external Key Management Service, such as Hashicorp Vault. + - Specify an object containing the following fields: + - * - `name` - The name of the Kubernetes secret containing the Certificate Authority and x.509 Certificate. + - * - `type` - Specify `kubernetes.io/tls` + +|*Optional* + + + +Specify a a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secret] containing a custom root Certificate Authority and x.509 certificate to use for performing mTLS authentication with an external Key Management Service, such as Hashicorp Vault. + + + +Specify an object containing the following fields: + + + +* - `name` - The name of the Kubernetes secret containing the Certificate Authority and x.509 Certificate. + + + +* - `type` - Specify `kubernetes.io/tls` + |*`gcpCredentialSecretName`* __string__ -|*Optional* + - Specify the GCP default credentials to be used for KES to authenticate to GCP key store +|*Optional* + + + +Specify the GCP default credentials to be used for KES to authenticate to GCP key store |*`gcpWorkloadIdentityPool`* __string__ -|*Optional* + - Specify the name of the workload identity pool (This is required for generating service account token) +|*Optional* + + + +Specify the name of the workload identity pool (This is required for generating service account token) |*`annotations`* __object (keys:string, values:string)__ -|*Optional* + - If provided, use these annotations for KES Object Meta annotations +|*Optional* + + + +If provided, use these annotations for KES Object Meta annotations |*`labels`* __object (keys:string, values:string)__ -|*Optional* + - If provided, use these labels for KES Object Meta labels +|*Optional* + + + +If provided, use these labels for KES Object Meta labels |*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ -|*Optional* + - Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + +|*Optional* + + + +Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + |*`nodeSelector`* __object (keys:string, values:string)__ -|*Optional* + - The filter for the Operator to apply when selecting which nodes on which to deploy MinIO KES pods. The Operator only selects those nodes whose labels match the specified selector. + - See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. +|*Optional* + + + +The filter for the Operator to apply when selecting which nodes on which to deploy MinIO KES pods. The Operator only selects those nodes whose labels match the specified selector. + + + +See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. |*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ -|*Optional* + - Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to MinIO KES pods. +|*Optional* + + + +Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to MinIO KES pods. |*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ -|*Optional* + - Specify node affinity, pod affinity, and pod anti-affinity for the KES pods. + +|*Optional* + + + +Specify node affinity, pod affinity, and pod anti-affinity for the KES pods. + |*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ -|*Optional* + - Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. +|*Optional* + + + +Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. |*`keyName`* __string__ -|*Optional* + - If provided, use this as the name of the key that KES creates on the KMS backend +|*Optional* + + + +If provided, use this as the name of the key that KES creates on the KMS backend |*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ -|Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. The Operator supports only the following pod security fields: + - * `fsGroup` + - * `fsGroupChangePolicy` + - * `runAsGroup` + - * `runAsNonRoot` + - * `runAsUser` + - * `seLinuxOptions` + +|Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. The Operator supports only the following pod security fields: + + + +* `fsGroup` + + + +* `fsGroupChangePolicy` + + + +* `runAsGroup` + + + +* `runAsNonRoot` + + + +* `runAsUser` + + + +* `seLinuxOptions` + + +|*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ +|Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. |*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ -|*Optional* + - If provided, the MinIO Operator adds the specified environment variables when deploying the KES resource. +|*Optional* + + + +If provided, the MinIO Operator adds the specified environment variables when deploying the KES resource. |=== @@ -326,12 +472,16 @@ LocalCertificateReference (`externalCertSecret`, `externalCaCertSecret`,`clientC | Field | Description |*`name`* __string__ -|*Required* + - The name of the Kubernetes secret containing the TLS certificate or Certificate Authority file. + +|*Required* + + + +The name of the Kubernetes secret containing the TLS certificate or Certificate Authority file. + |*`type`* __string__ -|*Required* + - The type of Kubernetes secret. Specify `kubernetes.io/tls` + +|*Required* + + + +The type of Kubernetes secret. Specify `kubernetes.io/tls` + |=== @@ -365,8 +515,10 @@ Logging describes Logging for MinIO tenants. [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-pool"] ==== Pool -Pool (`pools`) defines a MinIO server pool on a Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. + +Pool (`pools`) defines a MinIO server pool on a Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. + .Appears In: **** @@ -378,75 +530,128 @@ Pool (`pools`) defines a MinIO server pool on a Tenant. Each pool consists of a | Field | Description |*`name`* __string__ -|*Optional* + - Specify the name of the pool. The Operator automatically generates the pool name if this field is omitted. +|*Required* + + +Specify the name of the pool. The Operator automatically generates the pool name if this field is omitted. |*`servers`* __integer__ -|*Required* - The number of MinIO server pods to deploy in the pool. The minimum value is `2`. - The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + +|*Required* + + +The number of MinIO server pods to deploy in the pool. The minimum value is `2`. + + +The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + |*`volumesPerServer`* __integer__ -|*Required* + - The number of Persistent Volume Claims to generate for each MinIO server pod in the pool. + - The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + +|*Required* + + + +The number of Persistent Volume Claims to generate for each MinIO server pod in the pool. + + + +The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + |*`volumeClaimTemplate`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$]__ -|*Required* + - Specify the configuration options for the MinIO Operator to use when generating Persistent Volume Claims for the MinIO tenant. + +|*Required* + + + +Specify the configuration options for the MinIO Operator to use when generating Persistent Volume Claims for the MinIO tenant. + |*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ -|*Optional* + - Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + +|*Optional* + + + +Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + |*`nodeSelector`* __object (keys:string, values:string)__ -|*Optional* + - The filter for the Operator to apply when selecting which nodes on which to deploy pods in the pool. The Operator only selects those nodes whose labels match the specified selector. + - See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. +|*Optional* + + + +The filter for the Operator to apply when selecting which nodes on which to deploy pods in the pool. The Operator only selects those nodes whose labels match the specified selector. + + + +See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. |*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ -|*Optional* + - Specify node affinity, pod affinity, and pod anti-affinity for pods in the MinIO pool. + +|*Optional* + + + +Specify node affinity, pod affinity, and pod anti-affinity for pods in the MinIO pool. + |*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ -|*Optional* + - Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to pods deployed in the MinIO pool. +|*Optional* + + + +Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to pods deployed in the MinIO pool. |*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ -|*Optional* + - Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. +|*Optional* + + + +Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. |*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ -|*Optional* + - Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of pods in the pool. The Operator supports only the following pod security fields: + - * `fsGroup` + - * `fsGroupChangePolicy` + - * `runAsGroup` + - * `runAsNonRoot` + - * `runAsUser` + +|*Optional* + + + +Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of pods in the pool. The Operator supports only the following pod security fields: + + + +* `fsGroup` + + + +* `fsGroupChangePolicy` + + + +* `runAsGroup` + + + +* `runAsNonRoot` + + + +* `runAsUser` + |*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ -|Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of containers in the pool. The Operator supports only the following container security fields: + - * `runAsGroup` + - * `runAsNonRoot` + - * `runAsUser` + +|Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of containers in the pool. The Operator supports only the following container security fields: + + + +* `runAsGroup` + + + +* `runAsNonRoot` + + + +* `runAsUser` + |*`annotations`* __object (keys:string, values:string)__ -|*Optional* + - Specify custom labels and annotations to append to the Pool. *Optional* + - If provided, use these annotations for the Pool Objects Meta annotations (Statefulset and Pod template) +|*Optional* + + + +Specify custom labels and annotations to append to the Pool. +*Optional* + + + +If provided, use these annotations for the Pool Objects Meta annotations (Statefulset and Pod template) |*`labels`* __object (keys:string, values:string)__ -|*Optional* + - If provided, use these labels for the Pool Objects Meta annotations (Statefulset and Pod template) +|*Optional* + + + +If provided, use these labels for the Pool Objects Meta annotations (Statefulset and Pod template) |*`runtimeClassName`* __string__ -|*Optional* + - If provided, each pod on the Statefulset will run with the specified RuntimeClassName, for more info https://kubernetes.io/docs/concepts/containers/runtime-class/ +|*Optional* + + + +If provided, each pod on the Statefulset will run with the specified RuntimeClassName, for more info https://kubernetes.io/docs/concepts/containers/runtime-class/ |*`reclaimStorage`* __boolean__ -|*Optional* + - If true. Will delete the storage when tenant has been deleted. +|*Optional* + + + +If true. Will delete the storage when tenant has been deleted. |=== @@ -484,7 +689,9 @@ PoolStatus keeps track of all the pools and their current state | |*`legacySecurityContext`* __boolean__ -|LegacySecurityContext stands for Legacy SecurityContext. It represents that these pool was created before v4.2.3 when we introduced the default securityContext as non-root, thus we should keep running this Pool without a Security Context +|LegacySecurityContext stands for Legacy SecurityContext. It represents that these pool was created before v4.2.3 when +we introduced the default securityContext as non-root, thus we should keep running this Pool without a +Security Context |=== @@ -504,20 +711,28 @@ ServiceMetadata (`serviceMetadata`) defines custom labels and annotations for th | Field | Description |*`minioServiceLabels`* __object (keys:string, values:string)__ -|*Optional* + - If provided, append these labels to the MinIO service +|*Optional* + + + +If provided, append these labels to the MinIO service |*`minioServiceAnnotations`* __object (keys:string, values:string)__ -|*Optional* + - If provided, append these annotations to the MinIO service +|*Optional* + + + +If provided, append these annotations to the MinIO service |*`consoleServiceLabels`* __object (keys:string, values:string)__ -|*Optional* + - If provided, append these labels to the Console service +|*Optional* + + + +If provided, append these labels to the Console service |*`consoleServiceAnnotations`* __object (keys:string, values:string)__ -|*Optional* + - If provided, append these annotations to the Console service +|*Optional* + + + +If provided, append these annotations to the Console service |=== @@ -537,20 +752,34 @@ SideCars (`sidecars`) defines a list of containers that the Operator attaches to | Field | Description |*`containers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ -|*Optional* + - List of containers to run inside the Pod +|*Optional* + + + +List of containers to run inside the Pod |*`volumeClaimTemplates`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$] array__ -|*Optional* + - volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. +|*Optional* + + + +volumeClaimTemplates is a list of claims that pods are allowed to reference. +The StatefulSet controller is responsible for mapping network identities to +claims in a way that maintains the identity of a pod. Every claim in +this list must have at least one matching (by name) volumeMount in one +container in the template. A claim in this list takes precedence over +any volumes in the template, with the same name. |*`volumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ -|*Optional* + - List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes +|*Optional* + + + +List of volumes that can be mounted by containers belonging to the pod. +More info: https://kubernetes.io/docs/concepts/storage/volumes |*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ -|*Optional* + - sidecar's Resource, initcontainer will use that if set. +|*Optional* + + + +sidecar's Resource, initcontainer will use that if set. |=== @@ -583,8 +812,10 @@ Tenant is a https://kubernetes.io/docs/concepts/overview/working-with-objects/ku | |*`spec`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$]__ -|*Required* + - The root field for the MinIO Tenant object. +|*Required* + + + +The root field for the MinIO Tenant object. |=== @@ -592,7 +823,9 @@ Tenant is a https://kubernetes.io/docs/concepts/overview/working-with-objects/ku [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantdomains"] ==== TenantDomains -TenantDomains (`domains`) - List of domains used to access the tenant from outside the kubernetes clusters. this will only configure MinIO for the domains listed, but external DNS configuration is still needed. The listed domains should include schema and port if any is used, i.e. https://minio.domain.com:8123 +TenantDomains (`domains`) - List of domains used to access the tenant from outside the kubernetes clusters. +this will only configure MinIO for the domains listed, but external DNS configuration is still needed. +The listed domains should include schema and port if any is used, i.e. https://minio.domain.com:8123 .Appears In: **** @@ -604,10 +837,12 @@ TenantDomains (`domains`) - List of domains used to access the tenant from outsi | Field | Description |*`minio`* __string array__ -|List of Domains used by MinIO. This will enable DNS style access to the object store where the bucket name is inferred from a subdomain in the domain. +|List of Domains used by MinIO. This will enable DNS style access to the object store where the bucket name is +inferred from a subdomain in the domain. |*`console`* __string__ -|Domain used to expose the MinIO Console, this will configure the redirect on MinIO when visiting from the browser If Console is exposed via a subpath, the domain should include it, i.e. https://console.domain.com:8123/subpath/ +|Domain used to expose the MinIO Console, this will configure the redirect on MinIO when visiting from the browser +If Console is exposed via a subpath, the domain should include it, i.e. https://console.domain.com:8123/subpath/ |=== @@ -629,8 +864,10 @@ TenantScheduler (`scheduler`) - Object describing Kubernetes Scheduler to use fo | Field | Description |*`name`* __string__ -|*Optional* + - Specify the name of the https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/[Kubernetes scheduler] to be used to schedule Tenant pods +|*Optional* + + + +Specify the name of the https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/[Kubernetes scheduler] to be used to schedule Tenant pods |=== @@ -638,9 +875,13 @@ TenantScheduler (`scheduler`) - Object describing Kubernetes Scheduler to use fo [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec"] ==== TenantSpec -TenantSpec (`spec`) defines the configuration of a MinIO Tenant object. + - The following parameters are specific to the `minio.min.io/v2` MinIO CRD API `spec` definition added as part of the MinIO Operator v4.0.0. + - For more complete documentation on this object, see the https://min.io/docs/minio/kubernetes/upstream/operations/installation.html[MinIO Kubernetes Documentation]. + +TenantSpec (`spec`) defines the configuration of a MinIO Tenant object. + + + +The following parameters are specific to the `minio.min.io/v2` MinIO CRD API `spec` definition added as part of the MinIO Operator v4.0.0. + + + +For more complete documentation on this object, see the https://min.io/docs/minio/kubernetes/upstream/operations/installation.html[MinIO Kubernetes Documentation]. + .Appears In: **** @@ -652,93 +893,194 @@ TenantSpec (`spec`) defines the configuration of a MinIO Tenant object. + | Field | Description |*`pools`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-pool[$$Pool$$] array__ -|*Required* + - An array of objects describing each MinIO server pool deployed in the MinIO Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + - The MinIO Tenant `spec` *must have* at least *one* element in the `pools` array. + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. +|*Required* + + + +An array of objects describing each MinIO server pool deployed in the MinIO Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + + + +The MinIO Tenant `spec` *must have* at least *one* element in the `pools` array. + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. |*`image`* __string__ -|*Optional* + - The Docker image to use when deploying `minio` server pods. Defaults to {minio-image}. + +|*Optional* + + + +The Docker image to use when deploying `minio` server pods. Defaults to {minio-image}. + |*`imagePullSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ -|*Optional* + - Specify the secret key to use for pulling images from a private Docker repository. + +|*Optional* + + + +Specify the secret key to use for pulling images from a private Docker repository. + |*`podManagementPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podmanagementpolicytype-v1-apps[$$PodManagementPolicyType$$]__ -|*Optional* + - Pod Management Policy for pod created by StatefulSet +|*Optional* + + + +Pod Management Policy for pod created by StatefulSet |*`credsSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ -|*optional* + - Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secret] to use for setting the MinIO root access key and secret key. Specify the secret as `name: `. The Kubernetes secret must contain the following fields: + - * `data.accesskey` - The access key for the root credentials + - * `data.secretkey` - The secret key for the root credentials + +|*optional* + + + +Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secret] to use for setting the MinIO root access key and secret key. Specify the secret as `name: `. The Kubernetes secret must contain the following fields: + + + +* `data.accesskey` - The access key for the root credentials + + + +* `data.secretkey` - The secret key for the root credentials + |*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ -|*Optional* + - If provided, the MinIO Operator adds the specified environment variables when deploying the Tenant resource. +|*Optional* + + + +If provided, the MinIO Operator adds the specified environment variables when deploying the Tenant resource. |*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ -|*Optional* + - Enables TLS with SNI support on each MinIO pod in the tenant. If `externalCertSecret` is omitted *and* `requestAutoCert` is set to `false`, the MinIO Tenant deploys *without* TLS enabled. + - Specify an array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificates to every MinIO server pod in the tenant. When the MinIO pod/service responds to a TLS connection request, it uses SNI to select the certificate with matching `subjectAlternativeName`. + - Each element in the `externalCertSecret` array is an object containing the following fields: + - * - `name` - The name of the Kubernetes secret containing the TLS certificate. + - * - `type` - Specify `kubernetes.io/tls` + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. +|*Optional* + + + +Enables TLS with SNI support on each MinIO pod in the tenant. If `externalCertSecret` is omitted *and* `requestAutoCert` is set to `false`, the MinIO Tenant deploys *without* TLS enabled. + + + +Specify an array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificates to every MinIO server pod in the tenant. When the MinIO pod/service responds to a TLS connection request, it uses SNI to select the certificate with matching `subjectAlternativeName`. + + + +Each element in the `externalCertSecret` array is an object containing the following fields: + + + +* - `name` - The name of the Kubernetes secret containing the TLS certificate. + + + +* - `type` - Specify `kubernetes.io/tls` + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. |*`externalCaCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ -|*Optional* + - Allows MinIO server pods to verify client TLS certificates signed by a Certificate Authority not in the pod's trust store. + - Specify an array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificates to every MinIO server pod in the tenant. + - Each element in the `externalCertSecret` array is an object containing the following fields: + - * - `name` - The name of the Kubernetes secret containing the Certificate Authority. + - * - `type` - Specify `kubernetes.io/tls`. + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. +|*Optional* + + + +Allows MinIO server pods to verify client TLS certificates signed by a Certificate Authority not in the pod's trust store. + + + +Specify an array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificates to every MinIO server pod in the tenant. + + + +Each element in the `externalCertSecret` array is an object containing the following fields: + + + +* - `name` - The name of the Kubernetes secret containing the Certificate Authority. + + + +* - `type` - Specify `kubernetes.io/tls`. + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. |*`externalClientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ -|*Optional* + - Enables mTLS authentication between the MinIO Tenant pods and https://github.com/minio/kes[MinIO KES]. *Required* for enabling connectivity between the MinIO Tenant and MinIO KES. + - Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificate to every MinIO server pod in the tenant. The secret *must* contain the following fields: + - * `name` - The name of the Kubernetes secret containing the TLS certificate. + - * `type` - Specify `kubernetes.io/tls` + - The specified certificate *must* correspond to an identity on the KES server. See the https://github.com/minio/kes/wiki/Configuration#policy-configuration[KES Wiki] for more information on KES identities. + - If deploying KES with the MinIO Operator, include the hash of the certificate as part of the <> object specification. + - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. +|*Optional* + + + +Enables mTLS authentication between the MinIO Tenant pods and https://github.com/minio/kes[MinIO KES]. *Required* for enabling connectivity between the MinIO Tenant and MinIO KES. + + + +Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificate to every MinIO server pod in the tenant. The secret *must* contain the following fields: + + + +* `name` - The name of the Kubernetes secret containing the TLS certificate. + + + +* `type` - Specify `kubernetes.io/tls` + + + +The specified certificate *must* correspond to an identity on the KES server. See the https://github.com/minio/kes/wiki/Configuration#policy-configuration[KES Wiki] for more information on KES identities. + + + +If deploying KES with the MinIO Operator, include the hash of the certificate as part of the <> object specification. + + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. |*`externalClientCertSecrets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ -|*Optional* + - Provide support for mounting additional client certificate into MinIO Tenant pods Multiple client certificates will be mounted using the following folder structure: + - * certs + - * * client-0 + - * * * client.crt + - * * * client.key + - * * client-1 + - * * * client.crt + - * * * client.key + - * * * client-2 + - * * client.crt + - * * * client.key + - Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificate to every MinIO server pod in the tenant that later can be referenced using environment variables. The secret *must* contain the following fields: + - * `name` - The name of the Kubernetes secret containing the TLS certificate. + - * `type` - Specify `kubernetes.io/tls` + +|*Optional* + + + +Provide support for mounting additional client certificate into MinIO Tenant pods +Multiple client certificates will be mounted using the following folder structure: + + + +* certs + + + +* * client-0 + + + +* * * client.crt + + + +* * * client.key + + + +* * client-1 + + + +* * * client.crt + + + +* * * client.key + + + +* * * client-2 + + + +* * client.crt + + + +* * * client.key + + + +Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes TLS secrets]. The MinIO Operator copies the specified certificate to every MinIO server pod in the tenant that later can be referenced using environment variables. The secret *must* contain the following fields: + + + +* `name` - The name of the Kubernetes secret containing the TLS certificate. + + + +* `type` - Specify `kubernetes.io/tls` + |*`mountPath`* __string__ -|*Optional* + - Mount path for MinIO volume (PV). Defaults to `/export` +|*Optional* + + + +Mount path for MinIO volume (PV). Defaults to `/export` |*`subPath`* __string__ -|*Optional* + - Subpath inside mount path. This is the directory where MinIO stores data. Default to `""`` (empty) +|*Optional* + + + +Subpath inside mount path. This is the directory where MinIO stores data. Default to `""`` (empty) |*`requestAutoCert`* __boolean__ -|*Optional* + - Enables using https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/[Kubernetes-based TLS certificate generation] and signing for pods and services in the MinIO Tenant. + - * Specify `true` to explicitly enable automatic certificate generate (Default). + - * Specify `false` to disable automatic certificate generation. + - If `requestAutoCert` is set to `false` *and* `externalCertSecret` is omitted, the MinIO Tenant deploys *without* TLS enabled. - See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. +|*Optional* + + + +Enables using https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/[Kubernetes-based TLS certificate generation] and signing for pods and services in the MinIO Tenant. + + + +* Specify `true` to explicitly enable automatic certificate generate (Default). + + + +* Specify `false` to disable automatic certificate generation. + + + +If `requestAutoCert` is set to `false` *and* `externalCertSecret` is omitted, the MinIO Tenant deploys *without* TLS enabled. + + +See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. |*`liveness`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ |Liveness Probe for container liveness. Container will be restarted if the probe fails. @@ -756,79 +1098,135 @@ TenantSpec (`spec`) defines the configuration of a MinIO Tenant object. + |S3 related features can be disabled or enabled such as `bucketDNS` etc. |*`certConfig`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificateconfig[$$CertificateConfig$$]__ -|*Optional* + - Enables setting the `CommonName`, `Organization`, and `dnsName` attributes for all TLS certificates automatically generated by the Operator. Configuring this object has no effect if `requestAutoCert` is `false`. + +|*Optional* + + + +Enables setting the `CommonName`, `Organization`, and `dnsName` attributes for all TLS certificates automatically generated by the Operator. Configuring this object has no effect if `requestAutoCert` is `false`. + |*`kes`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-kesconfig[$$KESConfig$$]__ -|*Optional* + - Directs the MinIO Operator to deploy the https://github.com/minio/kes[MinIO Key Encryption Service] (KES) using the specified configuration. The MinIO KES supports performing server-side encryption of objects on the MiNIO Tenant. + +|*Optional* + + + +Directs the MinIO Operator to deploy the https://github.com/minio/kes[MinIO Key Encryption Service] (KES) using the specified configuration. The MinIO KES supports performing server-side encryption of objects on the MiNIO Tenant. + |*`prometheusOperator`* __boolean__ -|*Optional* + - Directs the MinIO Operator to use prometheus operator. + - Tenant scrape configuration will be added to prometheus managed by the prometheus-operator. +|*Optional* + + + +Directs the MinIO Operator to use prometheus operator. + + + +Tenant scrape configuration will be added to prometheus managed by the prometheus-operator. |*`serviceAccountName`* __string__ -|*Optional* + - The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO pods created as part of the Tenant. + +|*Optional* + + + +The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO pods created as part of the Tenant. + |*`priorityClassName`* __string__ -|*Optional* + - Indicates the Pod priority and therefore importance of a Pod relative to other Pods in the cluster. This is applied to MinIO pods only. + - Refer Kubernetes https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass[Priority Class documentation] for more complete documentation. +|*Optional* + + + +Indicates the Pod priority and therefore importance of a Pod relative to other Pods in the cluster. +This is applied to MinIO pods only. + + + +Refer Kubernetes https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass[Priority Class documentation] for more complete documentation. |*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ -|*Optional* + - The pull policy for the MinIO Docker image. Specify one of the following: + - * `Always` + - * `Never` + - * `IfNotPresent` (Default) + - Refer Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images +|*Optional* + + + +The pull policy for the MinIO Docker image. Specify one of the following: + + + +* `Always` + + + +* `Never` + + + +* `IfNotPresent` (Default) + + + +Refer Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images |*`sideCars`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-sidecars[$$SideCars$$]__ -|*Optional* + - A list of containers to run as sidecars along every MinIO Pod deployed in the tenant. +|*Optional* + + + +A list of containers to run as sidecars along every MinIO Pod deployed in the tenant. |*`exposeServices`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-exposeservices[$$ExposeServices$$]__ -|*Optional* + - Directs the Operator to expose the MinIO and/or Console services. + +|*Optional* + + + +Directs the Operator to expose the MinIO and/or Console services. + |*`serviceMetadata`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-servicemetadata[$$ServiceMetadata$$]__ -|*Optional* + - Specify custom labels and annotations to append to the MinIO service and/or Console service. +|*Optional* + + + +Specify custom labels and annotations to append to the MinIO service and/or Console service. |*`users`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$] array__ -|*Optional* + - An array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secrets] to use for generating MinIO users during tenant provisioning. + - Each element in the array is an object consisting of a key-value pair `name: `, where the `` references an opaque Kubernetes secret. + - Each referenced Kubernetes secret must include the following fields: + - * `CONSOLE_ACCESS_KEY` - The "Username" for the MinIO user + - * `CONSOLE_SECRET_KEY` - The "Password" for the MinIO user + - The Operator creates each user with the `consoleAdmin` policy by default. You can change the assigned policy after the Tenant starts. + +|*Optional* + + + +An array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secrets] to use for generating MinIO users during tenant provisioning. + + + +Each element in the array is an object consisting of a key-value pair `name: `, where the `` references an opaque Kubernetes secret. + + + +Each referenced Kubernetes secret must include the following fields: + + + +* `CONSOLE_ACCESS_KEY` - The "Username" for the MinIO user + + + +* `CONSOLE_SECRET_KEY` - The "Password" for the MinIO user + + + +The Operator creates each user with the `consoleAdmin` policy by default. You can change the assigned policy after the Tenant starts. + |*`buckets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-bucket[$$Bucket$$] array__ -|*Optional* + - Create buckets when creating a new tenant. Skip if bucket with given name already exists +|*Optional* + + + +Create buckets when creating a new tenant. Skip if bucket with given name already exists |*`logging`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-logging[$$Logging$$]__ -|*Optional* + - Enable JSON, Anonymous logging for MinIO tenants. +|*Optional* + + + +Enable JSON, Anonymous logging for MinIO tenants. |*`configuration`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ -|*Optional* + - Specify a secret that contains additional environment variable configurations to be used for the MinIO pools. The secret is expected to have a key named config.env containing all exported environment variables for MinIO+ +|*Optional* + + + +Specify a secret that contains additional environment variable configurations to be used for the MinIO pools. +The secret is expected to have a key named config.env containing all exported environment variables for MinIO+ |*`initContainers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ -|*Optional* + - Add custom initContainers to StatefulSet +|*Optional* + + + +Add custom initContainers to StatefulSet |*`additionalVolumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ -|*Optional* + - If provided, statefulset will add these volumes. You should set the rules for the corresponding volumes and volume mounts. We will not test this rule, k8s will show the result. +|*Optional* + + + +If provided, statefulset will add these volumes. You should set the rules for the corresponding volumes and volume mounts. We will not test this rule, k8s will show the result. |*`additionalVolumeMounts`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volumemount-v1-core[$$VolumeMount$$] array__ -|*Optional* + - If provided, statefulset will add these volumes. You should set the rules for the corresponding volumes and volume mounts. We will not test this rule, k8s will show the result. +|*Optional* + + + +If provided, statefulset will add these volumes. You should set the rules for the corresponding volumes and volume mounts. We will not test this rule, k8s will show the result. |=== diff --git a/docs/tls.md b/docs/tls.md index 83329125377..e6543074303 100644 --- a/docs/tls.md +++ b/docs/tls.md @@ -51,7 +51,7 @@ Once created, set the name of the Secret (in this example `tls-ssl-minio`) under [Certificate Manager](https://cert-manager.io) is a Kubernetes Operator capable of automatically issuing certificates from multiple Issuers. Integration with MinIO is simple. First, create a new certificate issuer; for this demonstration the issuer certificate will be self-signed: ```yaml -apiVersion: cert-manager.io/v1alpha2 +apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigning-issuer @@ -63,7 +63,7 @@ Now it's possible to issue the MinIO certificate using the above issuer: ```yaml --- -apiVersion: cert-manager.io/v1alpha2 +apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: tls-minio @@ -93,4 +93,4 @@ Finally, configure MinIO to use the newly created TLS certificate: If your `MinIO` tenants are using `custom certificates` or certificates generated by your own internal `certificate authority` (ie: `cert-manager`). `MinIO Operator` needs to trust the `TLS` connections in order to talk to the `MinIO tenants`, for that you need to create a new secret in the `minio-operator` namespace named `operator-ca-tls`, inside this secret create a new key `ca.crt` that will include the public certificate -for your internal certificate authority. \ No newline at end of file +for your internal certificate authority. diff --git a/examples/kustomization/base/tenant.yaml b/examples/kustomization/base/tenant.yaml index aae1bc7cc19..b92a85bedf1 100644 --- a/examples/kustomization/base/tenant.yaml +++ b/examples/kustomization/base/tenant.yaml @@ -144,7 +144,7 @@ spec: ## https://github.com/minio/minio/tree/master/docs/tls/kubernetes#2-create-kubernetes-secret externalClientCertSecrets: [ ] ## Registry location and Tag to download MinIO Server image - image: quay.io/minio/minio:RELEASE.2023-10-07T15-07-38Z + image: quay.io/minio/minio:RELEASE.2024-03-15T01-07-19Z imagePullSecret: { } ## Mount path where PV will be mounted inside container(s). mountPath: /export @@ -215,6 +215,12 @@ spec: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault ## Enable automatic Kubernetes based certificate generation and signing as explained in ## https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster requestAutoCert: true @@ -247,7 +253,7 @@ spec: ## Audit Logs will be deprecated soon, commenting out for now!. ## LogSearch API setup for MinIO Tenant. # log: - # image: "" # defaults to minio/operator:v5.0.10 + # image: "" # defaults to minio/operator:v5.0.14 # env: [ ] # resources: { } # nodeSelector: { } diff --git a/examples/kustomization/operator-external-idp-oid/README.md b/examples/kustomization/operator-external-idp-oid/README.md new file mode 100644 index 00000000000..c90b17dfb2d --- /dev/null +++ b/examples/kustomization/operator-external-idp-oid/README.md @@ -0,0 +1,95 @@ +# Operator Console SSO with OpenID + +Operator Console supports authentication with a Kubernetes Service Account Json Web Token (JWT) or OpenID. This guide explains how to configure OpenID authentication for Operator Console using the [OpenID Authorization Code Flow](https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth). + +Note: only one authentication method can be enabled at the same time, either JWT or OpenID. + +The `kustomization.yaml` file provided in this directory installs Operator and applies the basic configurations to enable OpenID authentication for Operator Console. Modify its environment variable values as needed for your deployment and provide the CA certificate in `console-deployment.yaml` and `console-tls-secret.yaml`. + +```shell +kubectl apply -k examples/kustomization/operator-external-idp-oid/ +``` + +### IDP Server + +Specify the OpenID server URL in the Operator Console Deployment by setting the `CONSOLE_IDP_URL` environment variable. This value should point to the appropriate OpenID Endpoint configuration, for example: `https://your-extenal-idp.com/.well-known/openid-configuration`. + +Also provide the Certificate Authority (CA) that signed the certificate the IDP server presents. You can do this by mounting a secret containing the certificate `ca.crt`. For example: + +For a CA certificate resembling the following: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: idp-ca-tls + namespace: minio-operator +type: Opaque +stringData: + ca.crt: | + +``` + +Mount the secret in the Deployment as follows: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: console + namespace: minio-operator +spec: + template: + spec: + containers: + - name: console + volumeMounts: + - mountPath: /tmp/certs/CAs + name: idp-certificate + volumes: + - name: idp-certificate + projected: + sources: + - secret: + items: + - key: ca.crt + path: idp.crt + name: idp-ca-tls +... +``` + +### Client credentials + +Operator Console is a standalone application that identifies itself to the OpenID server using *client credentials*. The client credentials are set in the Operator Console with the following environment variables: +- `CONSOLE_IDP_CLIENT_ID` (client id) +- `CONSOLE_IDP_SECRET` (client secret) + +### Access Management + +All users in the OIDC realm have access to the Operator Console upon successful authentication. + +To restrict access, create a new OIDC realm and use the client ID/Secret for that realm when configuring OIDC. + +### Scopes: + +In OAuth2, scopes defines the specific actions that an application (client) is allowed to perform. If the `Client` has assigned scopes to the OpenID server to allow login in Operator Console, such scopes need to be set to Operator Console in the `CONSOLE_IDP_SCOPES` environment variable. This value should be a comma delimited string. If no value is provided, the default is `openid,profile,email`. + +### Callback URL +OpenID uses a "call back" URL to redirect back to the application once the authentication succeeds. This callback URL is set in Operator Console with the `CONSOLE_IDP_CALLBACK` environment variable. + +A Callback URL can also be constructed dynamically. To do this, set `CONSOLE_IDP_CALLBACK_DYNAMIC` environment variable to `on` instead of setting a `CONSOLE_IDP_CALBACK`. + +The constructed URL resembles following: `$protocol://$host/oauth_callback` + +- `$protocol` is either `https` or `http`, depending on whether the Operator Console has TLS enabled. +- `$host` is determined from the `HOST` header (URL) where the end user is sending the login request to Operator Console. For example, for the login URL `https://operator.mydomain.com/login`, `$host` is `operator.mydomain.com`. + +Setting `CONSOLE_IDP_CALLBACK` can be useful if you need to specify a custom domain for the Operator Console, or if the Operator Console is behind a reverse proxy or load balancer and the `HOST` header is not available. +The page located at `/oauth_callback` handles the redirect after a successful login. + +Make sure the `CONSOLE_IDP_CALLBACK` URL contains the correct path, for example `https://minio-operator.mydomain.com/oauth_callback`. + +### Token expiration + +The default OpenID login token duration is 3600 seconds (1 hour). You can set a longer duration with the +`CONSOLE_IDP_TOKEN_EXPIRATION` environment variable. diff --git a/examples/kustomization/operator-external-idp-oid/console-deployment.yaml b/examples/kustomization/operator-external-idp-oid/console-deployment.yaml new file mode 100644 index 00000000000..55d82d7e89a --- /dev/null +++ b/examples/kustomization/operator-external-idp-oid/console-deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: console + namespace: minio-operator +spec: + template: + spec: + containers: + - name: console + env: + - name: CONSOLE_IDP_URL + value: https://myidpserver.com/realms/realmname/.well-known/openid-configuration + - name: CONSOLE_IDP_CLIENT_ID + value: "" # Client registered in Open ID + - name: CONSOLE_IDP_SECRET + value: "" #Client secret in Open ID + - name: CONSOLE_IDP_CALLBACK_DYNAMIC + value: "on" + volumeMounts: + - mountPath: /tmp/certs/CAs + name: idp-certificate + volumes: + - name: idp-certificate + projected: + sources: + - secret: + items: + - key: ca.crt + path: idp.crt + name: idp-ca-tls diff --git a/examples/kustomization/operator-external-idp-oid/console-tls-secret.yaml b/examples/kustomization/operator-external-idp-oid/console-tls-secret.yaml new file mode 100644 index 00000000000..8c3ea55966c --- /dev/null +++ b/examples/kustomization/operator-external-idp-oid/console-tls-secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: idp-ca-tls + namespace: minio-operator +type: Opaque +stringData: + ca.crt: | + diff --git a/examples/kustomization/operator-external-idp-oid/kustomization.yaml b/examples/kustomization/operator-external-idp-oid/kustomization.yaml new file mode 100644 index 00000000000..ab49c756e54 --- /dev/null +++ b/examples/kustomization/operator-external-idp-oid/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - ../../../resources + - console-tls-secret.yaml + +patchesStrategicMerge: + - console-deployment.yaml diff --git a/examples/kustomization/sts-example/sample-clients/aws-sdk/python/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/aws-sdk/python/kustomization.yaml index 1e155ac60e7..556077c473f 100644 --- a/examples/kustomization/sts-example/sample-clients/aws-sdk/python/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/aws-sdk/python/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: aws-sdk-python -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/dotnet/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/minio-sdk/dotnet/kustomization.yaml index edcd74be0af..986f4c75443 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/dotnet/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/dotnet/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: minio-sdk-dotnet -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.mod b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.mod index 1b92d39326d..e9847198a5f 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.mod +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.mod @@ -16,9 +16,9 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/rs/xid v1.4.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect gopkg.in/ini.v1 v1.66.6 // indirect ) diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.sum b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.sum index 372e6b0726f..d00d049d578 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.sum +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/go.sum @@ -35,16 +35,16 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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/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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/kustomization.yaml index d404861a6e2..0836ae84f05 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/go/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/go/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: minio-sdk-go -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/java/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/minio-sdk/java/kustomization.yaml index f8333bfb2cf..8f913276659 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/java/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/java/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: minio-sdk-java -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/javascript/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/minio-sdk/javascript/kustomization.yaml index c8bc87ed1af..e4681ce75a0 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/javascript/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/javascript/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: minio-sdk-javascript -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-clients/minio-sdk/python/kustomization.yaml b/examples/kustomization/sts-example/sample-clients/minio-sdk/python/kustomization.yaml index 312ecab0c1d..a2e88cbe8e1 100644 --- a/examples/kustomization/sts-example/sample-clients/minio-sdk/python/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-clients/minio-sdk/python/kustomization.yaml @@ -8,7 +8,7 @@ images: - name: miniodev/operator-sts-example newTag: minio-sdk-python -patchesJson6902: +patches: - target: group: batch version: v1 diff --git a/examples/kustomization/sts-example/sample-data/kustomization.yaml b/examples/kustomization/sts-example/sample-data/kustomization.yaml index c0c07c4cdaf..a2d8330901c 100644 --- a/examples/kustomization/sts-example/sample-data/kustomization.yaml +++ b/examples/kustomization/sts-example/sample-data/kustomization.yaml @@ -1,4 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - iam-setup-bucket.yaml \ No newline at end of file + - mc-job-sa.yaml + - mc-job-policy-binding.yaml + - mc-job-setup-bucket.yaml \ No newline at end of file diff --git a/examples/kustomization/sts-example/sample-data/mc-job-policy-binding.yaml b/examples/kustomization/sts-example/sample-data/mc-job-policy-binding.yaml new file mode 100644 index 00000000000..e676e9996e4 --- /dev/null +++ b/examples/kustomization/sts-example/sample-data/mc-job-policy-binding.yaml @@ -0,0 +1,11 @@ +apiVersion: sts.min.io/v1alpha1 +kind: PolicyBinding +metadata: + name: mc-job-binding + namespace: minio-tenant-1 +spec: + application: + namespace: minio-tenant-1 + serviceaccount: mc-job-sa + policies: + - consoleAdmin \ No newline at end of file diff --git a/examples/kustomization/sts-example/sample-data/mc-job-sa.yaml b/examples/kustomization/sts-example/sample-data/mc-job-sa.yaml new file mode 100644 index 00000000000..88c5ba8da0d --- /dev/null +++ b/examples/kustomization/sts-example/sample-data/mc-job-sa.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: minio-tenant-1 + name: mc-job-sa \ No newline at end of file diff --git a/examples/kustomization/sts-example/sample-data/iam-setup-bucket.yaml b/examples/kustomization/sts-example/sample-data/mc-job-setup-bucket.yaml similarity index 67% rename from examples/kustomization/sts-example/sample-data/iam-setup-bucket.yaml rename to examples/kustomization/sts-example/sample-data/mc-job-setup-bucket.yaml index f36016a7aa7..057fb55acdc 100644 --- a/examples/kustomization/sts-example/sample-data/iam-setup-bucket.yaml +++ b/examples/kustomization/sts-example/sample-data/mc-job-setup-bucket.yaml @@ -6,9 +6,9 @@ metadata: data: setup.sh: | #!/bin/bash - mc mb local/test-bucket -p && \ - mc mb local/other-bucket -p && \ - mc admin policy create local test-bucket-rw /start-config/bucket-policy.json + mc mb myminio/test-bucket -p && \ + mc mb myminio/other-bucket -p && \ + mc admin policy create myminio test-bucket-rw /start-config/bucket-policy.json bucket-policy.json: | { "Version": "2012-10-17", @@ -35,6 +35,7 @@ spec: backoffLimit: 5 template: spec: + serviceAccountName: mc-job-sa restartPolicy: OnFailure volumes: - name: start-config @@ -49,15 +50,9 @@ spec: - name: start-config mountPath: /start-config/ env: - - name: ACCESS_KEY - valueFrom: - secretKeyRef: - name: storage-user - key: CONSOLE_ACCESS_KEY - - name: SECRET_KEY - valueFrom: - secretKeyRef: - name: storage-user - key: CONSOLE_SECRET_KEY - - name: MC_HOST_local + - name: MC_HOST_myminio value: https://$(ACCESS_KEY):$(SECRET_KEY)@minio.minio-tenant-1.svc.cluster.local + - name: MC_STS_ENDPOINT_myminio + value: https://sts.minio-operator.svc.cluster.local:4223/sts/minio-tenant-1 + - name: MC_WEB_IDENTITY_TOKEN_FILE_myminio + value: /var/run/secrets/kubernetes.io/serviceaccount/token diff --git a/examples/kustomization/tenant-certmanager-kes/tenant.yaml b/examples/kustomization/tenant-certmanager-kes/tenant.yaml index 3a6ef5e21bb..cc9fedc72ea 100644 --- a/examples/kustomization/tenant-certmanager-kes/tenant.yaml +++ b/examples/kustomization/tenant-certmanager-kes/tenant.yaml @@ -14,7 +14,7 @@ spec: externalCertSecret: name: tenant-certmanager-2-tls type: cert-manager.io/v1 - image: minio/kes:2023-10-03T00-48-37Z + image: minio/kes:2024-03-13T17-52-13Z imagePullPolicy: IfNotPresent kesSecret: name: kes-configuration diff --git a/examples/kustomization/tenant-kes-encryption/tenant.yaml b/examples/kustomization/tenant-kes-encryption/tenant.yaml index 266e8f9f16b..51a7dd1ea0f 100644 --- a/examples/kustomization/tenant-kes-encryption/tenant.yaml +++ b/examples/kustomization/tenant-kes-encryption/tenant.yaml @@ -7,7 +7,7 @@ spec: ## Define configuration for KES (stateless and distributed key-management system) ## Refer https://github.com/minio/kes kes: - image: "" # minio/kes:2023-10-03T00-48-37Z + image: "" # minio/kes:2024-03-13T17-52-13Z env: [ ] replicas: 2 kesSecret: diff --git a/examples/kustomization/tenant-lite/tenant.yaml b/examples/kustomization/tenant-lite/tenant.yaml index 7145e078704..8b4d1d02395 100644 --- a/examples/kustomization/tenant-lite/tenant.yaml +++ b/examples/kustomization/tenant-lite/tenant.yaml @@ -28,3 +28,9 @@ spec: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault diff --git a/examples/vault/kes-policy.hcl b/examples/vault/kes-policy.hcl index 5152ea88aa4..c7b28c5836d 100644 --- a/examples/vault/kes-policy.hcl +++ b/examples/vault/kes-policy.hcl @@ -1,3 +1,3 @@ path "kv/my-minio/*" { - capabilities = [ "create", "read", "delete" ] + capabilities = [ "create", "read", "delete", "list" ] } diff --git a/go.mod b/go.mod index 14ef66b9351..67132e7b2c0 100644 --- a/go.mod +++ b/go.mod @@ -1,197 +1,205 @@ module github.com/minio/operator -go 1.21 +go 1.21.8 require ( github.com/blang/semver/v4 v4.0.0 - github.com/docker/cli v20.10.22+incompatible + github.com/docker/cli v24.0.7+incompatible github.com/dustin/go-humanize v1.0.1 // indirect - github.com/fatih/color v1.14.1 - github.com/go-openapi/errors v0.20.4 - github.com/go-openapi/loads v0.21.2 - github.com/go-openapi/runtime v0.25.0 - github.com/go-openapi/spec v0.20.9 - github.com/go-openapi/strfmt v0.21.7 - github.com/go-openapi/swag v0.22.4 - github.com/go-openapi/validate v0.22.2-0.20230810035134-348543c76e92 + github.com/fatih/color v1.16.0 + github.com/go-openapi/errors v0.21.0 + github.com/go-openapi/loads v0.21.5 + github.com/go-openapi/runtime v0.26.2 + github.com/go-openapi/spec v0.20.13 + github.com/go-openapi/strfmt v0.21.10 + github.com/go-openapi/swag v0.22.10 + github.com/go-openapi/validate v0.22.6 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/golang-jwt/jwt/v4 v4.5.0 - github.com/google/go-containerregistry v0.12.1 - github.com/google/uuid v1.3.0 - github.com/gorilla/mux v1.8.0 + github.com/google/go-containerregistry v0.17.0 + github.com/google/uuid v1.6.0 + github.com/gorilla/mux v1.8.1 github.com/hashicorp/go-version v1.6.0 github.com/jessevdk/go-flags v1.5.0 - github.com/klauspost/compress v1.15.15 - github.com/miekg/dns v1.1.50 + github.com/klauspost/compress v1.17.6 + github.com/miekg/dns v1.1.57 github.com/minio/cli v1.24.2 github.com/minio/highwayhash v1.0.2 - github.com/minio/madmin-go/v2 v2.0.14 - github.com/minio/mc v0.0.0-20230221142751-40e51ee9affb - github.com/minio/minio-go/v7 v7.0.49 - github.com/minio/pkg v1.6.3 + github.com/minio/madmin-go/v3 v3.0.38 + github.com/minio/mc v0.0.0-20231226180728-176f657e538d + github.com/minio/minio-go/v7 v7.0.68-0.20240216175209-42ac5f4b9e79 + github.com/minio/pkg v1.7.5 github.com/minio/selfupdate v0.6.0 // indirect github.com/minio/websocket v1.6.0 github.com/mitchellh/go-homedir v1.1.0 - github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.61.1 - github.com/prometheus-operator/prometheus-operator/pkg/client v0.61.1 - github.com/rs/xid v1.4.0 // indirect + github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.70.0 + github.com/prometheus-operator/prometheus-operator/pkg/client v0.70.0 + github.com/rs/xid v1.5.0 // indirect github.com/secure-io/sio-go v0.3.1 - github.com/stretchr/testify v1.8.4 - github.com/tidwall/gjson v1.14.4 - github.com/unrolled/secure v1.13.0 - golang.org/x/crypto v0.14.0 - golang.org/x/net v0.17.0 - golang.org/x/oauth2 v0.8.0 + github.com/stretchr/testify v1.9.0 + github.com/tidwall/gjson v1.17.0 + github.com/unrolled/secure v1.14.0 + golang.org/x/crypto v0.21.0 + golang.org/x/net v0.23.0 + golang.org/x/oauth2 v0.15.0 // Added to include security fix for // https://github.com/golang/go/issues/56152 - golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.3.0 + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.5.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.28.1 - k8s.io/apimachinery v0.28.1 - k8s.io/client-go v0.28.1 - k8s.io/code-generator v0.28.0 - k8s.io/klog/v2 v2.100.1 - k8s.io/kubectl v0.25.4 - k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 + k8s.io/api v0.29.0 + k8s.io/apimachinery v0.29.0 + k8s.io/client-go v0.29.0 + k8s.io/code-generator v0.29.2 + k8s.io/klog/v2 v2.120.1 + k8s.io/kubectl v0.29.0 + k8s.io/utils v0.0.0-20231127182322-b307cd553661 + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 ) require ( github.com/go-test/deep v1.1.0 - github.com/minio/kes-go v0.1.0 - golang.org/x/mod v0.10.0 - sigs.k8s.io/controller-runtime v0.16.2 + github.com/minio/kes-go v0.2.1 + golang.org/x/mod v0.16.0 + sigs.k8s.io/controller-runtime v0.16.3 ) require ( aead.dev/mem v0.2.0 // indirect - aead.dev/minisign v0.2.0 // indirect + aead.dev/minisign v0.2.1 // indirect + github.com/VividCortex/ewma v1.2.0 // indirect + github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aymanbagabas/go-osc52 v1.2.1 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/charmbracelet/bubbles v0.15.0 // indirect - github.com/charmbracelet/bubbletea v0.23.1 // indirect - github.com/charmbracelet/lipgloss v0.6.0 // indirect + github.com/charmbracelet/bubbles v0.17.1 // indirect + github.com/charmbracelet/bubbletea v0.25.0 // indirect + github.com/charmbracelet/lipgloss v0.9.1 // indirect github.com/cheggaaa/pb v1.0.29 // indirect - github.com/containerd/console v1.0.3 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.7+incompatible // indirect + github.com/docker/docker v24.0.9+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/emicklei/go-restful/v3 v3.10.0 // indirect - github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.11.3 // indirect + github.com/evanphx/json-patch v5.7.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect - github.com/gdamore/tcell/v2 v2.5.4 // indirect - github.com/go-logr/logr v1.2.4 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/jsonpointer v0.20.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/gdamore/tcell/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-openapi/analysis v0.22.0 // indirect + github.com/go-openapi/jsonpointer v0.20.3 // indirect + github.com/go-openapi/jsonreference v0.20.5 // indirect github.com/goccy/go-json v0.10.2 // 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-models v0.6.8 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jedib0t/go-pretty/v6 v6.4.4 // indirect + github.com/jedib0t/go-pretty/v6 v6.4.9 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/juju/ratelimit v1.0.2 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect - github.com/lestrrat-go/blackmagic v1.0.1 // indirect + github.com/lestrrat-go/blackmagic v1.0.2 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect github.com/lestrrat-go/iter v1.0.2 // indirect - github.com/lestrrat-go/jwx v1.2.26 // indirect + github.com/lestrrat-go/jwx v1.2.29 // indirect github.com/lestrrat-go/option v1.0.1 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect + github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-ieproxy v0.0.1 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-ieproxy v0.0.11 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/minio/colorjson v1.0.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/minio/colorjson v1.0.6 // indirect github.com/minio/filepath v1.0.0 // indirect github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect + github.com/minio/pkg/v2 v2.0.7 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/reflow v0.3.0 // indirect - github.com/muesli/termenv v0.13.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/navidys/tvxwidgets v0.3.0 // indirect + github.com/navidys/tvxwidgets v0.4.1 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/opencontainers/image-spec v1.1.0-rc3 // indirect github.com/philhofer/fwd v1.1.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/xattr v0.4.9 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/posener/complete v1.2.3 // indirect github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect - github.com/prometheus/prom2json v1.3.2 // indirect - github.com/rivo/tview v0.0.0-20230130130022-4a1b7a76c01c // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/prom2json v1.3.3 // indirect + github.com/rivo/tview v0.0.0-20231206124440-5f078138442e // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rjeczalik/notify v0.9.3 // indirect - github.com/shirou/gopsutil/v3 v3.23.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/safchain/ethtool v0.3.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.11 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect - github.com/tinylib/msgp v1.1.8 // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect - github.com/vbatts/tar-split v0.11.2 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.etcd.io/etcd/api/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/v3 v3.5.9 // indirect - go.mongodb.org/mongo-driver v1.12.0 // indirect + github.com/tinylib/msgp v1.1.9 // indirect + github.com/tklauser/go-sysconf v0.3.13 // indirect + github.com/tklauser/numcpus v0.7.0 // indirect + github.com/vbatts/tar-split v0.11.3 // indirect + github.com/vbauerster/mpb/v8 v8.7.1 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect + go.etcd.io/etcd/api/v3 v3.5.11 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect + go.etcd.io/etcd/client/v3 v3.5.11 // indirect + go.mongodb.org/mongo-driver v1.13.1 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.25.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/tools v0.9.3 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect - google.golang.org/grpc v1.56.3 // indirect - google.golang.org/protobuf v1.30.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect + golang.org/x/tools v0.19.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/grpc v1.60.1 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/h2non/filetype.v1 v1.0.5 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.28.0 // indirect - k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/apiextensions-apiserver v0.28.4 // indirect + k8s.io/gengo v0.0.0-20240228010128-51d4e06bde70 // indirect + k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index f70f6fca3f0..35e5449da07 100644 --- a/go.sum +++ b/go.sum @@ -1,1544 +1,583 @@ aead.dev/mem v0.2.0 h1:ufgkESS9+lHV/GUjxgc2ObF43FLZGSemh+W+y27QFMI= aead.dev/mem v0.2.0/go.mod h1:4qj+sh8fjDhlvne9gm/ZaMRIX9EkmDrKOLwmyDtoMWM= -aead.dev/minisign v0.2.0 h1:kAWrq/hBRu4AARY6AlciO83xhNnW9UaC8YipS2uhLPk= aead.dev/minisign v0.2.0/go.mod h1:zdq6LdSd9TbuSxchxwhpA9zEb9YXcVGoE8JakuiGaIQ= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= +aead.dev/minisign v0.2.1 h1:Z+7HA9dsY/eGycYj6kpWHpcJpHtjAwGiJFvbiuO9o+M= +aead.dev/minisign v0.2.1/go.mod h1:oCOjeA8VQNEbuSCFaaUXKekOusa/mll6WtMoO5JY4M4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= +github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= 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/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= -github.com/aymanbagabas/go-osc52 v1.2.1 h1:q2sWUyDcozPLcLabEMd+a+7Ea2DitxZVN9hTxab9L4E= -github.com/aymanbagabas/go-osc52 v1.2.1/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/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.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charmbracelet/bubbles v0.15.0 h1:c5vZ3woHV5W2b8YZI1q7v4ZNQaPetfHuoHzx+56Z6TI= -github.com/charmbracelet/bubbles v0.15.0/go.mod h1:Y7gSFbBzlMpUDR/XM9MhZI374Q+1p1kluf1uLl8iK74= -github.com/charmbracelet/bubbletea v0.23.1 h1:CYdteX1wCiCzKNUlwm25ZHBIc1GXlYFyUIte8WPvhck= -github.com/charmbracelet/bubbletea v0.23.1/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU= -github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= -github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= -github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= +github.com/charmbracelet/bubbles v0.17.1 h1:0SIyjOnkrsfDo88YvPgAWvZMwXe26TP6drRvmkjyUu4= +github.com/charmbracelet/bubbles v0.17.1/go.mod h1:9HxZWlkCqz2PRwsCbYl7a3KXvGzFaDHpYbSYMJ+nE3o= +github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= +github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= +github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= +github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/stargz-snapshotter/estargz v0.12.1 h1:+7nYmHJb0tEkcRaAW+MHqoKaJYZmkikupxCqVtmPuY0= -github.com/containerd/stargz-snapshotter/estargz v0.12.1/go.mod h1:12VUuCq3qPq4y8yUW+l5w3+oXV3cx2Po3KSe/SmPGqw= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= +github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.4.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -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.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/docker/cli v20.10.22+incompatible h1:0E7UqWPcn4SlvLImMHyh6xwyNRUGdPxhstpHeh0bFL0= -github.com/docker/cli v20.10.22+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= +github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= 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/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= -github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= +github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= -github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/emicklei/go-restful/v3 v3.11.3 h1:yagOQz/38xJmcNeZJtrUcKjkHRltIaIFXKWeG1SkWGE= +github.com/emicklei/go-restful/v3 v3.11.3/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= +github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= 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/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -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/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.5.4 h1:TGU4tSjD3sCL788vFNeJnTdzpNKIw1H5dgLnJRQVv/k= -github.com/gdamore/tcell/v2 v2.5.4/go.mod h1:dZgRy5v4iMobMEcWNYBtREnDZAT9DYmfqIkrgEMxLyw= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-ldap/ldap/v3 v3.4.4/go.mod h1:fe1MsuN5eJJ1FeLT/LEBVdWfNWKh459R7aXgXtJC+aI= -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/gdamore/tcell/v2 v2.7.0 h1:I5LiGTQuwrysAt1KS9wg1yFfOI3arI3ucFrxtd/xqaA= +github.com/gdamore/tcell/v2 v2.7.0/go.mod h1:hl/KtAANGBecfIPxk+FzKvThTqI84oplgbPEmVX60b8= github.com/go-logr/logr v0.2.0/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.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.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= -github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= -github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= -github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= -github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= -github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlPHvhc= -github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= -github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= -github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= -github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= -github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.22.2-0.20230810035134-348543c76e92 h1:aga9z7JlDIsEmk4rFNxEP1T129jdnzi2eYtG9HIdPR0= -github.com/go-openapi/validate v0.22.2-0.20230810035134-348543c76e92/go.mod h1:kVxh31KbfsxU8ZyoHaDbLBWU5CnMdqBUEtadQ2G4d5M= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-openapi/analysis v0.22.0 h1:wQ/d07nf78HNj4u+KiSY0sT234IAyePPbMgpUjUJQR0= +github.com/go-openapi/analysis v0.22.0/go.mod h1:acDnkkCI2QxIo8sSIPgmp1wUlRohV7vfGtAIVae73b0= +github.com/go-openapi/errors v0.21.0 h1:FhChC/duCnfoLj1gZ0BgaBmzhJC2SL/sJr8a2vAobSY= +github.com/go-openapi/errors v0.21.0/go.mod h1:jxNTMUxRCKj65yb/okJGEtahVd7uvWnuWfj53bse4ho= +github.com/go-openapi/jsonpointer v0.20.3 h1:jykzYWS/kyGtsHfRt6aV8JTB9pcQAXPIA7qlZ5aRlyk= +github.com/go-openapi/jsonpointer v0.20.3/go.mod h1:c7l0rjoouAuIxCm8v/JWKRgMjDG/+/7UBWsXMrv6PsM= +github.com/go-openapi/jsonreference v0.20.5 h1:hutI+cQI+HbSQaIGSfsBsYI0pHk+CATf8Fk5gCSj0yI= +github.com/go-openapi/jsonreference v0.20.5/go.mod h1:thAqAp31UABtI+FQGKAQfmv7DbFpKNUlva2UPCxKu2Y= +github.com/go-openapi/loads v0.21.5 h1:jDzF4dSoHw6ZFADCGltDb2lE4F6De7aWSpe+IcsRzT0= +github.com/go-openapi/loads v0.21.5/go.mod h1:PxTsnFBoBe+z89riT+wYt3prmSBP6GDAQh2l9H1Flz8= +github.com/go-openapi/runtime v0.26.2 h1:elWyB9MacRzvIVgAZCBJmqTi7hBzU0hlKD4IvfX0Zl0= +github.com/go-openapi/runtime v0.26.2/go.mod h1:O034jyRZ557uJKzngbMDJXkcKJVzXJiymdSfgejrcRw= +github.com/go-openapi/spec v0.20.13 h1:XJDIN+dLH6vqXgafnl5SUIMnzaChQ6QTo0/UPMbkIaE= +github.com/go-openapi/spec v0.20.13/go.mod h1:8EOhTpBoFiask8rrgwbLC3zmJfz4zsCUueRuPM6GNkw= +github.com/go-openapi/strfmt v0.21.10 h1:JIsly3KXZB/Qf4UzvzJpg4OELH/0ASDQsyk//TTBDDk= +github.com/go-openapi/strfmt v0.21.10/go.mod h1:vNDMwbilnl7xKiO/Ve/8H8Bb2JIInBnH+lqiw6QWgis= +github.com/go-openapi/swag v0.22.10 h1:4y86NVn7Z2yYd6pfS4Z+Nyh3aAUL3Nul+LMbhFKy0gA= +github.com/go-openapi/swag v0.22.10/go.mod h1:Cnn8BYtRlx6BNE3DPN86f/xkapGIcLWzh3CLEb4C1jI= +github.com/go-openapi/validate v0.22.6 h1:+NhuwcEYpWdO5Nm4bmvhGLW0rt1Fcc532Mu3wpypXfo= +github.com/go-openapi/validate v0.22.6/go.mod h1:eaddXSqKeTg5XpSmj1dYyFTK/95n/XHwcOY+BMxKMyM= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/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.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= -github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= +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/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= +github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= 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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -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.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/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/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.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/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jedib0t/go-pretty/v6 v6.4.4 h1:N+gz6UngBPF4M288kiMURPHELDMIhF/Em35aYuKrsSc= -github.com/jedib0t/go-pretty/v6 v6.4.4/go.mod h1:MgmISkTWDSFu0xOqiZ0mKNntMQ2mDgOcwOkwBEkMDJI= +github.com/jedib0t/go-pretty/v6 v6.4.9 h1:vZ6bjGg2eBSrJn365qlxGcaWu09Id+LHtrfDWlB2Usc= +github.com/jedib0t/go-pretty/v6 v6.4.9/go.mod h1:Ndk3ase2CkQbXLLNf5QDHoYb6J9WtVfmHZu9n8rk2xs= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/ratelimit v1.0.2 h1:sRxmtRiajbvrcLQT7S+JbqU0ntsb9W2yhSdNN8tWfaI= github.com/juju/ratelimit v1.0.2/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.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.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= +github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/cpuid/v2 v2.1.2/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= +github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -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/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= -github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= -github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= -github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= +github.com/lestrrat-go/blackmagic v1.0.2 h1:Cg2gVSc9h7sz9NOByczrbUvLopQmXrfFx//N+AkAr5k= +github.com/lestrrat-go/blackmagic v1.0.2/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= -github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= -github.com/lestrrat-go/jwx v1.2.26 h1:4iFo8FPRZGDYe1t19mQP0zTRqA7n8HnJ5lkIiDvJcB0= -github.com/lestrrat-go/jwx v1.2.26/go.mod h1:MaiCdGbn3/cckbOFSCluJlJMmp9dmZm5hDuIkx8ftpQ= +github.com/lestrrat-go/jwx v1.2.29 h1:QT0utmUJ4/12rmsVQrJ3u55bycPkKqGYuGT4tyRhxSQ= +github.com/lestrrat-go/jwx v1.2.29/go.mod h1:hU8k2l6WF0ncx20uQdOmik/Gjg6E3/wIRtXSNFeZuB8= github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de h1:V53FWzU6KAZVi1tPp5UIsMoUWJ2/PNwYIDXnu7QuBCE= -github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed h1:036IscGBfJsFIgJQzlui7nK1Ncm0tp2ktmPj8xO4N/0= +github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-ieproxy v0.0.11 h1:MQ/5BuGSgDAHZOJe6YY80IF2UVCfGkwfo6AeD7HtHYo= +github.com/mattn/go-ieproxy v0.0.11/go.mod h1:/NsJd+kxZBmjMc5hrJCKMbP57B84rvq9BiDRbtO9AS0= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= github.com/minio/cli v1.24.2 h1:J+fCUh9mhPLjN3Lj/YhklXvxj8mnyE/D6FpFduXJ2jg= github.com/minio/cli v1.24.2/go.mod h1:bYxnK0uS629N3Bq+AOZZ+6lwF77Sodk4+UL9vNuXhOY= -github.com/minio/colorjson v1.0.4 h1:sNJYTb2uNswdqmGARg9wrogCX8+GRZzEacYbJT86e00= -github.com/minio/colorjson v1.0.4/go.mod h1:ZgE8vYon4xC4yfBPclP/2gqMRYw+p+xRsBbLMDKdb9M= +github.com/minio/colorjson v1.0.6 h1:m7TUvpvt0u7FBmVIEQNIa0T4NBQlxrcMBp4wJKsg2Ik= +github.com/minio/colorjson v1.0.6/go.mod h1:LUXwS5ZGNb6Eh9f+t+3uJiowD3XsIWtsvTriUBeqgYs= github.com/minio/filepath v1.0.0 h1:fvkJu1+6X+ECRA6G3+JJETj4QeAYO9sV43I79H8ubDY= github.com/minio/filepath v1.0.0/go.mod h1:/nRZA2ldl5z6jT9/KQuvZcQlxZIMQoFFQPvEXx9T/Bw= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/kes-go v0.1.0 h1:h201DyOYP5sTqajkxFGxmXz/kPbT8HQNX1uh3Yx2PFc= -github.com/minio/kes-go v0.1.0/go.mod h1:VorHLaIYis9/MxAHAtXN4d8PUMNKhIxTIlvFt0hBOEo= -github.com/minio/madmin-go v1.6.6/go.mod h1:ATvkBOLiP3av4D++2v1UEHC/QzsGtgXD5kYvvRYzdKs= -github.com/minio/madmin-go/v2 v2.0.14 h1:FJs34UMm1jmDj3rA75tZnZAVRSaeXCL6q0D4Twrwz0M= -github.com/minio/madmin-go/v2 v2.0.14/go.mod h1:lFQ1Zzi30StjJtyIpVLhjoxn/uPS+0Wxw4MyuRlNkR0= -github.com/minio/mc v0.0.0-20230221142751-40e51ee9affb h1:ZroKrSQFAx2krr0EjGvSL9ujSI42Qn5sxU7pC875qjE= -github.com/minio/mc v0.0.0-20230221142751-40e51ee9affb/go.mod h1:Yuxzld65ajOb1I89IfxInz0wqSIgHv+8NTiuoX+O+o8= +github.com/minio/kes-go v0.2.1 h1:KnqS+p6xoSFJZbQhmJaz/PbxeA6nQyRqT/ywrn5lU2o= +github.com/minio/kes-go v0.2.1/go.mod h1:76xf7l41Wrh+IifisABXK2S8uZWYgWV1IGBKC3GdOJk= +github.com/minio/madmin-go/v3 v3.0.38 h1:hgyQg43IkTq40ymFWoJwZyoqjYoT2GkiPlc1e7Bu+dY= +github.com/minio/madmin-go/v3 v3.0.38/go.mod h1:4QN2NftLSV7MdlT50dkrenOMmNVHluxTvlqJou3hte8= +github.com/minio/mc v0.0.0-20231226180728-176f657e538d h1:M+N0Vq70My+6lA/RPuOi0ytruXmZ0bZ3ZvJ1Y5ZC81o= +github.com/minio/mc v0.0.0-20231226180728-176f657e538d/go.mod h1:wFVJTmLJniMFDkcvPP0h/KvCxK+MiA2rc6q7KUefN28= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.41/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw= -github.com/minio/minio-go/v7 v7.0.49 h1:dE5DfOtnXMXCjr/HWI6zN9vCrY6Sv666qhhiwUMvGV4= -github.com/minio/minio-go/v7 v7.0.49/go.mod h1:UI34MvQEiob3Cf/gGExGMmzugkM/tNgbFypNDy5LMVc= -github.com/minio/mux v1.8.2 h1:r9oVDFM09y+u8CF4HPLanguAG41niXgYwZAFkVHce9M= -github.com/minio/mux v1.8.2/go.mod h1:1pAare17ZRL5GpmNL+9YmqHoWnLmMZF9C/ioUCfy0BQ= -github.com/minio/pkg v1.5.4/go.mod h1:2MOaRFdmFKULD+uOLc3qHLGTQTuxCNPKNPfLBTxC8CA= -github.com/minio/pkg v1.6.3 h1:8XTM8pmlR5WZyy0rYxKj7nieRgwns07Vq4FejUsg+SM= -github.com/minio/pkg v1.6.3/go.mod h1:ijZyWsfvtS0AcY6WT86AJ9VcK8gSsu++U28qlNCy9A0= +github.com/minio/minio-go/v7 v7.0.68-0.20240216175209-42ac5f4b9e79 h1:k2W8Q4byFuLwBXuMqttWOyUM3ZDPXIV2YADuyvXBwFw= +github.com/minio/minio-go/v7 v7.0.68-0.20240216175209-42ac5f4b9e79/go.mod h1:t9WAXeErXx9oDzDvMpoPzrTcv3uBVA4PaKteqSMPIAE= +github.com/minio/mux v1.9.0 h1:dWafQFyEfGhJvK6AwLOt83bIG5bxKxKJnKMCi0XAaoA= +github.com/minio/mux v1.9.0/go.mod h1:1pAare17ZRL5GpmNL+9YmqHoWnLmMZF9C/ioUCfy0BQ= +github.com/minio/pkg v1.7.5 h1:UOUJjewE5zoaDPlCMJtNx/swc1jT1ZR+IajT7hrLd44= +github.com/minio/pkg v1.7.5/go.mod h1:mEfGMTm5Z0b5EGxKNuPwyb5A2d+CC/VlUyRj6RJtIwo= +github.com/minio/pkg/v2 v2.0.7 h1:vJZ+XUTDeUe/cHpPZSyG/+54252dg6RQKU5K1jXfy/A= +github.com/minio/pkg/v2 v2.0.7/go.mod h1:yayUTo82b0RK+e97hGb1naC787mOtUEyDs3SIcwSyHI= github.com/minio/selfupdate v0.6.0 h1:i76PgT0K5xO9+hjzKcacQtO7+MjJ4JKA8Ak8XQ9DDwU= github.com/minio/selfupdate v0.6.0/go.mod h1:bO02GTIPCMQFTEvE5h4DjYB58bCoZ35XLeBf0buTDdM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/minio/websocket v1.6.0 h1:CPvnQvNvlVaQmvw5gtJNyYQhg4+xRmrPNhBbv8BdpAE= github.com/minio/websocket v1.6.0/go.mod h1:COH1CePZfHT9Ec1O7vZjTlX5uEPpyYnrifPNbu665DM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 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/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= -github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a h1:jlDOeO5TU0pYlbc/y6PFguab5IjANI0Knrpg3u/ton4= -github.com/muesli/ansi v0.0.0-20221106050444-61f0cd9a192a/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= -github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= -github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0= -github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= 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/navidys/tvxwidgets v0.3.0 h1:n04eW19PyUpnEochKGn15ZvCmKkcpzA188vH6XBnOMA= -github.com/navidys/tvxwidgets v0.3.0/go.mod h1:Cr8CTnbinH2X8bY/vwb8914mku3qImHQ8fmeqxwc9Cg= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/navidys/tvxwidgets v0.4.1 h1:abITHN2R0AN1G5XYBDCeTBfR+E1FRsDKN5j1FKI8ags= +github.com/navidys/tvxwidgets v0.4.1/go.mod h1:VJRhOCt9q4cuqN1UebaWRAc0MG4pmpHMBWL3tRSoqdI= 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.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= 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.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/philhofer/fwd v1.1.2-0.20210722190033-5c56ac6d0bb9/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.61.1 h1:ViIkBYnAUumtx9D7PiVPc1n8kNvwm+WMepDZWTZCBPc= -github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.61.1/go.mod h1:j51242bf6LQwvJ1JPKWApzTnifmCwcQq0i1p29ylWiM= -github.com/prometheus-operator/prometheus-operator/pkg/client v0.61.1 h1:y5ILBCB26Jztm/lgPwm7EcIPxfG20NbY8irIvCIZfKg= -github.com/prometheus-operator/prometheus-operator/pkg/client v0.61.1/go.mod h1:hnvR2Lm/j9sLB1mZHl9gwnuzHuC3iyX4eUPx1SVogF8= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= -github.com/prometheus/prom2json v1.3.2 h1:heRKAGHWqm8N3IaRDDNBBJNVS6a9mLdsTlFhvOaNGb0= -github.com/prometheus/prom2json v1.3.2/go.mod h1:TQ9o1OxW0eyhl4BBpVpGGsavyJfTDETna4/d0Kib+V0= -github.com/rivo/tview v0.0.0-20230130130022-4a1b7a76c01c h1:zIYU4PjQJ4BnYryMmpyizt1Un13V0ToCMXvC05DK8xc= -github.com/rivo/tview v0.0.0-20230130130022-4a1b7a76c01c/go.mod h1:lBUy/T5kyMudFzWUH/C2moN+NlU5qF505vzOyINXuUQ= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.70.0 h1:CFTvpkpVP4EXXZuaZuxpikAoma8xVha/IZKMDc9lw+Y= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.70.0/go.mod h1:npfc20mPOAu7ViOVnATVMbI7PoXvW99EzgJVqkAomIQ= +github.com/prometheus-operator/prometheus-operator/pkg/client v0.70.0 h1:PpdpJDS1MyMSLILG+Y0hgzVQ3tu6qEkRD0gR/UuvSZk= +github.com/prometheus-operator/prometheus-operator/pkg/client v0.70.0/go.mod h1:4I5Rt6iIu95JBYYaDYA+Er+YBfUwIq9Pwh5TEoBmawg= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/prom2json v1.3.3 h1:IYfSMiZ7sSOfliBoo89PcufjWO4eAR0gznGcETyaUgo= +github.com/prometheus/prom2json v1.3.3/go.mod h1:Pv4yIPktEkK7btWsrUTWDDDrnpUrAELaOCj+oFwlgmc= +github.com/rivo/tview v0.0.0-20231206124440-5f078138442e h1:mPy47VW9tkqImnSPgcjnEHJuG3XHDBtXj2hDb1qBrRs= +github.com/rivo/tview v0.0.0-20231206124440-5f078138442e/go.mod h1:c0SPlNPXkM+/Zgjn/0vD3W0Ds1yxstN7lpquqLDpWCg= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= github.com/rjeczalik/notify v0.9.3 h1:6rJAzHTGKXGj76sbRgDiDcYj/HniypXmSJo1SWakZeY= github.com/rjeczalik/notify v0.9.3/go.mod h1:gF3zSOrafR9DQEWSE8TjfI9NkooDxbyT4UgRGKZA0lc= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -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/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP0= +github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/secure-io/sio-go v0.3.1 h1:dNvY9awjabXTYGsTF1PiCySl9Ltofk9GA3VdWlo7rRc= github.com/secure-io/sio-go v0.3.1/go.mod h1:+xbkjDzPjwh4Axd07pRKSNriS9SCiYksWnZqdnfpQxs= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= -github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4= -github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA= -github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/shirou/gopsutil/v3 v3.23.11 h1:i3jP9NjCPUz7FiZKxlMnODZkdSIp2gnzfrvsu9CuWEQ= +github.com/shirou/gopsutil/v3 v3.23.11/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 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.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= -github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +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/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= +github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= -github.com/tinylib/msgp v1.1.7-0.20211026165309-e818a1881b0e/go.mod h1:g7jEyb18KPe65d9RRhGw+ThaJr5duyBH8eaFgBUor7Y= -github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= -github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= -github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU= +github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4= +github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4= +github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY= +github.com/unrolled/secure v1.14.0 h1:u9vJTU/pR4Bny0ntLUMxdfLtmIRGvQf2sEFuA0TG9AE= +github.com/unrolled/secure v1.14.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= +github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= +github.com/vbauerster/mpb/v8 v8.7.1 h1:bQoSMMTFAg/gjsLrBYmO8gbRcZt7aDq6WI2IMa9BTqM= +github.com/vbauerster/mpb/v8 v8.7.1/go.mod h1:fWgXcAu4W+0cBSUh4ZlaKJyC2KtgU27ZSTaiIk0QNsQ= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= 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/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= -go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= -go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= -go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.12.0 h1:aPx33jmn/rQuJXPQLZQ8NtfPQG8CaqgLThFtqRb0PiE= -go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E= +go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= +go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF2z1A= +go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= +go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU= +go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE= +go.mongodb.org/mongo-driver v1.13.1 h1:YIc7HTYsKndGK4RFzJ3covLz1byri52x0IoMB0Pt/vk= +go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= 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 v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-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-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -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-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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -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/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/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-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/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/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -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-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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= -google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 h1:9NWlQfY2ePejTmfwUH1OWwmznFa+0kKcHGPDvcPza9M= -google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 h1:m8v1xLLLzMe1m5P+gCTF8nJB9epwZQUBERm20Oy1poQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= -google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/h2non/filetype.v1 v1.0.5 h1:CC1jjJjoEhNVbMhXYalmGBhOBK2V70Q1N850wt/98/Y= gopkg.in/h2non/filetype.v1 v1.0.5/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo= 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.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-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/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -honnef.co/go/tools v0.0.0-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.28.1 h1:i+0O8k2NPBCPYaMB+uCkseEbawEt/eFaiRqUx8aB108= -k8s.io/api v0.28.1/go.mod h1:uBYwID+66wiL28Kn2tBjBYQdEU0Xk0z5qF8bIBqk/Dg= -k8s.io/apiextensions-apiserver v0.28.0 h1:CszgmBL8CizEnj4sj7/PtLGey6Na3YgWyGCPONv7E9E= -k8s.io/apiextensions-apiserver v0.28.0/go.mod h1:uRdYiwIuu0SyqJKriKmqEN2jThIJPhVmOWETm8ud1VE= -k8s.io/apimachinery v0.28.1 h1:EJD40og3GizBSV3mkIoXQBsws32okPOy+MkRyzh6nPY= -k8s.io/apimachinery v0.28.1/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= -k8s.io/client-go v0.28.1 h1:pRhMzB8HyLfVwpngWKE8hDcXRqifh1ga2Z/PU9SXVK8= -k8s.io/client-go v0.28.1/go.mod h1:pEZA3FqOsVkCc07pFVzK076R+P/eXqsgx5zuuRWukNE= -k8s.io/code-generator v0.28.0 h1:msdkRVJNVFgdiIJ8REl/d3cZsMB9HByFcWMmn13NyuE= -k8s.io/code-generator v0.28.0/go.mod h1:ueeSJZJ61NHBa0ccWLey6mwawum25vX61nRZ6WOzN9A= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= +k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= +k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= +k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= +k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= +k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= +k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= +k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= +k8s.io/code-generator v0.29.2 h1:c9/iw2KnNpw2IRV+wwuG/Wns2TjPSgjWzbbjTevyiHI= +k8s.io/code-generator v0.29.2/go.mod h1:FwFi3C9jCrmbPjekhaCYcYG1n07CYiW1+PAPCockaos= +k8s.io/gengo v0.0.0-20240228010128-51d4e06bde70 h1:D9H6wq7PAmub2g4XUrekNWMFVI0JIz7s0F64HBPsPOw= +k8s.io/gengo v0.0.0-20240228010128-51d4e06bde70/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/kubectl v0.25.4 h1:O3OA1z4V1ZyvxCvScjq0pxAP7ABgznr8UvnVObgI6Dc= -k8s.io/kubectl v0.25.4/go.mod h1:CKMrQ67Bn2YCP26tZStPQGq62zr9pvzEf65A0navm8k= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -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/controller-runtime v0.16.2 h1:mwXAVuEk3EQf478PQwQ48zGOXvW27UJc8NHktQVuIPU= -sigs.k8s.io/controller-runtime v0.16.2/go.mod h1:vpMu3LpI5sYWtujJOa2uPK61nB5rbwlN7BAB8aSLvGU= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +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/kubectl v0.29.0 h1:Oqi48gXjikDhrBF67AYuZRTcJV4lg2l42GmvsP7FmYI= +k8s.io/kubectl v0.29.0/go.mod h1:0jMjGWIcMIQzmUaMgAzhSELv5WtHo2a8pq67DtviAJs= +k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= +k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= 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/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/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= +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/helm-releases/operator-5.0.11.tgz b/helm-releases/operator-5.0.11.tgz new file mode 100644 index 00000000000..4374f534d4c Binary files /dev/null and b/helm-releases/operator-5.0.11.tgz differ diff --git a/helm-releases/operator-5.0.12.tgz b/helm-releases/operator-5.0.12.tgz new file mode 100644 index 00000000000..cd9655d100d Binary files /dev/null and b/helm-releases/operator-5.0.12.tgz differ diff --git a/helm-releases/operator-5.0.13.tgz b/helm-releases/operator-5.0.13.tgz new file mode 100644 index 00000000000..fffc3b3b88a Binary files /dev/null and b/helm-releases/operator-5.0.13.tgz differ diff --git a/helm-releases/operator-5.0.14.tgz b/helm-releases/operator-5.0.14.tgz new file mode 100644 index 00000000000..824613f1807 Binary files /dev/null and b/helm-releases/operator-5.0.14.tgz differ diff --git a/helm-releases/tenant-5.0.11.tgz b/helm-releases/tenant-5.0.11.tgz new file mode 100644 index 00000000000..293199399ca Binary files /dev/null and b/helm-releases/tenant-5.0.11.tgz differ diff --git a/helm-releases/tenant-5.0.12.tgz b/helm-releases/tenant-5.0.12.tgz new file mode 100644 index 00000000000..d69dc926d0d Binary files /dev/null and b/helm-releases/tenant-5.0.12.tgz differ diff --git a/helm-releases/tenant-5.0.13.tgz b/helm-releases/tenant-5.0.13.tgz new file mode 100644 index 00000000000..7850d330578 Binary files /dev/null and b/helm-releases/tenant-5.0.13.tgz differ diff --git a/helm-releases/tenant-5.0.14.tgz b/helm-releases/tenant-5.0.14.tgz new file mode 100644 index 00000000000..5d5bc3e4338 Binary files /dev/null and b/helm-releases/tenant-5.0.14.tgz differ diff --git a/helm/operator/Chart.yaml b/helm/operator/Chart.yaml index f78513aec91..3d9bbc4bd9a 100644 --- a/helm/operator/Chart.yaml +++ b/helm/operator/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: A Helm chart for MinIO Operator name: operator -version: 5.0.10 -appVersion: v5.0.10 +version: 5.0.14 +appVersion: v5.0.14 keywords: - storage - object-storage diff --git a/helm/operator/templates/NOTES.txt b/helm/operator/templates/NOTES.txt index 47b9aea9e86..9766c6dcbce 100644 --- a/helm/operator/templates/NOTES.txt +++ b/helm/operator/templates/NOTES.txt @@ -9,7 +9,7 @@ metadata: kubernetes.io/service-account.name: console-sa type: kubernetes.io/service-account-token EOF -kubectl -n minio-operator get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode +kubectl -n {{ .Release.Namespace }} get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode 2. Get the Operator Console URL by running these commands: kubectl --namespace {{ .Release.Namespace }} port-forward svc/console 9090:9090 diff --git a/helm/operator/templates/_helpers.tpl b/helm/operator/templates/_helpers.tpl index ca3bdc46930..716adfd07c5 100644 --- a/helm/operator/templates/_helpers.tpl +++ b/helm/operator/templates/_helpers.tpl @@ -20,13 +20,6 @@ If release name contains chart name it will be used as a full name. {{- end -}} {{- end -}} -{{/* -Expand the name of the Operator Console. -*/}} -{{- define "minio-operator.console-name" -}} - {{- printf "%s-%s" .Chart.Name "console" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - {{/* Create a default fully qualified console name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). @@ -48,11 +41,13 @@ Common labels for operator */}} {{- define "minio-operator.labels" -}} helm.sh/chart: {{ include "minio-operator.chart" . }} -{{ include "minio-operator.selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- range $key, $val := .Values.operator.additionalLabels }} +{{ $key }}: {{ $val | quote }} +{{- end }} {{- end -}} {{/* @@ -68,15 +63,17 @@ Common labels for console */}} {{- define "minio-operator.console-labels" -}} helm.sh/chart: {{ include "minio-operator.chart" . }} -{{ include "minio-operator.console-selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- range $key, $val := .Values.console.additionalLabels }} +{{ $key }}: {{ $val | quote }} +{{- end }} {{- end -}} {{/* -Selector labels Operator +Selector labels Console */}} {{- define "minio-operator.console-selectorLabels" -}} app.kubernetes.io/name: {{ include "minio-operator.name" . }} diff --git a/helm/operator/templates/console-clusterrole.yaml b/helm/operator/templates/console-clusterrole.yaml index e6d1c467e99..894a287dcad 100644 --- a/helm/operator/templates/console-clusterrole.yaml +++ b/helm/operator/templates/console-clusterrole.yaml @@ -3,6 +3,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: console-sa-role + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} rules: - apiGroups: - "" @@ -10,13 +11,15 @@ rules: - secrets verbs: - get + - list - watch + {{- if not .Values.console.readOnly }} - create - - list - patch - update - delete - deletecollection + {{- end }} - apiGroups: - "" resources: @@ -27,42 +30,50 @@ rules: - nodes verbs: - get + - list - watch + {{- if not .Values.console.readOnly }} - create - - list - patch + {{- end }} - apiGroups: - "" resources: - pods verbs: - get + - list - watch + {{- if not .Values.console.readOnly }} - create - - list - patch - delete - deletecollection + {{- end }} - apiGroups: - "" resources: - persistentvolumeclaims verbs: - - deletecollection - - list - get + - list - watch + {{- if not .Values.console.readOnly }} - update + - deletecollection + {{- end }} - apiGroups: - storage.k8s.io resources: - storageclasses verbs: - get + - list - watch + {{- if not .Values.console.readOnly }} - create - - list - patch + {{- end }} - apiGroups: - apps resources: @@ -70,24 +81,28 @@ rules: - deployments verbs: - get - - create - list - - patch - watch + {{- if not .Values.console.readOnly }} + - create + - patch - update - delete + {{- end }} - apiGroups: - batch resources: - jobs verbs: - get - - create - list - - patch - watch + {{- if not .Values.console.readOnly }} + - create + - patch - update - delete + {{- end }} - apiGroups: - certificates.k8s.io resources: @@ -95,11 +110,13 @@ rules: - certificatesigningrequests/approval - certificatesigningrequests/status verbs: + - get + - list + {{- if not .Values.console.readOnly }} - update - create - - get - delete - - list + {{- end }} - apiGroups: - minio.min.io resources: @@ -111,7 +128,13 @@ rules: resources: - '*' verbs: + {{- if not .Values.console.readOnly }} + - get + - list + - watch + {{- else }} - '*' + {{- end }} - apiGroups: - "" resources: @@ -120,8 +143,10 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - delete + {{- end }} - apiGroups: - "" resources: @@ -130,17 +155,21 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - update + {{- end }} - apiGroups: - "" resources: - events verbs: - - create - list - watch + {{- if not .Values.console.readOnly }} + - create - update - patch + {{- end }} - apiGroups: - snapshot.storage.k8s.io resources: @@ -179,9 +208,11 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - update - delete + {{- end }} - apiGroups: - coordination.k8s.io resources: @@ -190,9 +221,11 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - update - delete + {{- end }} - apiGroups: - direct.csi.min.io resources: @@ -201,9 +234,11 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - update - delete + {{- end }} - apiGroups: - apiextensions.k8s.io resources: @@ -212,9 +247,11 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - update - delete + {{- end }} - apiGroups: - direct.csi.min.io resources: @@ -224,9 +261,11 @@ rules: - get - list - watch + {{- if not .Values.console.readOnly }} - create - update - delete + {{- end }} - apiGroups: - "" resources: diff --git a/helm/operator/templates/console-clusterrolebinding.yaml b/helm/operator/templates/console-clusterrolebinding.yaml index 05f06d52bf5..63877a71ff1 100644 --- a/helm/operator/templates/console-clusterrolebinding.yaml +++ b/helm/operator/templates/console-clusterrolebinding.yaml @@ -3,6 +3,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: console-sa-binding + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole diff --git a/helm/operator/templates/console-configmap.yaml b/helm/operator/templates/console-configmap.yaml index e45634f49fa..4f3c3ef221a 100644 --- a/helm/operator/templates/console-configmap.yaml +++ b/helm/operator/templates/console-configmap.yaml @@ -4,6 +4,7 @@ kind: ConfigMap metadata: name: console-env namespace: {{ .Release.Namespace }} + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} data: CONSOLE_PORT: "9090" CONSOLE_TLS_PORT: "9443" diff --git a/helm/operator/templates/console-deployment.yaml b/helm/operator/templates/console-deployment.yaml index ad4f7521e75..bea49e0531c 100644 --- a/helm/operator/templates/console-deployment.yaml +++ b/helm/operator/templates/console-deployment.yaml @@ -4,14 +4,16 @@ kind: Deployment metadata: name: console namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.labels" . | nindent 4 }} + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} spec: replicas: {{ .Values.console.replicaCount }} selector: matchLabels: {{- include "minio-operator.console-selectorLabels" . | nindent 6 }} template: metadata: - labels: {{- include "minio-operator.console-selectorLabels" . | nindent 8 }} + labels: + {{- include "minio-operator.console-labels" . | nindent 8 }} + {{- include "minio-operator.console-selectorLabels" . | nindent 8 }} spec: {{- with .Values.console.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} diff --git a/helm/operator/templates/console-ingress.yaml b/helm/operator/templates/console-ingress.yaml index bce6c9f1910..a4687151ded 100644 --- a/helm/operator/templates/console-ingress.yaml +++ b/helm/operator/templates/console-ingress.yaml @@ -35,6 +35,6 @@ spec: service: name: "console" port: - name: http + number: {{ .Values.console.ingress.number }} {{- end }} {{- end }} diff --git a/helm/operator/templates/console-secret.yaml b/helm/operator/templates/console-secret.yaml index 78b4fbdb00c..7d1055792bb 100644 --- a/helm/operator/templates/console-secret.yaml +++ b/helm/operator/templates/console-secret.yaml @@ -6,5 +6,6 @@ metadata: namespace: {{ .Release.Namespace }} annotations: kubernetes.io/service-account.name: console-sa + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} type: kubernetes.io/service-account-token {{- end }} diff --git a/helm/operator/templates/console-service.yaml b/helm/operator/templates/console-service.yaml index fbd1e3e3e51..2a518e84d48 100644 --- a/helm/operator/templates/console-service.yaml +++ b/helm/operator/templates/console-service.yaml @@ -4,7 +4,7 @@ kind: Service metadata: name: console namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.labels" . | nindent 4 }} + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} spec: ports: - name: http diff --git a/helm/operator/templates/console-serviceaccount.yaml b/helm/operator/templates/console-serviceaccount.yaml index 8b767397742..638305ec879 100644 --- a/helm/operator/templates/console-serviceaccount.yaml +++ b/helm/operator/templates/console-serviceaccount.yaml @@ -4,4 +4,5 @@ kind: ServiceAccount metadata: name: console-sa namespace: {{ .Release.Namespace }} + labels: {{- include "minio-operator.console-labels" . | nindent 4 }} {{- end }} diff --git a/helm/operator/templates/job.min.io_jobs.yaml b/helm/operator/templates/job.min.io_jobs.yaml new file mode 100644 index 00000000000..2b0f025c890 --- /dev/null +++ b/helm/operator/templates/job.min.io_jobs.yaml @@ -0,0 +1,114 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/helm/operator/templates/minio.min.io_tenants.yaml b/helm/operator/templates/minio.min.io_tenants.yaml index b06226fa719..cf9395f4a61 100644 --- a/helm/operator/templates/minio.min.io_tenants.yaml +++ b/helm/operator/templates/minio.min.io_tenants.yaml @@ -3,8 +3,8 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 name: tenants.minio.min.io spec: group: minio.min.io @@ -310,18 +310,6 @@ spec: 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: @@ -365,6 +353,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -553,6 +543,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1107,6 +1134,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1157,6 +1192,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1715,6 +1758,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1783,6 +1836,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1849,6 +1912,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1917,6 +1990,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1966,6 +2049,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2558,6 +2702,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2626,6 +2780,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2692,6 +2856,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2760,6 +2934,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2973,6 +3157,9 @@ spec: servers: format: int32 type: integer + x-kubernetes-validations: + - message: servers is immutable + rule: self == oldSelf tolerations: items: properties: @@ -3101,18 +3288,6 @@ spec: 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: @@ -3156,6 +3331,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3210,6 +3387,17 @@ spec: - type type: object type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object phase: type: string type: object @@ -3217,12 +3405,19 @@ spec: volumesPerServer: format: int32 type: integer + x-kubernetes-validations: + - message: volumesPerServer is immutable + rule: self == oldSelf required: + - name - servers - volumeClaimTemplate - volumesPerServer type: object type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map priorityClassName: type: string prometheusOperator: @@ -3471,6 +3666,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3521,6 +3724,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -4042,18 +4253,6 @@ spec: 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: @@ -4097,6 +4296,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4151,6 +4352,17 @@ spec: - type type: object type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object phase: type: string type: object @@ -4403,18 +4615,6 @@ spec: 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: @@ -4458,6 +4658,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4646,6 +4848,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: diff --git a/helm/operator/templates/operator-clusterrole.yaml b/helm/operator/templates/operator-clusterrole.yaml index 3e58817c15b..bf054c58b34 100644 --- a/helm/operator/templates/operator-clusterrole.yaml +++ b/helm/operator/templates/operator-clusterrole.yaml @@ -2,6 +2,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: minio-operator-role + labels: {{- include "minio-operator.labels" . | nindent 4 }} rules: - apiGroups: - "apiextensions.k8s.io" @@ -141,6 +142,7 @@ rules: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - "*" verbs: diff --git a/helm/operator/templates/operator-clusterrolebinding.yaml b/helm/operator/templates/operator-clusterrolebinding.yaml index b991fe8680c..ad4add53d4b 100644 --- a/helm/operator/templates/operator-clusterrolebinding.yaml +++ b/helm/operator/templates/operator-clusterrolebinding.yaml @@ -2,6 +2,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: minio-operator-binding + labels: {{- include "minio-operator.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole diff --git a/helm/operator/templates/operator-deployment.yaml b/helm/operator/templates/operator-deployment.yaml index c79885adb09..c883b6bb92d 100644 --- a/helm/operator/templates/operator-deployment.yaml +++ b/helm/operator/templates/operator-deployment.yaml @@ -10,7 +10,9 @@ spec: matchLabels: {{- include "minio-operator.selectorLabels" . | nindent 6 }} template: metadata: - labels: {{- include "minio-operator.selectorLabels" . | nindent 8 }} + labels: + {{- include "minio-operator.labels" . | nindent 8 }} + {{- include "minio-operator.selectorLabels" . | nindent 8 }} spec: {{- with .Values.operator.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} diff --git a/helm/operator/templates/operator-serviceaccount.yaml b/helm/operator/templates/operator-serviceaccount.yaml index 7b644248028..8ae899da6e1 100644 --- a/helm/operator/templates/operator-serviceaccount.yaml +++ b/helm/operator/templates/operator-serviceaccount.yaml @@ -4,3 +4,7 @@ metadata: name: minio-operator namespace: {{ .Release.Namespace }} labels: {{- include "minio-operator.labels" . | nindent 4 }} + {{- with .Values.operator.serviceAccountAnnotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} diff --git a/helm/operator/templates/sts.min.io_policybindings.yaml b/helm/operator/templates/sts.min.io_policybindings.yaml index b01576f5bda..b605e3da91f 100644 --- a/helm/operator/templates/sts.min.io_policybindings.yaml +++ b/helm/operator/templates/sts.min.io_policybindings.yaml @@ -3,8 +3,8 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 name: policybindings.sts.min.io spec: group: sts.min.io diff --git a/helm/operator/values.yaml b/helm/operator/values.yaml index d4de44ab97a..e93458b29b8 100644 --- a/helm/operator/values.yaml +++ b/helm/operator/values.yaml @@ -4,7 +4,7 @@ operator: ### # An array of environment variables to pass to the Operator deployment. # Pass an empty array to start Operator with defaults. - # + # # For example: # # .. code-block:: yaml @@ -21,27 +21,34 @@ operator: # - name: WATCHED_NAMESPACE # value: "" # - name: MINIO_OPERATOR_RUNTIME - # value: "OpenShift" + # value: "OpenShift" # # See `Operator environment variables `__ for a list of all supported values. + # If MINIO_CONSOLE_TLS_ENABLE is enabled, utilize port 9443 for console.ingress.number. env: - name: OPERATOR_STS_ENABLED value: "on" + - name: MINIO_CONSOLE_TLS_ENABLE + value: "off" + # An array of additional annotations to be applied to the operator service account + serviceAccountAnnotations: [] + # additional labels to be applied to operator resources + additionalLabels: {} ### # Specify the Operator container image to use for the deployment. - # ``image.tag`` - # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.10 tag. + # ``image.tag`` + # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.14 tag. # The container pulls the image if not already present: # # .. code-block:: yaml - # + # # image: # repository: quay.io/minio/operator - # tag: v5.0.10 + # tag: v5.0.14 # pullPolicy: IfNotPresent # # The chart also supports specifying an image based on digest value: - # + # # .. code-block:: yaml # # image: @@ -51,7 +58,7 @@ operator: # image: repository: quay.io/minio/operator - tag: v5.0.10 + tag: v5.0.14 pullPolicy: IfNotPresent ### # @@ -90,6 +97,12 @@ operator: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault ### # An array of `Volumes `__ which the Operator can mount to pods. # @@ -97,7 +110,7 @@ operator: volumes: [ ] ### # An array of volume mount points associated to each Operator container. - # + # # Specify each item in the array as follows: # # .. code-block:: yaml @@ -147,7 +160,7 @@ operator: # These settings determine the distribution of pods across worker nodes. topologySpreadConstraints: [ ] ### - # + # # The `Requests or Limits `__ for resources to associate to Operator pods. # # These settings can control the minimum and maximum resources requested for each pod. @@ -166,21 +179,23 @@ console: # # If the Operator Console is disabled, all management of Operator Tenants must be done through the Kubernetes API. enabled: true + # additional labels to include for console resources + additionalLabels: {} ### # Specify the Operator Console container image to use for the deployment. - # ``image.tag`` - # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.10 tag. + # ``image.tag`` + # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.14 tag. # The container pulls the image if not already present: # # .. code-block:: yaml - # + # # image: # repository: quay.io/minio/operator - # tag: v5.0.10 + # tag: v5.0.14 # pullPolicy: IfNotPresent # # The chart also supports specifying an image based on digest value: - # + # # .. code-block:: yaml # # image: @@ -191,7 +206,7 @@ console: # The specified values should match that of ``operator.image`` to ensure predictable operations. image: repository: quay.io/minio/operator - tag: v5.0.10 + tag: v5.0.14 pullPolicy: IfNotPresent ### # An array of environment variables to pass to the Operator Console deployment. @@ -252,7 +267,7 @@ console: # These settings determine the distribution of pods across worker nodes. topologySpreadConstraints: [ ] ### - # + # # The `Requests or Limits `__ for resources to associate to Operator Console pods. # # These settings can control the minimum and maximum resources requested for each pod. @@ -267,17 +282,32 @@ console: # You may need to modify these values to meet your cluster's security and access settings. securityContext: runAsUser: 1000 + runAsGroup: 1000 runAsNonRoot: true ### # The Kubernetes `SecurityContext `__ to use for deploying Operator Console containers. # You may need to modify these values to meet your cluster's security and access settings. containerSecurityContext: runAsUser: 1000 + runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + + ### + # Forbid write permissions + readOnly: false + ### # Configures `Ingress `__ for the Operator Console. # # Set the keys to conform to the Ingress controller and configuration of your choice. + # Set console.ingress.number to any port. For example: + # You may choose port number 9443 for HTTPS or 9090 for HTTP, as desired. ingress: enabled: false ingressClassName: "" @@ -287,14 +317,17 @@ console: host: console.local path: / pathType: Prefix + number: 9090 ### # An array of `Volumes `__ which the Operator Console can mount to pods. # # The volumes must exist *and* be accessible to the Console pods. - volumes: [ ] + volumes: + - name: tmp + emptyDir: {} ### # An array of volume mount points associated to each Operator Console container. - # + # # Specify each item in the array as follows: # # .. code-block:: yaml @@ -304,4 +337,7 @@ console: # mountPath: /path/to/mount # # The ``name`` field must correspond to an entry in the ``volumes`` array. - volumeMounts: [ ] + volumeMounts: + - name: tmp + readOnly: false + mountPath: /tmp/certs/CAs diff --git a/helm/tenant/Chart.yaml b/helm/tenant/Chart.yaml index 1c3666a32cc..313dca89197 100644 --- a/helm/tenant/Chart.yaml +++ b/helm/tenant/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: A Helm chart for MinIO Operator name: tenant -version: 5.0.10 -appVersion: v5.0.10 +version: 5.0.14 +appVersion: v5.0.14 keywords: - storage - object-storage diff --git a/helm/tenant/templates/_helpers.tpl b/helm/tenant/templates/_helpers.tpl index 91e5194097b..4fa286408a7 100644 --- a/helm/tenant/templates/_helpers.tpl +++ b/helm/tenant/templates/_helpers.tpl @@ -1,89 +1,4 @@ {{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "minio-operator.name" -}} - {{- default .Chart.Name | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "minio-operator.fullname" -}} - {{- $name := default .Chart.Name -}} - {{- if contains $name .Release.Name -}} - {{- .Release.Name | trunc 63 | trimSuffix "-" -}} - {{- else -}} - {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} - {{- end -}} -{{- end -}} - -{{/* -Expand the name of the Operator Console. -*/}} -{{- define "minio-operator.console-name" -}} - {{- printf "%s-%s" .Chart.Name "console" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified console name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "minio-operator.console-fullname" -}} - {{- printf "%s-%s" .Release.Name "console" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "minio-operator.chart" -}} - {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Common labels for operator -*/}} -{{- define "minio-operator.labels" -}} -helm.sh/chart: {{ include "minio-operator.chart" . }} -{{ include "minio-operator.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} - -{{/* -Selector labels Operator -*/}} -{{- define "minio-operator.selectorLabels" -}} -app.kubernetes.io/name: {{ include "minio-operator.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end -}} - -{{/* -Common labels for console -*/}} -{{- define "minio-operator.console-labels" -}} -helm.sh/chart: {{ include "minio-operator.chart" . }} -{{ include "minio-operator.console-selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} - -{{/* -Selector labels Operator -*/}} -{{- define "minio-operator.console-selectorLabels" -}} -app.kubernetes.io/name: {{ include "minio-operator.name" . }} -app.kubernetes.io/instance: {{ printf "%s-%s" .Release.Name "console" }} -{{- end -}} - - {{/* Renders a value that contains template. Usage: diff --git a/helm/tenant/templates/api-ingress.yaml b/helm/tenant/templates/api-ingress.yaml index 25038cddb3f..97ee9010183 100644 --- a/helm/tenant/templates/api-ingress.yaml +++ b/helm/tenant/templates/api-ingress.yaml @@ -38,4 +38,20 @@ spec: {{- else }} name: http-minio {{- end }} + {{- if .Values.tenant.features.bucketDNS }} + - host: "*.{{ .Values.ingress.api.host }}" + http: + paths: + - path: {{ .Values.ingress.api.path }} + pathType: {{ .Values.ingress.api.pathType }} + backend: + service: + name: minio + port: + {{- if or .Values.tenant.certificate.requestAutoCert (not (empty .Values.tenant.certificate.externalCertSecret)) }} + name: https-minio + {{- else }} + name: http-minio + {{- end }} + {{- end }} {{- end }} diff --git a/helm/tenant/templates/tenant-configuration.yaml b/helm/tenant/templates/tenant-configuration.yaml index d749cc4fa7e..af2cea7fb0d 100644 --- a/helm/tenant/templates/tenant-configuration.yaml +++ b/helm/tenant/templates/tenant-configuration.yaml @@ -1,4 +1,10 @@ -{{- if not .Values.secrets.existingSecret }} +{{- if (.Values.secrets) }} +{{- print "# WARNING: '.secrets' is deprecated since v5.0.15 and will be removed in next minor release (i.e. v5.1.0). Please use '.tenant.configSecret' instead." }} +{{- end }} +{{- if and (.Values.secrets) (.Values.tenant.configSecret) }} +{{- fail "ERROR: '.secrets' and '.tenant.configSecret' are mutually exclusive. Please use 'tenant.configSecret' instead." }} +{{- end }} +{{- if and (.Values.secrets) (not (.Values.secrets).existingSecret) }} apiVersion: v1 kind: Secret metadata: @@ -9,3 +15,14 @@ stringData: export MINIO_ROOT_USER={{ .Values.secrets.accessKey | quote }} export MINIO_ROOT_PASSWORD={{ .Values.secrets.secretKey | quote }} {{- end }} +{{- if and (.Values.tenant.configSecret) (not (.Values.tenant.configSecret).existingSecret) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ dig "tenant" "configSecret" "name" "" (.Values | merge (dict)) }} +type: Opaque +stringData: + config.env: |- + export MINIO_ROOT_USER={{ .Values.tenant.configSecret.accessKey | quote }} + export MINIO_ROOT_PASSWORD={{ .Values.tenant.configSecret.secretKey | quote }} +{{- end }} \ No newline at end of file diff --git a/helm/tenant/templates/tenant.yaml b/helm/tenant/templates/tenant.yaml index 9b6dcf4c742..a855b087c99 100644 --- a/helm/tenant/templates/tenant.yaml +++ b/helm/tenant/templates/tenant.yaml @@ -39,6 +39,9 @@ spec: volumeClaimTemplate: metadata: name: data + {{- with (dig "storageAnnotations" (dict) .) }} + annotations: {{- toYaml . | nindent 12 }} + {{- end }} spec: storageClassName: {{ dig "storageClassName" "" . }} accessModes: @@ -64,11 +67,17 @@ spec: {{- with (dig "resources" (dict) .) }} resources: {{- toYaml . | nindent 8 }} {{- end }} + {{- if hasKey . "securityContext" }} + securityContext: {{- if eq (len .securityContext) 0 }} {} {{- end }} {{- with (dig "securityContext" (dict) .) }} - securityContext: {{- toYaml . | nindent 8 }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- end }} + {{- if hasKey . "containerSecurityContext" }} + containerSecurityContext: {{- if eq (len .containerSecurityContext) 0 }} {} {{- end }} {{- with (dig "containerSecurityContext" (dict) .) }} - containerSecurityContext: {{- toYaml . | nindent 8 }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- end }} {{- with (dig "topologySpreadConstraints" (list) .) }} topologySpreadConstraints: {{- toYaml . | nindent 8 }} @@ -175,10 +184,17 @@ spec: labels: {{- toYaml . | nindent 4 }} {{- end }} serviceAccountName: {{ .kes.serviceAccountName | quote }} - securityContext: - runAsUser: {{ .kes.securityContext.runAsUser | int }} - runAsGroup: {{ .kes.securityContext.runAsGroup | int }} - runAsNonRoot: {{ .kes.securityContext.runAsNonRoot }} - fsGroup: {{ .kes.securityContext.fsGroup | int }} + {{- if hasKey .kes "securityContext" }} + securityContext: {{- if eq (len .kes.securityContext) 0 }} {} {{- end }} + {{- with (dig "kes" "securityContext" (dict) .) }} + {{- toYaml . | nindent 6 }} + {{- end }} + {{- end }} + {{- if hasKey .kes "containerSecurityContext" }} + containerSecurityContext: {{- if eq (len .kes.containerSecurityContext) 0 }} { } {{- end }} + {{- with (dig "kes" "containerSecurityContext" (dict) .) }} + {{- toYaml . | nindent 6 }} + {{- end }} + {{- end }} {{- end }} {{- end }} diff --git a/helm/tenant/values.yaml b/helm/tenant/values.yaml index 1d3fb321e08..90cf5483659 100644 --- a/helm/tenant/values.yaml +++ b/helm/tenant/values.yaml @@ -1,4 +1,6 @@ ### +# WARNING: '.secrets' is deprecated since v5.0.15 and will be removed in next minor release (i.e. v5.1.0). +# WARNING: Please use '.tenant.configSecret' instead. # Root key for dynamically creating a secret for use with configuring root MinIO User # Specify the ``name`` and then a list of environment variables. # @@ -19,21 +21,22 @@ secrets: name: myminio-env-configuration accessKey: minio secretKey: minio123 -### -# The name of an existing Kubernetes secret to import to the MinIO Tenant -# The secret must contain a key ``config.env``. -# The values should be a series of export statements to set environment variables for the Tenant. -# For example: -# -# .. code-block:: shell -# -# stringData: -# config.env: | - -# export MINIO_ROOT_USER=ROOTUSERNAME -# export MINIO_ROOT_PASSWORD=ROOTUSERPASSWORD -# -existingSecret: - name: myminio-env-configuration + ### + # If this variable is set, then enable the usage of an existing Kubernetes secret to set environment variables for the Tenant. + # The existing Kubernetes secret name must be placed under .tenant.configuration.name e.g. existing-minio-env-configuration + # The secret must contain a key ``config.env``. + # The values should be a series of export statements to set environment variables for the Tenant. + # For example: + # + # .. code-block:: shell + # + # stringData: + # config.env: |- + # export MINIO_ROOT_USER=ROOTUSERNAME + # export MINIO_ROOT_PASSWORD=ROOTUSERPASSWORD + # + #existingSecret: + # name: enabled ### # Root key for MinIO Tenant Chart tenant: @@ -45,14 +48,14 @@ tenant: ### # Specify the Operator container image to use for the deployment. # ``image.tag`` - # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.10 tag. + # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.14 tag. # The container pulls the image if not already present: # # .. code-block:: yaml # # image: # repository: quay.io/minio/minio - # tag: RELEASE.2023-10-07T15-07-38Z + # tag: RELEASE.2024-03-15T01-07-19Z # pullPolicy: IfNotPresent # # The chart also supports specifying an image based on digest value: @@ -67,7 +70,7 @@ tenant: # image: repository: quay.io/minio/minio - tag: RELEASE.2023-10-07T15-07-38Z + tag: RELEASE.2024-03-15T01-07-19Z pullPolicy: IfNotPresent ### # @@ -85,6 +88,42 @@ tenant: configuration: name: myminio-env-configuration ### + # Root key for dynamically creating a secret for use with configuring root MinIO User + # Specify the ``name`` and then a list of environment variables. + # + # .. important:: + # + # Do not use this in production environments. + # This field is intended for use with rapid development or testing only. + # + # For example: + # + # .. code-block:: yaml + # + # name: myminio-env-configuration + # accessKey: minio + # secretKey: minio123 + # + # configSecret: + # name: myminio-env-configuration + # accessKey: minio + # secretKey: minio123 + ### + # If this variable is set to true, then enable the usage of an existing Kubernetes secret to set environment variables for the Tenant. + # The existing Kubernetes secret name must be placed under .tenant.configuration.name e.g. existing-minio-env-configuration + # The secret must contain a key ``config.env``. + # The values should be a series of export statements to set environment variables for the Tenant. + # For example: + # + # .. code-block:: shell + # + # stringData: + # config.env: |- + # export MINIO_ROOT_USER=ROOTUSERNAME + # export MINIO_ROOT_PASSWORD=ROOTUSERPASSWORD + # + # existingSecret: false + ### # Top level key for configuring MinIO Pool(s) in this Tenant. # # See `Operator CRD: Pools `__ for more information on all subfields. @@ -109,7 +148,10 @@ tenant: # If using Amazon Elastic Block Store (EBS) CSI driver # Please make sure to set xfs for "csi.storage.k8s.io/fstype" parameter under StorageClass.parameters. # Docs: https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/parameters.md - storageClassName: standard + # storageClassName: standard + ### + # Specify `storageAnnotations `__ to associate to PVCs. + storageAnnotations: { } ### # Specify `annotations `__ to associate to Tenant pods. annotations: { } @@ -161,6 +203,12 @@ tenant: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault ### # # An array of `Topology Spread Constraints `__ to associate to Operator Console pods. @@ -335,20 +383,19 @@ tenant: # # Image from tag (original behavior), for example: # # image: # # repository: quay.io/minio/kes - # # tag: 2023-10-03T00-48-37Z + # # tag: 2024-03-13T17-52-13Z # # Image from digest (added after original behavior), for example: # # image: # # repository: quay.io/minio/kes@sha256 # # digest: fb15af611149892f357a8a99d1bcd8bf5dae713bd64c15e6eb27fbdb88fc208b # image: # repository: quay.io/minio/kes - # tag: 2023-10-03T00-48-37Z + # tag: 2024-03-13T17-52-13Z # pullPolicy: IfNotPresent # env: [ ] # replicas: 2 # configuration: |- # address: :7373 - # root: _ # Effectively disabled since no root identity necessary. # tls: # key: /tmp/kes/server.key # Path to the TLS private key # cert: /tmp/kes/server.crt # Path to the TLS certificate @@ -356,14 +403,8 @@ tenant: # identities: [] # header: # cert: X-Tls-Client-Cert - # policy: - # my-policy: - # paths: - # - /v1/key/create/* - # - /v1/key/generate/* - # - /v1/key/decrypt/* - # identities: - # - ${MINIO_KES_IDENTITY} + # admin: + # identity: ${MINIO_KES_IDENTITY} # cache: # expiry: # any: 5m0s @@ -371,7 +412,7 @@ tenant: # log: # error: on # audit: off - # keys: + # keystore: # # KES configured with fs (File System mode) doesn't work in Kubernetes environments and is not recommended # # use a real KMS # # fs: @@ -422,6 +463,17 @@ tenant: # runAsGroup: 1000 # runAsNonRoot: true # fsGroup: 1000 + # containerSecurityContext: + # runAsUser: 1000 + # runAsGroup: 1000 + # runAsNonRoot: true + # allowPrivilegeEscalation: false + # capabilities: + # drop: + # - ALL + # seccompProfile: + # type: RuntimeDefault + ### # Configures `Ingress `__ for the Tenant S3 API and Console. # @@ -453,7 +505,7 @@ ingress: # kind: Secret # type: Opaque # metadata: -# name: {{ dig "secrets" "existingSecret" "" (.Values | merge (dict)) }} +# name: {{ dig "tenant" "configSecret" "name" "" (.Values | merge (dict)) }} # stringData: # config.env: |- # export MINIO_ROOT_USER='minio' diff --git a/index.yaml b/index.yaml index d5ec9206772..b8a096d1263 100644 --- a/index.yaml +++ b/index.yaml @@ -3,7 +3,7 @@ entries: minio-operator: - apiVersion: v2 appVersion: v4.3.7 - created: "2023-10-12T10:54:31.715596-07:00" + created: "2024-03-15T12:18:57.51602-07:00" description: A Helm chart for MinIO Operator digest: 594f746a54d6ced86b0147135afed425c453e015a15228b634bd79add0d24982 home: https://min.io @@ -24,7 +24,7 @@ entries: version: 4.3.7 - apiVersion: v2 appVersion: v4.3.6 - created: "2023-10-12T10:54:31.71343-07:00" + created: "2024-03-15T12:18:57.514445-07:00" description: A Helm chart for MinIO Operator digest: 15bb40e086f5e562b7c588dac48a5399fadc1b9f6895f913bbd5a2993c683da7 home: https://min.io @@ -45,7 +45,7 @@ entries: version: 4.3.6 - apiVersion: v2 appVersion: v4.3.5 - created: "2023-10-12T10:54:31.712375-07:00" + created: "2024-03-15T12:18:57.51321-07:00" description: A Helm chart for MinIO Operator digest: d561a1a3f0d900b721a73a7f17bc1ceda06b00328a5d31786bd8a8a92a20b08b home: https://min.io @@ -66,7 +66,7 @@ entries: version: 4.3.5 - apiVersion: v2 appVersion: v4.3.4 - created: "2023-10-12T10:54:31.711005-07:00" + created: "2024-03-15T12:18:57.511952-07:00" description: A Helm chart for MinIO Operator digest: 8cbfa6aa2264a5ab03e81e65391f22970c38f26b68c6292b8e77f1936bf7f0c0 home: https://min.io @@ -87,7 +87,7 @@ entries: version: 4.3.4 - apiVersion: v2 appVersion: v4.3.3 - created: "2023-10-12T10:54:31.709722-07:00" + created: "2024-03-15T12:18:57.510672-07:00" description: A Helm chart for MinIO Operator digest: 399e916491f7b3297afb6a85baf4f305547f46e7df2674b542cb1a8873abef62 home: https://min.io @@ -108,7 +108,7 @@ entries: version: 4.3.3 - apiVersion: v2 appVersion: v4.3.2 - created: "2023-10-12T10:54:31.707036-07:00" + created: "2024-03-15T12:18:57.508812-07:00" description: A Helm chart for MinIO Operator digest: b446473b9814288f4f356afa12053b2bce0cbdf014be74ab21b31b36cb0ac15a home: https://min.io @@ -129,7 +129,7 @@ entries: version: 4.3.2 - apiVersion: v2 appVersion: v4.3.1 - created: "2023-10-12T10:54:31.705938-07:00" + created: "2024-03-15T12:18:57.507588-07:00" description: A Helm chart for MinIO Operator digest: 4a325c6a47173e66b986db47b5d8235fd3c5eff788e252b5ca40b3ce27f4cc87 home: https://min.io @@ -150,7 +150,7 @@ entries: version: 4.3.1 - apiVersion: v2 appVersion: v4.3.0 - created: "2023-10-12T10:54:31.704902-07:00" + created: "2024-03-15T12:18:57.506258-07:00" description: A Helm chart for MinIO Operator digest: 52ca8a53360481b54e67912da6a757e060b50b85cece003101e90c16f426f972 home: https://min.io @@ -171,7 +171,7 @@ entries: version: 4.3.0 - apiVersion: v2 appVersion: v4.2.14 - created: "2023-10-12T10:54:31.694812-07:00" + created: "2024-03-15T12:18:57.495685-07:00" description: A Helm chart for MinIO Operator digest: 72527bd5088ec619ca1da54f2e296bd76ffab8a9473ec619ca2c05c6e0679e87 home: https://min.io @@ -192,7 +192,7 @@ entries: version: 4.2.14 - apiVersion: v2 appVersion: v4.2.12 - created: "2023-10-12T10:54:31.693907-07:00" + created: "2024-03-15T12:18:57.494116-07:00" description: A Helm chart for MinIO Operator digest: a1233b80a3658502d6871e12b7c0a2897d12cf8df859c9c531efc32e62d48c9d home: https://min.io @@ -213,7 +213,7 @@ entries: version: 4.2.12 - apiVersion: v2 appVersion: v4.2.10 - created: "2023-10-12T10:54:31.692833-07:00" + created: "2024-03-15T12:18:57.492931-07:00" description: A Helm chart for MinIO Operator digest: cba1a0b6fdb56c5fd084f81721285b8c2d9710d8a616bad7d421d2f5c8f6cac0 home: https://min.io @@ -234,7 +234,7 @@ entries: version: 4.2.10 - apiVersion: v2 appVersion: v4.2.9 - created: "2023-10-12T10:54:31.703158-07:00" + created: "2024-03-15T12:18:57.504429-07:00" description: A Helm chart for MinIO Operator digest: e4d7a289e4933aec88457243c8a1cc9bb191148421cdc2804a954cf4158f90fb home: https://min.io @@ -255,7 +255,7 @@ entries: version: 4.2.9 - apiVersion: v2 appVersion: v4.2.8 - created: "2023-10-12T10:54:31.702204-07:00" + created: "2024-03-15T12:18:57.503288-07:00" description: A Helm chart for MinIO Operator digest: 35c4888f3b2bf75b79c1e7f12d4b0dd35138045c7b62c3824a307ce4814f5d4a home: https://min.io @@ -276,7 +276,7 @@ entries: version: 4.2.8 - apiVersion: v2 appVersion: v4.2.7 - created: "2023-10-12T10:54:31.701276-07:00" + created: "2024-03-15T12:18:57.502102-07:00" description: A Helm chart for MinIO Operator digest: 99a024d5ae4339752a823ae80b9d1d0fdd5994e16f1ec6acce4f7ad4945c0eb9 home: https://min.io @@ -297,7 +297,7 @@ entries: version: 4.2.7 - apiVersion: v2 appVersion: v4.2.6 - created: "2023-10-12T10:54:31.700378-07:00" + created: "2024-03-15T12:18:57.500878-07:00" description: A Helm chart for MinIO Operator digest: 9137a28ad10f199777f104f89a1c10af763d9087fbc733ba4d295a118d112f2d home: https://min.io @@ -318,7 +318,7 @@ entries: version: 4.2.6 - apiVersion: v2 appVersion: v4.2.5 - created: "2023-10-12T10:54:31.69884-07:00" + created: "2024-03-15T12:18:57.499266-07:00" description: A Helm chart for MinIO Operator digest: 02b29aeae4586edcada3864514a788c2862b8bad3922e80cde2e557f8901c259 home: https://min.io @@ -339,7 +339,7 @@ entries: version: 4.2.5 - apiVersion: v2 appVersion: v4.2.4 - created: "2023-10-12T10:54:31.69776-07:00" + created: "2024-03-15T12:18:57.498158-07:00" description: A Helm chart for MinIO Operator digest: 99620af40a461197d7fd43c937266fe1ed742c3dd10123e420371cc5592d26d2 home: https://min.io @@ -360,7 +360,7 @@ entries: version: 4.2.4 - apiVersion: v2 appVersion: v4.2.3 - created: "2023-10-12T10:54:31.695815-07:00" + created: "2024-03-15T12:18:57.496996-07:00" description: A Helm chart for MinIO Operator digest: d4a8e536a7b01b83c87cff872881b11c72d7d9d0aa05201420b69c0a4ee169dc home: https://min.io @@ -381,7 +381,7 @@ entries: version: 4.2.3 - apiVersion: v2 appVersion: v4.2.3 - created: "2023-10-12T10:54:31.69055-07:00" + created: "2024-03-15T12:18:57.491675-07:00" description: A Helm chart for MinIO Operator digest: 1e3683587801162d989217c019d3e5bf8ecc03116431643fa4876889973549fd home: https://min.io @@ -402,7 +402,7 @@ entries: version: 4.1.8 - apiVersion: v2 appVersion: v4.1.3 - created: "2023-10-12T10:54:31.68962-07:00" + created: "2024-03-15T12:18:57.49051-07:00" description: A Helm chart for MinIO Operator digest: 0cf6f5c3724facc74cfeb32c17a798099f72baff9869ae6d6fb5422557fe40b7 home: https://min.io @@ -423,7 +423,7 @@ entries: version: 4.1.7 - apiVersion: v2 appVersion: v4.1.2 - created: "2023-10-12T10:54:31.688114-07:00" + created: "2024-03-15T12:18:57.488745-07:00" description: A Helm chart for MinIO Operator digest: 979717ddc254f24fe4561a4642162de3d4e847cf7f2b26b1592ca0e8d0bdb6e2 home: https://min.io @@ -444,7 +444,7 @@ entries: version: 4.1.6 - apiVersion: v2 appVersion: v4.1.2 - created: "2023-10-12T10:54:31.687125-07:00" + created: "2024-03-15T12:18:57.487629-07:00" description: A Helm chart for MinIO Operator digest: 3dff7502f24ce641048c849ab1da226854fb8afa34d05b40d7c46dd2725e2cfe home: https://min.io @@ -465,7 +465,7 @@ entries: version: 4.1.5 - apiVersion: v2 appVersion: v4.1.1 - created: "2023-10-12T10:54:31.686264-07:00" + created: "2024-03-15T12:18:57.486539-07:00" description: A Helm chart for MinIO Operator digest: 7082e25eff205c2596e4902361ca370f1e12b7e28e881b88b672d4bb0c02b075 home: https://min.io @@ -486,7 +486,7 @@ entries: version: 4.1.4 - apiVersion: v2 appVersion: v4.1.1 - created: "2023-10-12T10:54:31.684844-07:00" + created: "2024-03-15T12:18:57.485398-07:00" description: A Helm chart for MinIO Operator digest: d9cbb94e31fcc726ebb3281a06d85ea3ee941bf36237972b6ae38e4d4c2f205b home: https://min.io @@ -507,7 +507,7 @@ entries: version: 4.1.3 - apiVersion: v2 appVersion: v4.1.1 - created: "2023-10-12T10:54:31.684043-07:00" + created: "2024-03-15T12:18:57.483772-07:00" description: A Helm chart for MinIO Operator digest: 6bf8dd70e500ea0970a477cc12c6a40fc062102055c911b96eef6dc748500b03 home: https://min.io @@ -528,7 +528,7 @@ entries: version: 4.1.2 - apiVersion: v2 appVersion: v4.1.1 - created: "2023-10-12T10:54:31.68317-07:00" + created: "2024-03-15T12:18:57.482709-07:00" description: A Helm chart for MinIO Operator digest: 8fa3dcd6c40ee405127f1836526b78d473b1f02e690213072fde78712d63c655 home: https://min.io @@ -549,7 +549,7 @@ entries: version: 4.1.1 - apiVersion: v2 appVersion: v4.1.1 - created: "2023-10-12T10:54:31.682037-07:00" + created: "2024-03-15T12:18:57.481657-07:00" description: A Helm chart for MinIO Operator digest: 5926ba1a622fc2887f3fb24c43f567bb308ef652941e592f58371224759b3e24 home: https://min.io @@ -570,7 +570,7 @@ entries: version: 4.1.0 - apiVersion: v2 appVersion: v4.0.11 - created: "2023-10-12T10:54:31.672166-07:00" + created: "2024-03-15T12:18:57.469765-07:00" description: A Helm chart for MinIO Operator digest: cbae4fb31f83e426a7ea0decdfd57f6eb64a43e5b6e2726ab899d1d72c9f54e0 home: https://min.io @@ -591,7 +591,7 @@ entries: version: 4.0.11 - apiVersion: v2 appVersion: v4.0.9 - created: "2023-10-12T10:54:31.671197-07:00" + created: "2024-03-15T12:18:57.468515-07:00" description: A Helm chart for MinIO Operator digest: b74d8011ce86b534c7ebae8d84e7eb0552c701b511e32f0cebdab56551e30638 home: https://min.io @@ -611,7 +611,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.10.tgz version: 4.0.10 - apiVersion: v2 - created: "2023-10-12T10:54:31.681199-07:00" + created: "2024-03-15T12:18:57.480534-07:00" description: A Helm chart for MinIO Operator digest: 40bd65d9a8144a5bda8f1e7a74720f526bbaf540e812e7eabc2ccad3ca7b439c home: https://min.io @@ -631,7 +631,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.9.tgz version: 4.0.9 - apiVersion: v2 - created: "2023-10-12T10:54:31.679551-07:00" + created: "2024-03-15T12:18:57.478676-07:00" description: A Helm chart for MinIO Operator digest: a7dd16236a42c6b6731542e9c19744da76a50ac3a7524cb2ce64e95e8e3e5d30 home: https://min.io @@ -651,7 +651,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.8.tgz version: 4.0.8 - apiVersion: v2 - created: "2023-10-12T10:54:31.678581-07:00" + created: "2024-03-15T12:18:57.477603-07:00" description: A Helm chart for MinIO Operator digest: 87f6ac2a98a96dd6ce20fded82f45e4eed79c0933ebed069d6f2167079597c27 home: https://min.io @@ -671,7 +671,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.7.tgz version: 4.0.7 - apiVersion: v2 - created: "2023-10-12T10:54:31.677818-07:00" + created: "2024-03-15T12:18:57.476462-07:00" description: A Helm chart for MinIO Operator digest: 2c7dbe86e2950f48d7b44e702969b67c8b1b5308f18e8e16cdc52e4ec7b6cdbd home: https://min.io @@ -691,7 +691,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.7-1.tgz version: 4.0.7-1 - apiVersion: v2 - created: "2023-10-12T10:54:31.67687-07:00" + created: "2024-03-15T12:18:57.474535-07:00" description: A Helm chart for MinIO Operator digest: b25a95e0312b16fab2097db2f45cec540d39d416ce05adcb142dba2f8f300ace home: https://min.io @@ -711,7 +711,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.6.tgz version: 4.0.6 - apiVersion: v2 - created: "2023-10-12T10:54:31.675771-07:00" + created: "2024-03-15T12:18:57.473394-07:00" description: A Helm chart for MinIO Operator digest: 4407196cc9a3e6cea8ddb719e8308985cb49789a3e77c023f0bc680c31f11de3 home: https://min.io @@ -731,7 +731,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.5.tgz version: 4.0.5 - apiVersion: v2 - created: "2023-10-12T10:54:31.674945-07:00" + created: "2024-03-15T12:18:57.472216-07:00" description: A Helm chart for MinIO Operator digest: ce4a4d68e66cec8af18c28eee339dd2adf3bb4a7beba851eaa3b8b7783e26cd1 home: https://min.io @@ -751,7 +751,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.3.tgz version: 4.0.3 - apiVersion: v2 - created: "2023-10-12T10:54:31.673826-07:00" + created: "2024-03-15T12:18:57.471109-07:00" description: A Helm chart for MinIO Operator digest: b488b7faac263a1d7c70374b20435b6ec3a0288f28a845647f0d5c57bc349c43 home: https://min.io @@ -771,7 +771,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.2.tgz version: 4.0.2 - apiVersion: v2 - created: "2023-10-12T10:54:31.670291-07:00" + created: "2024-03-15T12:18:57.46735-07:00" description: A Helm chart for MinIO Operator digest: f69b67cd3dcc8d819994fc4473d07be1e8fd11e8428914195a7f59f17321ea46 home: https://min.io @@ -791,7 +791,7 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.1.tgz version: 4.0.1 - apiVersion: v2 - created: "2023-10-12T10:54:31.669323-07:00" + created: "2024-03-15T12:18:57.465661-07:00" description: A Helm chart for MinIO Operator digest: 8bc6f068743480ed1cecae0ec896ac6f46ffec5e7ed6e4efbb241bc3b47c7f21 home: https://min.io @@ -811,9 +811,93 @@ entries: - https://operator.min.io/helm-releases/minio-operator-4.0.0.tgz version: 4.0.0 operator: + - apiVersion: v2 + appVersion: v5.0.14 + created: "2024-03-15T12:18:57.571867-07:00" + description: A Helm chart for MinIO Operator + digest: f254c6cb6ab5fcb0089689b6b51979eec306220275c614ab1e50bb83103f5c1c + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: operator + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/operator-5.0.14.tgz + version: 5.0.14 + - apiVersion: v2 + appVersion: v5.0.13 + created: "2024-03-15T12:18:57.570698-07:00" + description: A Helm chart for MinIO Operator + digest: 8f4d25a00becce25a1bf3f35a4729072a9f560629e0ab9d1c16d74de0f4d379d + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: operator + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/operator-5.0.13.tgz + version: 5.0.13 + - apiVersion: v2 + appVersion: v5.0.12 + created: "2024-03-15T12:18:57.569539-07:00" + description: A Helm chart for MinIO Operator + digest: 010e2054bcb864e32763f0be0350f498f44b51bba8f313e1893abd9a8ef5d325 + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: operator + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/operator-5.0.12.tgz + version: 5.0.12 + - apiVersion: v2 + appVersion: v5.0.11 + created: "2024-03-15T12:18:57.568351-07:00" + description: A Helm chart for MinIO Operator + digest: 0198f0939b54a44face01b3f54fc8f12ff176e8a371114608856a1d0e53fe01a + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: operator + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/operator-5.0.11.tgz + version: 5.0.11 - apiVersion: v2 appVersion: v5.0.10 - created: "2023-10-12T10:54:31.760286-07:00" + created: "2024-03-15T12:18:57.566703-07:00" description: A Helm chart for MinIO Operator digest: 5a989ef3e1c1a7d43350012bd7ddb305232b3bd804788a8874cc2742eae80a80 home: https://min.io @@ -834,7 +918,7 @@ entries: version: 5.0.10 - apiVersion: v2 appVersion: v5.0.9 - created: "2023-10-12T10:54:31.767376-07:00" + created: "2024-03-15T12:18:57.579914-07:00" description: A Helm chart for MinIO Operator digest: 515fb406a6b08f90b04fa1b844e7a0ad2aac77f73320d9c484f2e19fc0a32d73 home: https://min.io @@ -855,7 +939,7 @@ entries: version: 5.0.9 - apiVersion: v2 appVersion: v5.0.8 - created: "2023-10-12T10:54:31.766524-07:00" + created: "2024-03-15T12:18:57.578938-07:00" description: A Helm chart for MinIO Operator digest: 65b020e15979b03c7f013e307bbe0d4e6e14727019e17bdb2e2604af8056856d home: https://min.io @@ -876,7 +960,7 @@ entries: version: 5.0.8 - apiVersion: v2 appVersion: v5.0.7 - created: "2023-10-12T10:54:31.765602-07:00" + created: "2024-03-15T12:18:57.57755-07:00" description: A Helm chart for MinIO Operator digest: 5c72b03b17b5af84a98d92fb10496449ffe2e77c598a7159e44941f86318e49d home: https://min.io @@ -897,7 +981,7 @@ entries: version: 5.0.7 - apiVersion: v2 appVersion: v5.0.6 - created: "2023-10-12T10:54:31.764674-07:00" + created: "2024-03-15T12:18:57.576664-07:00" description: A Helm chart for MinIO Operator digest: 76d925894253644cdea9bdd04772e23e2c6bd08f695ee3d879ee9f4749a1b46a home: https://min.io @@ -918,7 +1002,7 @@ entries: version: 5.0.6 - apiVersion: v2 appVersion: v5.0.5 - created: "2023-10-12T10:54:31.763739-07:00" + created: "2024-03-15T12:18:57.575822-07:00" description: A Helm chart for MinIO Operator digest: 95be83e629b8012cfc5bcbbf9f74d2d681c50f27d64113e7a1345df65f5ea231 home: https://min.io @@ -939,7 +1023,7 @@ entries: version: 5.0.5 - apiVersion: v2 appVersion: v5.0.4 - created: "2023-10-12T10:54:31.762382-07:00" + created: "2024-03-15T12:18:57.575032-07:00" description: A Helm chart for MinIO Operator digest: b95039620fae7106aef2f0b3a038269f831dfc62aebb009de440bb2dbaa50029 home: https://min.io @@ -960,7 +1044,7 @@ entries: version: 5.0.4 - apiVersion: v2 appVersion: v5.0.3 - created: "2023-10-12T10:54:31.761732-07:00" + created: "2024-03-15T12:18:57.574225-07:00" description: A Helm chart for MinIO Operator digest: 6c7fc60878d0cf4c79889bd21d6a1bfde322c8f7987c294bc0eb0d95a18169b2 home: https://min.io @@ -981,7 +1065,7 @@ entries: version: 5.0.3 - apiVersion: v2 appVersion: v5.0.2 - created: "2023-10-12T10:54:31.761028-07:00" + created: "2024-03-15T12:18:57.572652-07:00" description: A Helm chart for MinIO Operator digest: aab64d84fc51473212af5dbd353c440debdf014d60b8af065da9a7478fe2e486 home: https://min.io @@ -1002,7 +1086,7 @@ entries: version: 5.0.2 - apiVersion: v2 appVersion: v5.0.1 - created: "2023-10-12T10:54:31.759636-07:00" + created: "2024-03-15T12:18:57.565591-07:00" description: A Helm chart for MinIO Operator digest: 2be349f743983af26bf0d5385b268f2e819dff9975d4476da0961f706a1795f7 home: https://min.io @@ -1023,7 +1107,7 @@ entries: version: 5.0.1 - apiVersion: v2 appVersion: v5.0.0 - created: "2023-10-12T10:54:31.7589-07:00" + created: "2024-03-15T12:18:57.564637-07:00" description: A Helm chart for MinIO Operator digest: b39696e784156aff4424d6c08381c1080487e06dfe6c9269dd8244560b70c5b1 home: https://min.io @@ -1044,7 +1128,7 @@ entries: version: 5.0.0 - apiVersion: v2 appVersion: v4.5.8 - created: "2023-10-12T10:54:31.75776-07:00" + created: "2024-03-15T12:18:57.563837-07:00" description: A Helm chart for MinIO Operator digest: a0ddfc8a48a00cba431617a61bc8e1d2a3d7cb461cf7232b92f9bbb9f068324a home: https://min.io @@ -1065,7 +1149,7 @@ entries: version: 4.5.8 - apiVersion: v2 appVersion: v4.5.7 - created: "2023-10-12T10:54:31.756774-07:00" + created: "2024-03-15T12:18:57.562629-07:00" description: A Helm chart for MinIO Operator digest: 41513d7b1e15d40256641baea0641293fc8f0e05a2bbe565b4c13377e618b8e0 home: https://min.io @@ -1086,7 +1170,7 @@ entries: version: 4.5.7 - apiVersion: v2 appVersion: v4.5.6 - created: "2023-10-12T10:54:31.755766-07:00" + created: "2024-03-15T12:18:57.560732-07:00" description: A Helm chart for MinIO Operator digest: b87e72fbb0d846239983be9654822fdb89519d5cfe17506f983743b6e4f89aa1 home: https://min.io @@ -1107,7 +1191,7 @@ entries: version: 4.5.6 - apiVersion: v2 appVersion: v4.5.5 - created: "2023-10-12T10:54:31.754543-07:00" + created: "2024-03-15T12:18:57.559587-07:00" description: A Helm chart for MinIO Operator digest: f1adecf0d94f5181917205f1aaeff3cc86c9037fd3f2dddb0cbeeb0ca4af4068 home: https://min.io @@ -1128,7 +1212,7 @@ entries: version: 4.5.5 - apiVersion: v2 appVersion: v4.5.4 - created: "2023-10-12T10:54:31.753736-07:00" + created: "2024-03-15T12:18:57.558479-07:00" description: A Helm chart for MinIO Operator digest: 7671c2e3d5242fe9f09c28119818ffac43e36b40a3117c839dd7cffb81645312 home: https://min.io @@ -1149,7 +1233,7 @@ entries: version: 4.5.4 - apiVersion: v2 appVersion: v4.5.3 - created: "2023-10-12T10:54:31.752879-07:00" + created: "2024-03-15T12:18:57.557363-07:00" description: A Helm chart for MinIO Operator digest: b684dc8b61518cc4b4a94c4821fda84a6d5d62dec80dcda8ddfa87362a0e11cd home: https://min.io @@ -1170,7 +1254,7 @@ entries: version: 4.5.3 - apiVersion: v2 appVersion: v4.5.2 - created: "2023-10-12T10:54:31.751638-07:00" + created: "2024-03-15T12:18:57.555752-07:00" description: A Helm chart for MinIO Operator digest: a51dad184718cf01521d7c75d18bee75aa3f6d097d6ccab89db6a6d4c4d89223 home: https://min.io @@ -1191,7 +1275,7 @@ entries: version: 4.5.2 - apiVersion: v2 appVersion: v4.5.1 - created: "2023-10-12T10:54:31.750781-07:00" + created: "2024-03-15T12:18:57.554654-07:00" description: A Helm chart for MinIO Operator digest: d1be481f3701bc53041e0b6f23e0b9a94f6af0f2cc3da9034d609c608958f892 home: https://min.io @@ -1212,7 +1296,7 @@ entries: version: 4.5.1 - apiVersion: v2 appVersion: v4.5.0 - created: "2023-10-12T10:54:31.749935-07:00" + created: "2024-03-15T12:18:57.553584-07:00" description: A Helm chart for MinIO Operator digest: cee44179e562c94b494747af1dddf6b20d4ccdfa951207e53add75c7402c3925 home: https://min.io @@ -1233,7 +1317,7 @@ entries: version: 4.5.0 - apiVersion: v2 appVersion: v4.4.28 - created: "2023-10-12T10:54:31.74166-07:00" + created: "2024-03-15T12:18:57.544041-07:00" description: A Helm chart for MinIO Operator digest: a018da827765df710c7b78c2c6dc3a8c68ea80f9806ab595b65a11d3acb88aec home: https://min.io @@ -1254,7 +1338,7 @@ entries: version: 4.4.28 - apiVersion: v2 appVersion: v4.4.27 - created: "2023-10-12T10:54:31.74065-07:00" + created: "2024-03-15T12:18:57.542332-07:00" description: A Helm chart for MinIO Operator digest: ebd3e2df74ac714d9238bb5f6c76ccaecfbf022b1381f4c3ebf6a6183ca80bf8 home: https://min.io @@ -1275,7 +1359,7 @@ entries: version: 4.4.27 - apiVersion: v2 appVersion: v4.4.26 - created: "2023-10-12T10:54:31.739335-07:00" + created: "2024-03-15T12:18:57.541302-07:00" description: A Helm chart for MinIO Operator digest: d29e08108f60bb26c4ba198144128bfd72b811d9c2a38440b45089b99ddf8ab4 home: https://min.io @@ -1296,7 +1380,7 @@ entries: version: 4.4.26 - apiVersion: v2 appVersion: v4.4.25 - created: "2023-10-12T10:54:31.738596-07:00" + created: "2024-03-15T12:18:57.540214-07:00" description: A Helm chart for MinIO Operator digest: fab2f0395ae74430b22dc4293ec6846cd77e5193e6265defcdce41ed43ecffd6 home: https://min.io @@ -1317,7 +1401,7 @@ entries: version: 4.4.25 - apiVersion: v2 appVersion: v4.4.24 - created: "2023-10-12T10:54:31.737845-07:00" + created: "2024-03-15T12:18:57.538878-07:00" description: A Helm chart for MinIO Operator digest: eaa1e7814cc57a7522bf37d1aad8d2558647482cc17e6eccd187ad129732bb0f home: https://min.io @@ -1338,7 +1422,7 @@ entries: version: 4.4.24 - apiVersion: v2 appVersion: v4.4.23 - created: "2023-10-12T10:54:31.737069-07:00" + created: "2024-03-15T12:18:57.536997-07:00" description: A Helm chart for MinIO Operator digest: d68d464d63d76d7547fd484425cff0a147d9813e081811c095850742a97c0c79 home: https://min.io @@ -1359,7 +1443,7 @@ entries: version: 4.4.23 - apiVersion: v2 appVersion: v4.4.22 - created: "2023-10-12T10:54:31.735827-07:00" + created: "2024-03-15T12:18:57.535993-07:00" description: A Helm chart for MinIO Operator digest: 7aea39787ee933f3886544a4c0aadafe10e6faeed8b4faa4cc67e9f59bd8527a home: https://min.io @@ -1380,7 +1464,7 @@ entries: version: 4.4.22 - apiVersion: v2 appVersion: v4.4.21 - created: "2023-10-12T10:54:31.734978-07:00" + created: "2024-03-15T12:18:57.534967-07:00" description: A Helm chart for MinIO Operator digest: c13aadc25a6c8140df82b6778a38b5b4cff8b09c4f3227b3479419f3abd0f6f0 home: https://min.io @@ -1401,7 +1485,7 @@ entries: version: 4.4.21 - apiVersion: v2 appVersion: v4.4.20 - created: "2023-10-12T10:54:31.734204-07:00" + created: "2024-03-15T12:18:57.533925-07:00" description: A Helm chart for MinIO Operator digest: 3dece764e01c5b64802a8f9d85f2bff526429f8ceb425b3e831bfbcafb474e32 home: https://min.io @@ -1422,7 +1506,7 @@ entries: version: 4.4.20 - apiVersion: v2 appVersion: v4.4.19 - created: "2023-10-12T10:54:31.731816-07:00" + created: "2024-03-15T12:18:57.531481-07:00" description: A Helm chart for MinIO Operator digest: 2279d2f725552281a7237e0f5a784298ab07b5dee5e7d6a4b3e4248ff0cffed6 home: https://min.io @@ -1443,7 +1527,7 @@ entries: version: 4.4.19 - apiVersion: v2 appVersion: v4.4.18 - created: "2023-10-12T10:54:31.73109-07:00" + created: "2024-03-15T12:18:57.530399-07:00" description: A Helm chart for MinIO Operator digest: 76ac4effba9eec872147a5df9a3d98fc5f4c436a228d90fd4da0ccc70e79f48e home: https://min.io @@ -1464,7 +1548,7 @@ entries: version: 4.4.18 - apiVersion: v2 appVersion: v4.4.17 - created: "2023-10-12T10:54:31.730342-07:00" + created: "2024-03-15T12:18:57.529314-07:00" description: A Helm chart for MinIO Operator digest: f6130cdd591debd916b148c627eddb0324c07f83c2e7625afa0fb03bdf60007a home: https://min.io @@ -1485,7 +1569,7 @@ entries: version: 4.4.17 - apiVersion: v2 appVersion: v4.4.16 - created: "2023-10-12T10:54:31.729137-07:00" + created: "2024-03-15T12:18:57.527878-07:00" description: A Helm chart for MinIO Operator digest: 4c030fbfd273d005ce968136cddd39a75714dfe1c364dc30d84a15af70793604 home: https://min.io @@ -1506,7 +1590,7 @@ entries: version: 4.4.16 - apiVersion: v2 appVersion: v4.4.15 - created: "2023-10-12T10:54:31.728354-07:00" + created: "2024-03-15T12:18:57.526875-07:00" description: A Helm chart for MinIO Operator digest: c1df137527f28d8aaa3e9456bbfdca2fceddeb16d3ebfe986b9a9cf016050c70 home: https://min.io @@ -1527,7 +1611,7 @@ entries: version: 4.4.15 - apiVersion: v2 appVersion: v4.4.14 - created: "2023-10-12T10:54:31.727584-07:00" + created: "2024-03-15T12:18:57.525888-07:00" description: A Helm chart for MinIO Operator digest: 2cb8d2c9b9dcbf7b34f7f94d505d1d40382523c5081c90ff4efaa63c153982f2 home: https://min.io @@ -1548,7 +1632,7 @@ entries: version: 4.4.14 - apiVersion: v2 appVersion: v4.4.13 - created: "2023-10-12T10:54:31.726748-07:00" + created: "2024-03-15T12:18:57.524894-07:00" description: A Helm chart for MinIO Operator digest: 31611b5cae6996da61ea7dfbdb67d7e2c2fae3f0caba6bb7332930f381913a14 home: https://min.io @@ -1569,7 +1653,7 @@ entries: version: 4.4.13 - apiVersion: v2 appVersion: v4.4.10 - created: "2023-10-12T10:54:31.724401-07:00" + created: "2024-03-15T12:18:57.523484-07:00" description: A Helm chart for MinIO Operator digest: dfe68285d8582172a8752fd1d98de21ef2c73f102965204fe08560e17eb1b623 home: https://min.io @@ -1590,7 +1674,7 @@ entries: version: 4.4.10 - apiVersion: v2 appVersion: v4.4.9 - created: "2023-10-12T10:54:31.748711-07:00" + created: "2024-03-15T12:18:57.551671-07:00" description: A Helm chart for MinIO Operator digest: 48871a9b6700410da44472cdee3c613d4ed664a146790162f0e645d195209fad home: https://min.io @@ -1611,7 +1695,7 @@ entries: version: 4.4.9 - apiVersion: v2 appVersion: v4.4.8 - created: "2023-10-12T10:54:31.74793-07:00" + created: "2024-03-15T12:18:57.550694-07:00" description: A Helm chart for MinIO Operator digest: 679d40cca06a8c5f2b08fdbd842f3f22fb33ebc459b7f0146d6c156b58514c20 home: https://min.io @@ -1632,7 +1716,7 @@ entries: version: 4.4.8 - apiVersion: v2 appVersion: v4.4.7 - created: "2023-10-12T10:54:31.747096-07:00" + created: "2024-03-15T12:18:57.549706-07:00" description: A Helm chart for MinIO Operator digest: 53896f8155cb13169b525cb8e2b18decfd52695db36fa353538cb7f2ffbe9df4 home: https://min.io @@ -1653,7 +1737,7 @@ entries: version: 4.4.7 - apiVersion: v2 appVersion: v4.4.6 - created: "2023-10-12T10:54:31.745759-07:00" + created: "2024-03-15T12:18:57.548695-07:00" description: A Helm chart for MinIO Operator digest: 13c03c440be7c5106316b3a331b876b390328261d3b1c1c97012d1a38d82386a home: https://min.io @@ -1674,7 +1758,7 @@ entries: version: 4.4.6 - apiVersion: v2 appVersion: v4.4.5 - created: "2023-10-12T10:54:31.744995-07:00" + created: "2024-03-15T12:18:57.547002-07:00" description: A Helm chart for MinIO Operator digest: 31b5f65acc5b00e7a044cc56ed0b96b731d9d37e657b26b8610bf369003627e1 home: https://min.io @@ -1695,7 +1779,7 @@ entries: version: 4.4.5 - apiVersion: v2 appVersion: v4.4.4 - created: "2023-10-12T10:54:31.744161-07:00" + created: "2024-03-15T12:18:57.546036-07:00" description: A Helm chart for MinIO Operator digest: 638b415dbf8e12cecb6729f93024dfcb500b9afff96994f4b91c9abca147919c home: https://min.io @@ -1716,7 +1800,7 @@ entries: version: 4.4.4 - apiVersion: v2 appVersion: v4.4.3 - created: "2023-10-12T10:54:31.742674-07:00" + created: "2024-03-15T12:18:57.545055-07:00" description: A Helm chart for MinIO Operator digest: ab435f529db28f5160ca7e41b65cf1fd6ffdcf264aee87c6552c2fbf6ed7ff22 home: https://min.io @@ -1737,7 +1821,7 @@ entries: version: 4.4.3 - apiVersion: v2 appVersion: v4.4.2 - created: "2023-10-12T10:54:31.733429-07:00" + created: "2024-03-15T12:18:57.532464-07:00" description: A Helm chart for MinIO Operator digest: f77db593851240225fab7616fe0e6f8ed490eaa4f7154694fd7a89d54fc4bb77 home: https://min.io @@ -1758,7 +1842,7 @@ entries: version: 4.4.2 - apiVersion: v2 appVersion: v4.4.1 - created: "2023-10-12T10:54:31.723301-07:00" + created: "2024-03-15T12:18:57.522451-07:00" description: A Helm chart for MinIO Operator digest: 56198f5b196e41e50f5c5bce12ad9b17438192356ca925a67f637479b7a964a9 home: https://min.io @@ -1779,7 +1863,7 @@ entries: version: 4.4.1 - apiVersion: v2 appVersion: v4.4.0 - created: "2023-10-12T10:54:31.722436-07:00" + created: "2024-03-15T12:18:57.521455-07:00" description: A Helm chart for MinIO Operator digest: 94c6cb95f3a5869e8eecc5a8b93e0faca737fbcb9ffc85d9b2b84703020c8ff7 home: https://min.io @@ -1800,7 +1884,7 @@ entries: version: 4.4.0 - apiVersion: v2 appVersion: v4.3.9 - created: "2023-10-12T10:54:31.721061-07:00" + created: "2024-03-15T12:18:57.520483-07:00" description: A Helm chart for MinIO Operator digest: d29f9312f637f81f0bd59e06083aab0fa811b18069a0a7e97ecacbd4e26e2396 home: https://min.io @@ -1821,7 +1905,7 @@ entries: version: 4.3.9 - apiVersion: v2 appVersion: v4.3.8 - created: "2023-10-12T10:54:31.718798-07:00" + created: "2024-03-15T12:18:57.518948-07:00" description: A Helm chart for MinIO Operator digest: a5b77bff10ab24fa8a64967169f1fa85fcc228380467fb2563f15ba0a27eae3e home: https://min.io @@ -1842,7 +1926,7 @@ entries: version: 4.3.8 - apiVersion: v2 appVersion: v4.3.7 - created: "2023-10-12T10:54:31.717151-07:00" + created: "2024-03-15T12:18:57.51797-07:00" description: A Helm chart for MinIO Operator digest: fc7eb9d46ea779e8b5478c54b8976764e1e8abaa5a6130be413ae946c3a1b23c home: https://min.io @@ -1863,7 +1947,7 @@ entries: version: 4.3.7 - apiVersion: v2 appVersion: v4.3.6 - created: "2023-10-12T10:54:31.71641-07:00" + created: "2024-03-15T12:18:57.517006-07:00" description: A Helm chart for MinIO Operator digest: aec2d538e0fb4cfe0a4397d4d7ef64a129adaa8b490a526d047d98ee9ebbf292 home: https://min.io @@ -1883,9 +1967,93 @@ entries: - https://operator.min.io/helm-releases/operator-4.3.6.tgz version: 4.3.6 tenant: + - apiVersion: v2 + appVersion: v5.0.14 + created: "2024-03-15T12:18:57.613669-07:00" + description: A Helm chart for MinIO Operator + digest: 0054b5ceaa861813ece1d07f7a77ac804c50a82dbca88a1792695c5de1e93faf + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: tenant + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/tenant-5.0.14.tgz + version: 5.0.14 + - apiVersion: v2 + appVersion: v5.0.13 + created: "2024-03-15T12:18:57.612924-07:00" + description: A Helm chart for MinIO Operator + digest: 5f7704ddee60cf0e612a963fd5a6277668c0847414195d4ad0ae00447ee1373e + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: tenant + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/tenant-5.0.13.tgz + version: 5.0.13 + - apiVersion: v2 + appVersion: v5.0.12 + created: "2024-03-15T12:18:57.612026-07:00" + description: A Helm chart for MinIO Operator + digest: 0200d03b1c4a3b6fe7b13f2765a9ef2be414447aec93c48ccef5a7a74f0f20c3 + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: tenant + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/tenant-5.0.12.tgz + version: 5.0.12 + - apiVersion: v2 + appVersion: v5.0.11 + created: "2024-03-15T12:18:57.611129-07:00" + description: A Helm chart for MinIO Operator + digest: 1dc7ff2e03d1c5895cd14c2746a6de52ae85feafff11f9b81b313c4401986ae2 + home: https://min.io + icon: https://min.io/resources/img/logo/MINIO_wordmark.png + keywords: + - storage + - object-storage + - S3 + maintainers: + - email: dev@minio.io + name: MinIO, Inc + name: tenant + sources: + - https://github.com/minio/operator + type: application + urls: + - https://operator.min.io/helm-releases/tenant-5.0.11.tgz + version: 5.0.11 - apiVersion: v2 appVersion: v5.0.10 - created: "2023-10-12T10:54:31.792526-07:00" + created: "2024-03-15T12:18:57.610192-07:00" description: A Helm chart for MinIO Operator digest: 423be0e3af854bbecafd2c694ca398ae9e21c8397662991fb097dd3cc0e8e40a home: https://min.io @@ -1906,7 +2074,7 @@ entries: version: 5.0.10 - apiVersion: v2 appVersion: v5.0.9 - created: "2023-10-12T10:54:31.797731-07:00" + created: "2024-03-15T12:18:57.621639-07:00" description: A Helm chart for MinIO Operator digest: c5d0376d2b34a4cbdd5595f1b63e691d48313e5107327661b3548aeee3747e67 home: https://min.io @@ -1927,7 +2095,7 @@ entries: version: 5.0.9 - apiVersion: v2 appVersion: v5.0.8 - created: "2023-10-12T10:54:31.79689-07:00" + created: "2024-03-15T12:18:57.62085-07:00" description: A Helm chart for MinIO Operator digest: 538b884edf55c9f5818f09eeb62219222307927402374dcf74daf7999ad3a1ff home: https://min.io @@ -1948,7 +2116,7 @@ entries: version: 5.0.8 - apiVersion: v2 appVersion: v5.0.7 - created: "2023-10-12T10:54:31.796168-07:00" + created: "2024-03-15T12:18:57.62006-07:00" description: A Helm chart for MinIO Operator digest: a579f8305b766110c80c81882e6d87e9a2ba4531dc47258576300d823c7e79b0 home: https://min.io @@ -1969,7 +2137,7 @@ entries: version: 5.0.7 - apiVersion: v2 appVersion: v5.0.6 - created: "2023-10-12T10:54:31.795455-07:00" + created: "2024-03-15T12:18:57.619301-07:00" description: A Helm chart for MinIO Operator digest: c5030727cbafd3b51cb8801103832ccd84f1bb02897b635a3528d9bc983ee3a2 home: https://min.io @@ -1990,7 +2158,7 @@ entries: version: 5.0.6 - apiVersion: v2 appVersion: v5.0.5 - created: "2023-10-12T10:54:31.794763-07:00" + created: "2024-03-15T12:18:57.618524-07:00" description: A Helm chart for MinIO Operator digest: 849a51d2792f598d09f6f233eb80fa189a9dd8a3f72a14255e2e662a2c720053 home: https://min.io @@ -2011,7 +2179,7 @@ entries: version: 5.0.5 - apiVersion: v2 appVersion: v5.0.4 - created: "2023-10-12T10:54:31.794097-07:00" + created: "2024-03-15T12:18:57.617651-07:00" description: A Helm chart for MinIO Operator digest: ca747f759eaad2d97a713b902da863728d9621834cb7cf211fef74764716d77d home: https://min.io @@ -2032,7 +2200,7 @@ entries: version: 5.0.4 - apiVersion: v2 appVersion: v5.0.3 - created: "2023-10-12T10:54:31.793554-07:00" + created: "2024-03-15T12:18:57.614987-07:00" description: A Helm chart for MinIO Operator digest: ab7c1020e4c99db199df0bb91f8f0c5c9b3f7fde9d10b8aa81bde663fb7fba44 home: https://min.io @@ -2053,7 +2221,7 @@ entries: version: 5.0.3 - apiVersion: v2 appVersion: v5.0.2 - created: "2023-10-12T10:54:31.793024-07:00" + created: "2024-03-15T12:18:57.614269-07:00" description: A Helm chart for MinIO Operator digest: cc1c1e7c7540f0cf4ab6c4e1a23842daf63b3a7a9678a0213277d3fd702d1744 home: https://min.io @@ -2074,7 +2242,7 @@ entries: version: 5.0.2 - apiVersion: v2 appVersion: v5.0.1 - created: "2023-10-12T10:54:31.79193-07:00" + created: "2024-03-15T12:18:57.609385-07:00" description: A Helm chart for MinIO Operator digest: 127925004dc5ac1e6be08b4f7f64c368f51ca356c858bcfad4afba0d465c78eb home: https://min.io @@ -2095,7 +2263,7 @@ entries: version: 5.0.1 - apiVersion: v2 appVersion: v5.0.0 - created: "2023-10-12T10:54:31.791174-07:00" + created: "2024-03-15T12:18:57.608634-07:00" description: A Helm chart for MinIO Operator digest: 05faaa4aadd3e6dfeadc7218745900427073fb1a7d3ab53554dcb9d4e11b519a home: https://min.io @@ -2116,7 +2284,7 @@ entries: version: 5.0.0 - apiVersion: v2 appVersion: v4.5.8 - created: "2023-10-12T10:54:31.789538-07:00" + created: "2024-03-15T12:18:57.607886-07:00" description: A Helm chart for MinIO Operator digest: 32603b9e86f22ad1f2c47eb321126e622ac596246d3108997d476ae0ec98b25a home: https://min.io @@ -2137,7 +2305,7 @@ entries: version: 4.5.8 - apiVersion: v2 appVersion: v4.5.7 - created: "2023-10-12T10:54:31.788877-07:00" + created: "2024-03-15T12:18:57.606759-07:00" description: A Helm chart for MinIO Operator digest: b4005b0f52c6dbed01121e855bbebcd75ab027119579cd1590c506f3cc9052a4 home: https://min.io @@ -2158,7 +2326,7 @@ entries: version: 4.5.7 - apiVersion: v2 appVersion: v4.5.6 - created: "2023-10-12T10:54:31.788247-07:00" + created: "2024-03-15T12:18:57.605261-07:00" description: A Helm chart for MinIO Operator digest: 0dd26ce74e188e8e910ada14fd0c53261b305ce081afeceaa331ff4199f84f43 home: https://min.io @@ -2179,7 +2347,7 @@ entries: version: 4.5.6 - apiVersion: v2 appVersion: v4.5.5 - created: "2023-10-12T10:54:31.787649-07:00" + created: "2024-03-15T12:18:57.60443-07:00" description: A Helm chart for MinIO Operator digest: 79138fad6c8ad0a609e2bf8663dd06b4a72ed43a2689cbfa7ec6f77c84a9bb79 home: https://min.io @@ -2200,7 +2368,7 @@ entries: version: 4.5.5 - apiVersion: v2 appVersion: v4.5.4 - created: "2023-10-12T10:54:31.787071-07:00" + created: "2024-03-15T12:18:57.603652-07:00" description: A Helm chart for MinIO Operator digest: 9f7a01771791680d6d2de90a0d20f43c28ebc103f4256e61a228ca79522caa16 home: https://min.io @@ -2221,7 +2389,7 @@ entries: version: 4.5.4 - apiVersion: v2 appVersion: v4.5.3 - created: "2023-10-12T10:54:31.786493-07:00" + created: "2024-03-15T12:18:57.602873-07:00" description: A Helm chart for MinIO Operator digest: 28535cebc7394d4106a3cbd9adb32aa8eaff22a3436219a91713a8e06e4854bb home: https://min.io @@ -2242,7 +2410,7 @@ entries: version: 4.5.3 - apiVersion: v2 appVersion: v4.5.2 - created: "2023-10-12T10:54:31.785906-07:00" + created: "2024-03-15T12:18:57.602061-07:00" description: A Helm chart for MinIO Operator digest: f46708b94148ceeed66c6c3630c519c61f2f7999b537e794a8f7dd8eee4fe87a home: https://min.io @@ -2263,7 +2431,7 @@ entries: version: 4.5.2 - apiVersion: v2 appVersion: v4.5.1 - created: "2023-10-12T10:54:31.785194-07:00" + created: "2024-03-15T12:18:57.60126-07:00" description: A Helm chart for MinIO Operator digest: 1079cda85fb27caf0323e22af5d6604b3efb0bdc004d8ae4130adf39981e7bc6 home: https://min.io @@ -2284,7 +2452,7 @@ entries: version: 4.5.1 - apiVersion: v2 appVersion: v4.5.0 - created: "2023-10-12T10:54:31.784538-07:00" + created: "2024-03-15T12:18:57.600471-07:00" description: A Helm chart for MinIO Operator digest: 71daf13a3430536c32d302baf7d1b15b85aae0ba9b9665a936190e78bcd29a37 home: https://min.io @@ -2305,7 +2473,7 @@ entries: version: 4.5.0 - apiVersion: v2 appVersion: v4.4.28 - created: "2023-10-12T10:54:31.780666-07:00" + created: "2024-03-15T12:18:57.595928-07:00" description: A Helm chart for MinIO Operator digest: 10506f0101f7b8a83eaf1c9323faaed09f24e4fbed70489f1510b73de1e8a37d home: https://min.io @@ -2326,7 +2494,7 @@ entries: version: 4.4.28 - apiVersion: v2 appVersion: v4.4.27 - created: "2023-10-12T10:54:31.780118-07:00" + created: "2024-03-15T12:18:57.595169-07:00" description: A Helm chart for MinIO Operator digest: 00b5cebcb06880f0ac7e968db60f30aa8f7ce708676d75886294e444263e0d91 home: https://min.io @@ -2347,7 +2515,7 @@ entries: version: 4.4.27 - apiVersion: v2 appVersion: v4.4.26 - created: "2023-10-12T10:54:31.779572-07:00" + created: "2024-03-15T12:18:57.594415-07:00" description: A Helm chart for MinIO Operator digest: 901d018eb3a7d5869980b7eb9e3ee98f6e6e03d87916888824195ecf99034e6f home: https://min.io @@ -2368,7 +2536,7 @@ entries: version: 4.4.26 - apiVersion: v2 appVersion: v4.4.25 - created: "2023-10-12T10:54:31.779015-07:00" + created: "2024-03-15T12:18:57.593651-07:00" description: A Helm chart for MinIO Operator digest: 739df832f89ba832082bd31ede3a278a1d5320f53bf2851a87c39565447ca899 home: https://min.io @@ -2389,7 +2557,7 @@ entries: version: 4.4.25 - apiVersion: v2 appVersion: v4.4.24 - created: "2023-10-12T10:54:31.778458-07:00" + created: "2024-03-15T12:18:57.592894-07:00" description: A Helm chart for MinIO Operator digest: a5cf656ddf429b1798102c71b14222eda587d8c84a5bc8f498344dcd3991fbe8 home: https://min.io @@ -2410,7 +2578,7 @@ entries: version: 4.4.24 - apiVersion: v2 appVersion: v4.4.23 - created: "2023-10-12T10:54:31.777875-07:00" + created: "2024-03-15T12:18:57.592115-07:00" description: A Helm chart for MinIO Operator digest: 82936fe6caaefc1420dabec0bad23f7cbd7bad0e18d91177f4be2c8dd7c42f97 home: https://min.io @@ -2431,7 +2599,7 @@ entries: version: 4.4.23 - apiVersion: v2 appVersion: v4.4.22 - created: "2023-10-12T10:54:31.777289-07:00" + created: "2024-03-15T12:18:57.591366-07:00" description: A Helm chart for MinIO Operator digest: 53f14c8a25da32736b97bc454f10f64a24540e54298b40422ce369c89d524d82 home: https://min.io @@ -2452,7 +2620,7 @@ entries: version: 4.4.22 - apiVersion: v2 appVersion: v4.4.21 - created: "2023-10-12T10:54:31.776028-07:00" + created: "2024-03-15T12:18:57.589697-07:00" description: A Helm chart for MinIO Operator digest: d2e7fce3dc9bf61e06a2934cc1baa3257d9394cffa423febe115773065b34eba home: https://min.io @@ -2473,7 +2641,7 @@ entries: version: 4.4.21 - apiVersion: v2 appVersion: v4.4.20 - created: "2023-10-12T10:54:31.775506-07:00" + created: "2024-03-15T12:18:57.58897-07:00" description: A Helm chart for MinIO Operator digest: 451880d3863cf4010e1012dd371af0c18d0f18cf6d535c7f9622db4554558e39 home: https://min.io @@ -2494,7 +2662,7 @@ entries: version: 4.4.20 - apiVersion: v2 appVersion: v4.4.19 - created: "2023-10-12T10:54:31.774505-07:00" + created: "2024-03-15T12:18:57.587743-07:00" description: A Helm chart for MinIO Operator digest: 03f3cbcfd81ac6de399d5e12ee3e9149a3121c1a13c205a9d211a5ca6bb80f3a home: https://min.io @@ -2515,7 +2683,7 @@ entries: version: 4.4.19 - apiVersion: v2 appVersion: v4.4.18 - created: "2023-10-12T10:54:31.773985-07:00" + created: "2024-03-15T12:18:57.586339-07:00" description: A Helm chart for MinIO Operator digest: f57c293a026147b416095d3d71dd5351c5bcbb15ba1a67ff98a23a6ea55cd811 home: https://min.io @@ -2536,7 +2704,7 @@ entries: version: 4.4.18 - apiVersion: v2 appVersion: v4.4.17 - created: "2023-10-12T10:54:31.773363-07:00" + created: "2024-03-15T12:18:57.585658-07:00" description: A Helm chart for MinIO Operator digest: ef875252c6a25d2d88a6f6c9b469ceb0502e215698ddf349e6162d5cea3f7454 home: https://min.io @@ -2557,7 +2725,7 @@ entries: version: 4.4.17 - apiVersion: v2 appVersion: v4.4.16 - created: "2023-10-12T10:54:31.772805-07:00" + created: "2024-03-15T12:18:57.585096-07:00" description: A Helm chart for MinIO Operator digest: 4006976cce87448e1f98eaab2e03ff94a149448569272c3b090043e1784f5a0d home: https://min.io @@ -2578,7 +2746,7 @@ entries: version: 4.4.16 - apiVersion: v2 appVersion: v4.4.15 - created: "2023-10-12T10:54:31.772352-07:00" + created: "2024-03-15T12:18:57.584534-07:00" description: A Helm chart for MinIO Operator digest: d32c2a18765f77073f8f68a00c4f59340b505e7a0ff039e7bdf9c984dfa4fac8 home: https://min.io @@ -2599,7 +2767,7 @@ entries: version: 4.4.15 - apiVersion: v2 appVersion: v4.4.14 - created: "2023-10-12T10:54:31.771881-07:00" + created: "2024-03-15T12:18:57.584033-07:00" description: A Helm chart for MinIO Operator digest: 564c971cc0a6fc8d8e28f4410adad7f24ddb638199ec30360057d6442cb5d5d2 home: https://min.io @@ -2620,7 +2788,7 @@ entries: version: 4.4.14 - apiVersion: v2 appVersion: v4.4.13 - created: "2023-10-12T10:54:31.771408-07:00" + created: "2024-03-15T12:18:57.583609-07:00" description: A Helm chart for MinIO Operator digest: 124b1d7e4bbf5b97542721da1b6ce522026ced596e5c3da0b4b71e6137ca9f20 home: https://min.io @@ -2641,7 +2809,7 @@ entries: version: 4.4.13 - apiVersion: v2 appVersion: v4.4.10 - created: "2023-10-12T10:54:31.770999-07:00" + created: "2024-03-15T12:18:57.583175-07:00" description: A Helm chart for MinIO Operator digest: 7ddf8840cf0b6998d2b0f5eb72fb586cc0dceaf55583528912d5d572df6914bc home: https://min.io @@ -2662,7 +2830,7 @@ entries: version: 4.4.10 - apiVersion: v2 appVersion: v4.4.9 - created: "2023-10-12T10:54:31.783621-07:00" + created: "2024-03-15T12:18:57.599662-07:00" description: A Helm chart for MinIO Operator digest: 9c84dc9ea5122b24c5ef52a597c22213151baf74e4c91c95f90570fa0358d824 home: https://min.io @@ -2683,7 +2851,7 @@ entries: version: 4.4.9 - apiVersion: v2 appVersion: v4.4.8 - created: "2023-10-12T10:54:31.783088-07:00" + created: "2024-03-15T12:18:57.599231-07:00" description: A Helm chart for MinIO Operator digest: 51779e38d74b919d1eb48c21d51174ecc34a3d9e602b53c9ca5f05ad8fd6a02e home: https://min.io @@ -2704,7 +2872,7 @@ entries: version: 4.4.8 - apiVersion: v2 appVersion: v4.4.7 - created: "2023-10-12T10:54:31.782749-07:00" + created: "2024-03-15T12:18:57.598798-07:00" description: A Helm chart for MinIO Operator digest: 6bec3bd8e464c946be4d7de756e23743660686ecc52b7b516509be0f1d80f33b home: https://min.io @@ -2725,7 +2893,7 @@ entries: version: 4.4.7 - apiVersion: v2 appVersion: v4.4.6 - created: "2023-10-12T10:54:31.782434-07:00" + created: "2024-03-15T12:18:57.598361-07:00" description: A Helm chart for MinIO Operator digest: a84048ce81e3b6dc9b7214f6d95f08768985c2aedc7ba377383b0e55bb72ad82 home: https://min.io @@ -2746,7 +2914,7 @@ entries: version: 4.4.6 - apiVersion: v2 appVersion: v4.4.5 - created: "2023-10-12T10:54:31.782105-07:00" + created: "2024-03-15T12:18:57.597919-07:00" description: A Helm chart for MinIO Operator digest: 10337d8d9375bfd87b231b2696f6ee6d3e43bef96bd3ada1db015975da8053c5 home: https://min.io @@ -2767,7 +2935,7 @@ entries: version: 4.4.5 - apiVersion: v2 appVersion: v4.4.4 - created: "2023-10-12T10:54:31.781607-07:00" + created: "2024-03-15T12:18:57.597475-07:00" description: A Helm chart for MinIO Operator digest: 3d28b27c3102f0994b4b1ae7db40f33f79d70cc7d22febfebe11a68bf507a5f8 home: https://min.io @@ -2788,7 +2956,7 @@ entries: version: 4.4.4 - apiVersion: v2 appVersion: v4.4.3 - created: "2023-10-12T10:54:31.78116-07:00" + created: "2024-03-15T12:18:57.596614-07:00" description: A Helm chart for MinIO Operator digest: 528cde9cb02ffd6ebe5820f5f540b019599aa55affbff43627d3524d50825ff1 home: https://min.io @@ -2809,7 +2977,7 @@ entries: version: 4.4.3 - apiVersion: v2 appVersion: v4.4.2 - created: "2023-10-12T10:54:31.774976-07:00" + created: "2024-03-15T12:18:57.5882-07:00" description: A Helm chart for MinIO Operator digest: 1f71d438b2363aafaa4232a8b8d2461f306179b5ec628e0126a52724d25d9138 home: https://min.io @@ -2830,7 +2998,7 @@ entries: version: 4.4.2 - apiVersion: v2 appVersion: v4.4.1 - created: "2023-10-12T10:54:31.770554-07:00" + created: "2024-03-15T12:18:57.582732-07:00" description: A Helm chart for MinIO Operator digest: 2fcb816afa72a3aba0deba2992827a0ad4b3b0e9b19903ac3fc35f461f5cb6b7 home: https://min.io @@ -2851,7 +3019,7 @@ entries: version: 4.4.1 - apiVersion: v2 appVersion: v4.4.0 - created: "2023-10-12T10:54:31.770118-07:00" + created: "2024-03-15T12:18:57.58222-07:00" description: A Helm chart for MinIO Operator digest: c2885c20e28b46609ac1def9bf529ce84275b85521798f254eb410bcdaca8314 home: https://min.io @@ -2872,7 +3040,7 @@ entries: version: 4.4.0 - apiVersion: v2 appVersion: v4.3.9 - created: "2023-10-12T10:54:31.769667-07:00" + created: "2024-03-15T12:18:57.581561-07:00" description: A Helm chart for MinIO Operator digest: ee1c348c272903ea2562650a92cc4654db2bb1f5b617b329dad1586ccbfdb5bb home: https://min.io @@ -2893,7 +3061,7 @@ entries: version: 4.3.9 - apiVersion: v2 appVersion: v4.3.8 - created: "2023-10-12T10:54:31.768794-07:00" + created: "2024-03-15T12:18:57.581166-07:00" description: A Helm chart for MinIO Operator digest: 85ecf1beae2505e993ec939fc7df6fedf55708c665359de3b67b3ef35d768aaf home: https://min.io @@ -2914,7 +3082,7 @@ entries: version: 4.3.8 - apiVersion: v2 appVersion: v4.3.7 - created: "2023-10-12T10:54:31.768273-07:00" + created: "2024-03-15T12:18:57.580758-07:00" description: A Helm chart for MinIO Operator digest: 08fb42ece9b9b356f28c1261620726a7056840527df0c036ed64dd511595c024 home: https://min.io @@ -2935,7 +3103,7 @@ entries: version: 4.3.7 - apiVersion: v2 appVersion: v4.3.6 - created: "2023-10-12T10:54:31.767798-07:00" + created: "2024-03-15T12:18:57.580339-07:00" description: A Helm chart for MinIO Operator digest: 1da42b15ba375963bbc6908a7e5f6fc6605eba059cebf0706da09565e463e2c4 home: https://min.io @@ -2954,4 +3122,4 @@ entries: urls: - https://operator.min.io/helm-releases/tenant-4.3.6.tgz version: 4.3.6 -generated: "2023-10-12T10:54:31.66723-07:00" +generated: "2024-03-15T12:18:57.46461-07:00" diff --git a/k8s/boilerplate.go.txt b/k8s/boilerplate.go.txt index 67827666166..d879570d0e9 100644 --- a/k8s/boilerplate.go.txt +++ b/k8s/boilerplate.go.txt @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/k8s/update-codegen.sh b/k8s/update-codegen.sh index 3845bbb97b9..3f7d66b7ad3 100755 --- a/k8s/update-codegen.sh +++ b/k8s/update-codegen.sh @@ -34,6 +34,7 @@ echo ">> Temporary output directory ${TEMP_DIR}" # Ensure we can execute. chmod +x ${CODEGEN_PKG}/generate-groups.sh +chmod +x ${CODEGEN_PKG}/generate-internal-groups.sh # generate the code with: # --output-base because this script should also be able to run inside the vendor dir of @@ -42,7 +43,7 @@ chmod +x ${CODEGEN_PKG}/generate-groups.sh cd ${SCRIPT_ROOT} ${CODEGEN_PKG}/generate-groups.sh "all" \ $ROOT_PKG/pkg/client $ROOT_PKG/pkg/apis \ - "minio.min.io:v2 sts.min.io:v1alpha1" \ + "minio.min.io:v2 sts.min.io:v1alpha1 job.min.io:v1alpha1" \ --output-base "${TEMP_DIR}" \ --go-header-file "k8s/boilerplate.go.txt" diff --git a/kubectl-minio/CREDITS b/kubectl-minio/CREDITS deleted file mode 100644 index fb508f3a360..00000000000 --- a/kubectl-minio/CREDITS +++ /dev/null @@ -1,10751 +0,0 @@ -Go (the standard library) -https://golang.org/ ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -cloud.google.com/go -https://cloud.google.com/go ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest -https://github.com/Azure/go-autorest ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/autorest -https://github.com/Azure/go-autorest/autorest ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/autorest/adal -https://github.com/Azure/go-autorest/autorest/adal ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/autorest/date -https://github.com/Azure/go-autorest/autorest/date ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/autorest/mocks -https://github.com/Azure/go-autorest/autorest/mocks ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/logger -https://github.com/Azure/go-autorest/logger ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/Azure/go-autorest/tracing -https://github.com/Azure/go-autorest/tracing ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Microsoft Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/PuerkitoBio/purell -https://github.com/PuerkitoBio/purell ----------------------------------------------------------------- -Copyright (c) 2012, Martin Angers -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/PuerkitoBio/urlesc -https://github.com/PuerkitoBio/urlesc ----------------------------------------------------------------- -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/StackExchange/wmi -https://github.com/StackExchange/wmi ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2013 Stack Exchange - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/chzyer/readline -https://github.com/chzyer/readline ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2015 Chzyer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -================================================================ - -github.com/chzyer/test -https://github.com/chzyer/test ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2016 chzyer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/davecgh/go-spew -https://github.com/davecgh/go-spew ----------------------------------------------------------------- -ISC License - -Copyright (c) 2012-2016 Dave Collins - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -================================================================ - -github.com/dustin/go-humanize -https://github.com/dustin/go-humanize ----------------------------------------------------------------- -Copyright (c) 2005-2008 Dustin Sallings - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -================================================================ - -github.com/emicklei/go-restful -https://github.com/emicklei/go-restful ----------------------------------------------------------------- -Copyright (c) 2012,2013 Ernest Micklei - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -================================================================ - -github.com/evanphx/json-patch -https://github.com/evanphx/json-patch ----------------------------------------------------------------- -Copyright (c) 2014, Evan Phoenix -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the Evan Phoenix nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/fatih/color -https://github.com/fatih/color ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2013 Fatih Arslan - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/form3tech-oss/jwt-go -https://github.com/form3tech-oss/jwt-go ----------------------------------------------------------------- -Copyright (c) 2012 Dave Grijalva - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -================================================================ - -github.com/fsnotify/fsnotify -https://github.com/fsnotify/fsnotify ----------------------------------------------------------------- -Copyright (c) 2012 The Go Authors. All rights reserved. -Copyright (c) 2012-2019 fsnotify Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/ghodss/yaml -https://github.com/ghodss/yaml ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2014 Sam Ghods - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/go-errors/errors -https://github.com/go-errors/errors ----------------------------------------------------------------- -Copyright (c) 2015 Conrad Irwin - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/go-logr/logr -https://github.com/go-logr/logr ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/go-ole/go-ole -https://github.com/go-ole/go-ole ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright © 2013-2017 Yasuhiro Matsumoto, - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/go-openapi/jsonpointer -https://github.com/go-openapi/jsonpointer ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/go-openapi/jsonreference -https://github.com/go-openapi/jsonreference ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/go-openapi/spec -https://github.com/go-openapi/spec ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/go-openapi/swag -https://github.com/go-openapi/swag ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/gogo/protobuf -https://github.com/gogo/protobuf ----------------------------------------------------------------- -Copyright (c) 2013, The GoGo Authors. All rights reserved. - -Protocol Buffers for Go with Gadgets - -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -================================================================ - -github.com/golang-jwt/jwt -https://github.com/golang-jwt/jwt ----------------------------------------------------------------- -Copyright (c) 2012 Dave Grijalva -Copyright (c) 2021 golang-jwt maintainers - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -================================================================ - -github.com/golang/protobuf -https://github.com/golang/protobuf ----------------------------------------------------------------- -Copyright 2010 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -================================================================ - -github.com/google/btree -https://github.com/google/btree ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/google/go-cmp -https://github.com/google/go-cmp ----------------------------------------------------------------- -Copyright (c) 2017 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/google/gofuzz -https://github.com/google/gofuzz ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/google/shlex -https://github.com/google/shlex ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/google/uuid -https://github.com/google/uuid ----------------------------------------------------------------- -Copyright (c) 2009,2014 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/googleapis/gnostic -https://github.com/googleapis/gnostic ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -================================================================ - -github.com/gopherjs/gopherjs -https://github.com/gopherjs/gopherjs ----------------------------------------------------------------- -Copyright (c) 2013 Richard Musiol. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/gregjones/httpcache -https://github.com/gregjones/httpcache ----------------------------------------------------------------- -Copyright © 2012 Greg Jones (greg.jones@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -================================================================ - -github.com/imdario/mergo -https://github.com/imdario/mergo ----------------------------------------------------------------- -Copyright (c) 2013 Dario Castañé. All rights reserved. -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/inconshreveable/mousetrap -https://github.com/inconshreveable/mousetrap ----------------------------------------------------------------- -Copyright 2014 Alan Shreve - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -================================================================ - -github.com/json-iterator/go -https://github.com/json-iterator/go ----------------------------------------------------------------- -MIT License - -Copyright (c) 2016 json-iterator - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/jtolds/gls -https://github.com/jtolds/gls ----------------------------------------------------------------- -Copyright (c) 2013, Space Monkey, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/juju/ansiterm -https://github.com/juju/ansiterm ----------------------------------------------------------------- -All files in this repository are licensed as follows. If you contribute -to this repository, it is assumed that you license your contribution -under the same license unless you state otherwise. - -All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - -================================================================ - -github.com/klauspost/cpuid/v2 -https://github.com/klauspost/cpuid/v2 ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2015 Klaus Post - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -================================================================ - -github.com/kr/text -https://github.com/kr/text ----------------------------------------------------------------- -Copyright 2012 Keith Rarick - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/liggitt/tabwriter -https://github.com/liggitt/tabwriter ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/lunixbochs/vtclean -https://github.com/lunixbochs/vtclean ----------------------------------------------------------------- -Copyright (c) 2015 Ryan Hileman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/mailru/easyjson -https://github.com/mailru/easyjson ----------------------------------------------------------------- -Copyright (c) 2016 Mail.Ru Group - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/manifoldco/promptui -https://github.com/manifoldco/promptui ----------------------------------------------------------------- -BSD 3-Clause License - -Copyright (c) 2017, Arigato Machine Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/mattn/go-colorable -https://github.com/mattn/go-colorable ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2016 Yasuhiro Matsumoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/mattn/go-isatty -https://github.com/mattn/go-isatty ----------------------------------------------------------------- -Copyright (c) Yasuhiro MATSUMOTO - -MIT License (Expat) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/mattn/go-runewidth -https://github.com/mattn/go-runewidth ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2016 Yasuhiro Matsumoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/minio/madmin-go -https://github.com/minio/madmin-go ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/minio/minio-go/v7 -https://github.com/minio/minio-go/v7 ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/minio/sha256-simd -https://github.com/minio/sha256-simd ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/mitchellh/go-homedir -https://github.com/mitchellh/go-homedir ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/modern-go/concurrent -https://github.com/modern-go/concurrent ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/modern-go/reflect2 -https://github.com/modern-go/reflect2 ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/monochromegane/go-gitignore -https://github.com/monochromegane/go-gitignore ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) [2015] [go-gitignore] - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/niemeyer/pretty -https://github.com/niemeyer/pretty ----------------------------------------------------------------- -Copyright 2012 Keith Rarick - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/nxadm/tail -https://github.com/nxadm/tail ----------------------------------------------------------------- -# The MIT License (MIT) - -# © Copyright 2015 Hewlett Packard Enterprise Development LP -Copyright (c) 2014 ActiveState - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/olekukonko/tablewriter -https://github.com/olekukonko/tablewriter ----------------------------------------------------------------- -Copyright (C) 2014 by Oleku Konko - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/onsi/ginkgo -https://github.com/onsi/ginkgo ----------------------------------------------------------------- -Copyright (c) 2013-2014 Onsi Fakhouri - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/onsi/gomega -https://github.com/onsi/gomega ----------------------------------------------------------------- -Copyright (c) 2013-2014 Onsi Fakhouri - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -================================================================ - -github.com/peterbourgon/diskv -https://github.com/peterbourgon/diskv ----------------------------------------------------------------- -Copyright (c) 2011-2012 Peter Bourgon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/philhofer/fwd -https://github.com/philhofer/fwd ----------------------------------------------------------------- -Copyright (c) 2014-2015, Philip Hofer - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -================================================================ - -github.com/pkg/errors -https://github.com/pkg/errors ----------------------------------------------------------------- -Copyright (c) 2015, Dave Cheney -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/pmezard/go-difflib -https://github.com/pmezard/go-difflib ----------------------------------------------------------------- -Copyright (c) 2013, Patrick Mezard -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - The names of its contributors may not be used to endorse or promote -products derived from this software without specific prior written -permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/prometheus/procfs -https://github.com/prometheus/procfs ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -github.com/rs/xid -https://github.com/rs/xid ----------------------------------------------------------------- -Copyright (c) 2015 Olivier Poitrey - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -github.com/secure-io/sio-go -https://github.com/secure-io/sio-go ----------------------------------------------------------------- -MIT License - -Copyright (c) 2019 SecureIO - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/sergi/go-diff -https://github.com/sergi/go-diff ----------------------------------------------------------------- -Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -================================================================ - -github.com/shirou/gopsutil/v3 -https://github.com/shirou/gopsutil/v3 ----------------------------------------------------------------- -gopsutil is distributed under BSD license reproduced below. - -Copyright (c) 2014, WAKAYAMA Shirou -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the gopsutil authors nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------- -internal/common/binary.go in the gopsutil is copied and modifid from golang/encoding/binary.go. - - - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -================================================================ - -github.com/smartystreets/assertions -https://github.com/smartystreets/assertions ----------------------------------------------------------------- -Copyright (c) 2016 SmartyStreets, LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -NOTE: Various optional and subordinate components carry their own licensing -requirements and restrictions. Use of those components is subject to the terms -and conditions outlined the respective license of each component. - -================================================================ - -github.com/smartystreets/goconvey -https://github.com/smartystreets/goconvey ----------------------------------------------------------------- -Copyright (c) 2016 SmartyStreets, LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -NOTE: Various optional and subordinate components carry their own licensing -requirements and restrictions. Use of those components is subject to the terms -and conditions outlined the respective license of each component. - -================================================================ - -github.com/spf13/cobra -https://github.com/spf13/cobra ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -================================================================ - -github.com/spf13/pflag -https://github.com/spf13/pflag ----------------------------------------------------------------- -Copyright (c) 2012 Alex Ogier. All rights reserved. -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/stretchr/objx -https://github.com/stretchr/objx ----------------------------------------------------------------- -The MIT License - -Copyright (c) 2014 Stretchr, Inc. -Copyright (c) 2017-2018 objx contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/stretchr/testify -https://github.com/stretchr/testify ----------------------------------------------------------------- -MIT License - -Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -================================================================ - -github.com/tinylib/msgp -https://github.com/tinylib/msgp ----------------------------------------------------------------- -Copyright (c) 2014 Philip Hofer -Portions Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -================================================================ - -github.com/tklauser/go-sysconf -https://github.com/tklauser/go-sysconf ----------------------------------------------------------------- -BSD 3-Clause License - -Copyright (c) 2018-2021, Tobias Klauser -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -github.com/tklauser/numcpus -https://github.com/tklauser/numcpus ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} Authors of Cilium - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -================================================================ - -github.com/xlab/treeprint -https://github.com/xlab/treeprint ----------------------------------------------------------------- -The MIT License (MIT) -Copyright © 2016 Maxim Kupriianov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the “Software”), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -================================================================ - -go.starlark.net -https://go.starlark.net ----------------------------------------------------------------- -Copyright (c) 2017 The Bazel Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the - distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/crypto -https://golang.org/x/crypto ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/net -https://golang.org/x/net ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/oauth2 -https://golang.org/x/oauth2 ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/sys -https://golang.org/x/sys ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/term -https://golang.org/x/term ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/text -https://golang.org/x/text ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/time -https://golang.org/x/time ----------------------------------------------------------------- -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -golang.org/x/xerrors -https://golang.org/x/xerrors ----------------------------------------------------------------- -Copyright (c) 2019 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -google.golang.org/appengine -https://google.golang.org/appengine ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -google.golang.org/protobuf -https://google.golang.org/protobuf ----------------------------------------------------------------- -Copyright (c) 2018 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -gopkg.in/check.v1 -https://gopkg.in/check.v1 ----------------------------------------------------------------- -Gocheck - A rich testing framework for Go - -Copyright (c) 2010-2013 Gustavo Niemeyer - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -gopkg.in/inf.v0 -https://gopkg.in/inf.v0 ----------------------------------------------------------------- -Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go -Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -gopkg.in/ini.v1 -https://gopkg.in/ini.v1 ----------------------------------------------------------------- -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright 2014 Unknwon - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -gopkg.in/tomb.v1 -https://gopkg.in/tomb.v1 ----------------------------------------------------------------- -tomb - support for clean goroutine termination in Go. - -Copyright (c) 2010-2011 - Gustavo Niemeyer - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - -gopkg.in/yaml.v2 -https://gopkg.in/yaml.v2 ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -gopkg.in/yaml.v3 -https://gopkg.in/yaml.v3 ----------------------------------------------------------------- - -This project is covered by two different licenses: MIT and Apache. - -#### MIT License #### - -The following files were ported to Go from C files of libyaml, and thus -are still covered by their original MIT license, with the additional -copyright staring in 2011 when the project was ported over: - - apic.go emitterc.go parserc.go readerc.go scannerc.go - writerc.go yamlh.go yamlprivateh.go - -Copyright (c) 2006-2010 Kirill Simonov -Copyright (c) 2006-2011 Kirill Simonov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -### Apache License ### - -All the remaining project files are covered by the Apache license: - -Copyright (c) 2011-2019 Canonical Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -================================================================ - -k8s.io/api -https://k8s.io/api ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/apiextensions-apiserver -https://k8s.io/apiextensions-apiserver ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/apimachinery -https://k8s.io/apimachinery ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/cli-runtime -https://k8s.io/cli-runtime ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/client-go -https://k8s.io/client-go ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/klog/v2 -https://k8s.io/klog/v2 ----------------------------------------------------------------- -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/kube-openapi -https://k8s.io/kube-openapi ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -k8s.io/utils -https://k8s.io/utils ----------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/controller-runtime -https://sigs.k8s.io/controller-runtime ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/kustomize -https://sigs.k8s.io/kustomize ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/kustomize/api -https://sigs.k8s.io/kustomize/api ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/kustomize/kyaml -https://sigs.k8s.io/kustomize/kyaml ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/structured-merge-diff/v4 -https://sigs.k8s.io/structured-merge-diff/v4 ----------------------------------------------------------------- - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================ - -sigs.k8s.io/yaml -https://sigs.k8s.io/yaml ----------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) 2014 Sam Ghods - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -================================================================ - diff --git a/kubectl-minio/LICENSE b/kubectl-minio/LICENSE deleted file mode 100644 index be3f7b28e56..00000000000 --- a/kubectl-minio/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/kubectl-minio/README.md b/kubectl-minio/README.md deleted file mode 100644 index d3ff9666856..00000000000 --- a/kubectl-minio/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# MinIO Kubectl Plugin - -## Prerequisites - -- Kubernetes >= v1.19.0. -- kubectl installed on your local machine, configured to talk to the Kubernetes cluster. -- Create PVs. - -## Install Plugin - -Command: `kubectl krew install minio` - -## Plugin Commands - -### Operator Deployment - -Command: `kubectl minio init [options]` - -Creates MinIO Operator Deployment along with MinIO Tenant CRD, Service account, Cluster Role and Cluster Role Binding. - -Options: - -- `--image=minio/operator:v5.0.10` -- `--namespace=minio-operator` -- `--cluster-domain=cluster.local` -- `--namespace-to-watch=default` -- `--image-pull-secret=` -- `--output` - -### Operator Deletion - -Command: `kubectl minio delete [options]` - -Deletes MinIO Operator Deployment along with MinIO Tenant CRD, Service account, Cluster Role and Cluster Role Binding. -It also removes all the Tenant instances. - -Options: - -- `--namespace=minio-operator` - -### Tenant - -#### MinIO Tenant Creation - -Command: `kubectl minio tenant create TENANT_NAME --servers SERVERS --volumes TOTAL_VOLUMES --capacity TOTAL_RAW_CAPACITY [options]` - -Creates a MinIO Tenant based on the passed values. Please note that plugin adds `anti-affinity` rules to the MinIO -Tenant pods to ensure multiple pods don't end up on the same physical node. To disable this, use -the `-enable-host-sharing` flag during tenant creation. - -example: `kubectl minio tenant create tenant1 --servers 4 --volumes 16 --capacity 16Ti` - -Options: - -- `--namespace=minio` -- `--kes-config=kes-secret` -- `--output` - -#### Add Tenant pools - -Command: `kubectl minio tenant expand TENANT_NAME --servers SERVERS --volumes TOTAL_VOLUMES --capacity TOTAL_RAW_CAPACITY [options]` - -Add new volumes (and nodes) to existing MinIO Tenant. - -example: `kubectl minio tenant expand tenant1 --servers 4 --volumes 16 --capacity 16Ti` - -Options: - -- `--namespace=minio` -- `--output` - -#### List Tenant pools - -Command: `kubectl minio tenant info TENANT_NAME [options]` - -List all existing MinIO pools in the given MinIO Tenant. - -example: `kubectl minio tenant info tenant1` - -Options: - -- `--namespace=minio` - -#### Upgrade Images - -Command: `kubectl minio tenant upgrade TENANT_NAME --image IMAGE_TAG [options]` - -Upgrade MinIO Docker image for the given MinIO Tenant. - -example: `kubectl minio tenant upgrade tenant1 --image minio/minio:RELEASE.2023-10-07T15-07-38Z` - -Options: - -- `--namespace=minio` -- `--output` - -#### Remove Tenant - -Command: `kubectl minio tenant delete TENANT_NAME [options]` - -Delete an existing MinIO Tenant. - -example: `kubectl minio tenant delete tenant1` - -Options: - -- `--namespace=minio` diff --git a/kubectl-minio/cmd/color.go b/kubectl-minio/cmd/color.go deleted file mode 100644 index 8358cab2fb6..00000000000 --- a/kubectl-minio/cmd/color.go +++ /dev/null @@ -1,136 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2021, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "fmt" - - "github.com/fatih/color" -) - -// global colors. -var ( - // Check if we stderr, stdout are dumb terminals, we do not apply - // ansi coloring on dumb terminals. - IsTerminal = func() bool { - return !color.NoColor - } - - Bold = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.Bold).SprintfFunc() - } - return fmt.Sprintf - }() - - RedBold = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgRed, color.Bold).SprintfFunc() - } - return fmt.Sprintf - }() - - Red = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgRed).SprintfFunc() - } - return fmt.Sprintf - }() - - Blue = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgBlue).SprintfFunc() - } - return fmt.Sprintf - }() - - Yellow = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgYellow).SprintfFunc() - } - return fmt.Sprintf - }() - - Green = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgGreen).SprintFunc() - } - return fmt.Sprint - }() - - GreenBold = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgGreen, color.Bold).SprintFunc() - } - return fmt.Sprint - }() - - CyanBold = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgCyan, color.Bold).SprintFunc() - } - return fmt.Sprint - }() - - YellowBold = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgYellow, color.Bold).SprintfFunc() - } - return fmt.Sprintf - }() - - BlueBold = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgBlue, color.Bold).SprintfFunc() - } - return fmt.Sprintf - }() - - BgYellow = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.BgYellow).SprintfFunc() - } - return fmt.Sprintf - }() - - Black = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgBlack).SprintfFunc() - } - return fmt.Sprintf - }() - - FgRed = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgRed).SprintFunc() - } - return fmt.Sprint - }() - - BgRed = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.BgRed).SprintfFunc() - } - return fmt.Sprintf - }() - - FgWhite = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgWhite).SprintfFunc() - } - return fmt.Sprintf - }() -) diff --git a/kubectl-minio/cmd/delete.go b/kubectl-minio/cmd/delete.go deleted file mode 100644 index 6617639aa5f..00000000000 --- a/kubectl-minio/cmd/delete.go +++ /dev/null @@ -1,198 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "bufio" - "fmt" - "io" - "os" - "os/exec" - "strings" - - "sigs.k8s.io/kustomize/api/krusty" - "sigs.k8s.io/kustomize/api/types" - "sigs.k8s.io/yaml" - - "k8s.io/klog/v2" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - "github.com/spf13/cobra" -) - -const ( - deleteDesc = ` -'delete' command delete MinIO Operator along with all the tenants.` - deleteExample = ` kubectl minio delete` -) - -type deleteCmd struct { - out io.Writer - errOut io.Writer - output bool - operatorOpts resources.OperatorOptions - force bool - dangerous bool - retainNS bool -} - -func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command { - o := &deleteCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "delete", - Short: "Delete MinIO Operator and all MinIO tenants", - Long: deleteDesc, - Example: deleteExample, - Args: cobra.MaximumNArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - if !o.force { - if !helpers.Ask("This is irreversible, are you sure you want to delete MinIO Operator and all it's tenants") { - return fmt.Errorf("Aborting MinIO Operator deletion") - } - } - if !o.dangerous { - if !helpers.Ask("Please provide the dangerous flag to confirm deletion") { - return fmt.Errorf("Aborting MinIO Operator deletion") - } - } - err := o.run(out) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&o.operatorOpts.Namespace, "namespace", "n", helpers.DefaultNamespace, "namespace scope for this request") - f.BoolVarP(&o.force, "force", "f", false, "allow without confirmation") - f.BoolVarP(&o.dangerous, "dangerous", "d", false, "confirm deletion") - f.BoolVarP(&o.retainNS, "retain-namespace", "r", false, "retain operator namespace") - return cmd -} - -func (o *deleteCmd) run(writer io.Writer) error { - inMemSys, err := resources.GetResourceFileSys() - if err != nil { - return err - } - - // write the kustomization file - - kustomizationYaml := types.Kustomization{ - TypeMeta: types.TypeMeta{ - Kind: "Kustomization", - APIVersion: "kustomize.config.k8s.io/v1beta1", - }, - Resources: []string{ - "operator/", - }, - } - - if o.operatorOpts.Namespace != "" { - kustomizationYaml.Namespace = o.operatorOpts.Namespace - } - - // Compile the kustomization to a file and create on the in memory filesystem - kustYaml, err := yaml.Marshal(kustomizationYaml) - if err != nil { - return err - } - - kustFile, err := inMemSys.Create("kustomization.yaml") - if err != nil { - return err - } - - _, err = kustFile.Write(kustYaml) - if err != nil { - return err - } - - // kustomize build the target location - k := krusty.MakeKustomizer( - krusty.MakeDefaultOptions(), - ) - - m, err := k.Run(inMemSys, ".") - if err != nil { - return err - } - - // Retain namespace if flag passed - if o.retainNS { - resources := m.Resources() - m.Clear() - for _, res := range resources { - if res.GetName() == o.operatorOpts.Namespace && res.GetKind() == "Namespace" { - continue - } - m.Append(res) - } - } - - yml, err := m.AsYaml() - if err != nil { - return err - } - - if o.output { - _, err = writer.Write(yml) - return err - } - - path, _ := rootCmd.Flags().GetString(kubeconfig) - - parameters := []string{"delete", "-f", "-"} - if path != "" { - parameters = append([]string{"--kubeconfig", path}, parameters...) - } - - // do kubectl apply - cmd := exec.Command("kubectl", parameters...) - - cmd.Stdin = strings.NewReader(string(yml)) - - stdoutReader, _ := cmd.StdoutPipe() - stdoutScanner := bufio.NewScanner(stdoutReader) - go func() { - for stdoutScanner.Scan() { - fmt.Println(stdoutScanner.Text()) - } - }() - stderrReader, _ := cmd.StderrPipe() - stderrScanner := bufio.NewScanner(stderrReader) - go func() { - for stderrScanner.Scan() { - fmt.Println(stderrScanner.Text()) - } - }() - err = cmd.Start() - if err != nil { - fmt.Printf("Error : %v \n", err) - os.Exit(1) - } - err = cmd.Wait() - if err != nil { - fmt.Printf("Error: %v \n", err) - os.Exit(1) - } - - return nil -} diff --git a/kubectl-minio/cmd/helpers/constants.go b/kubectl-minio/cmd/helpers/constants.go deleted file mode 100644 index 1d8cf604cd8..00000000000 --- a/kubectl-minio/cmd/helpers/constants.go +++ /dev/null @@ -1,49 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package helpers - -const ( - // DefaultNamespace is the default namespace for all operations - DefaultNamespace = "minio-operator" - - // DefaultStorageclass is empty so the cluster pick its own native storage class as default - DefaultStorageclass = "" - - // DefaultClusterDomain is the default domain of the Kubernetes cluster - DefaultClusterDomain = "cluster.local" - - // DefaultServiceNameSuffix is the suffix added to tenant name to create the - // internal clusterIP service for this tenant - DefaultServiceNameSuffix = "-internal-service" - - // MinIOMountPath is the path where MinIO related PVs are mounted in a container - MinIOMountPath = "/export" - - // MinIOAccessMode is the default access mode to be used for PVC / PV binding - MinIOAccessMode = "ReadWriteOnce" - - // DefaultOperatorImage is the default operator image to be used - DefaultOperatorImage = "minio/operator:v5.0.10" - - // DefaultTenantImage is the default MinIO image used while creating tenant - DefaultTenantImage = "minio/minio:RELEASE.2023-10-07T15-07-38Z" - - // DefaultKESImage is the default KES image used while creating tenant - DefaultKESImage = "minio/kes:2023-10-03T00-48-37Z" -) - -// KESReplicas is the number of replicas for MinIO KES -var KESReplicas int32 = 2 diff --git a/kubectl-minio/cmd/helpers/helpers.go b/kubectl-minio/cmd/helpers/helpers.go deleted file mode 100644 index 28cc76b5deb..00000000000 --- a/kubectl-minio/cmd/helpers/helpers.go +++ /dev/null @@ -1,291 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package helpers - -import ( - "bytes" - "context" - "io" - "os" - "os/exec" - "regexp" - "strconv" - "strings" - - "k8s.io/client-go/dynamic" - - "github.com/dustin/go-humanize" - "github.com/manifoldco/promptui" - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/spf13/cobra" - apiextension "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/yaml" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - table "github.com/olekukonko/tablewriter" - "github.com/pkg/errors" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" -) - -var ( - validTenantName = regexp.MustCompile(`^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$`) - ipAddress = regexp.MustCompile(`^(\d+\.){3}\d+$`) -) - -// CheckValidTenantName validates if input tenantname complies with expected restrictions. -func CheckValidTenantName(tenantName string) error { - if strings.TrimSpace(tenantName) == "" { - return errors.New("Tenant name cannot be empty") - } - if len(tenantName) > 63 { - return errors.New("Tenant name cannot be longer than 63 characters") - } - if ipAddress.MatchString(tenantName) { - return errors.New("Tenant name cannot be an ip address") - } - if strings.Contains(tenantName, "..") || strings.Contains(tenantName, ".-") || strings.Contains(tenantName, "-.") { - return errors.New("Tenant name contains invalid characters") - } - if !validTenantName.MatchString(tenantName) { - return errors.New("Tenant name contains invalid characters") - } - return nil -} - -// GetKubeClient provides k8s client for kubeconfig -func GetKubeClient(path string) (*kubernetes.Clientset, error) { - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - if path != "" { - loadingRules.ExplicitPath = path - } - configOverrides := &clientcmd.ConfigOverrides{} - kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides) - config, err := kubeConfig.ClientConfig() - if err != nil { - return nil, err - } - - kubeClientset, err := kubernetes.NewForConfig(config) - if err != nil { - return nil, err - } - return kubeClientset, nil -} - -// GetKubeExtensionClient provides k8s client for CRDs -func GetKubeExtensionClient(path string) (*apiextension.Clientset, error) { - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - if path != "" { - loadingRules.ExplicitPath = path - } - configOverrides := &clientcmd.ConfigOverrides{} - kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides) - - config, err := kubeConfig.ClientConfig() - if err != nil { - return nil, err - } - - extClient, err := apiextension.NewForConfig(config) - if err != nil { - return nil, err - } - - return extClient, nil -} - -// GetKubeDynamicClient provides k8s client for CRDs -func GetKubeDynamicClient(path string) (dynamic.Interface, error) { - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - if path != "" { - loadingRules.ExplicitPath = path - } - configOverrides := &clientcmd.ConfigOverrides{} - kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides) - - config, err := kubeConfig.ClientConfig() - if err != nil { - return nil, err - } - - return dynamic.NewForConfig(config) -} - -// GetKubeOperatorClient provides k8s client for operator -func GetKubeOperatorClient(path string) (*operatorv1.Clientset, error) { - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - if path != "" { - loadingRules.ExplicitPath = path - } - configOverrides := &clientcmd.ConfigOverrides{} - kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides) - - config, err := kubeConfig.ClientConfig() - if err != nil { - return nil, err - } - - kubeClientset, err := operatorv1.NewForConfig(config) - if err != nil { - return nil, err - } - return kubeClientset, nil -} - -// ExecKubectl executes the given command using `kubectl` -func ExecKubectl(ctx context.Context, args ...string) ([]byte, error) { - var stdout, stderr, combined bytes.Buffer - - cmd := exec.CommandContext(ctx, "kubectl", args...) - cmd.Stdout = io.MultiWriter(&stdout, &combined) - cmd.Stderr = io.MultiWriter(&stderr, &combined) - if err := cmd.Run(); err != nil { - return nil, errors.Errorf("kubectl command failed (%s). output=%s", err, combined.String()) - } - return stdout.Bytes(), nil -} - -// ServiceName returns the secret name for current tenant -func ServiceName(tenant string) string { - return tenant + DefaultServiceNameSuffix -} - -// VolumesPerServer returns volumes per server -// Volumes has total number of volumes in the tenant. -// volume per server is total volumes / total servers. -// we validate during input to ensure that volumes is a -// multiple of servers. -func VolumesPerServer(volumes, servers int32) int32 { - return volumes / servers -} - -// CapacityPerVolume returns capacity per volume -// capacity has total raw capacity required in MinIO tenant. -// divide total capacity by total drives to extract capacity per -// volume. -func CapacityPerVolume(capacity string, volumes int32) (*resource.Quantity, error) { - totalQuantity, err := resource.ParseQuantity(capacity) - if err != nil { - return nil, err - } - return resource.NewQuantity(totalQuantity.Value()/int64(volumes), totalQuantity.Format), nil -} - -// TotalCapacity returns total capacity of a given tenant -func TotalCapacity(tenant miniov2.Tenant) string { - var totalBytes int64 - for _, z := range tenant.Spec.Pools { - pvcBytes, _ := z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().AsInt64() - totalBytes = totalBytes + (pvcBytes * int64(z.Servers) * int64(z.VolumesPerServer)) - } - return humanize.IBytes(uint64(totalBytes)) -} - -// ToYaml takes a slice of values, and returns corresponding YAML -// representation as a string slice -func ToYaml(objs []runtime.Object) ([]string, error) { - manifests := make([]string, len(objs)) - for i, obj := range objs { - o, err := yaml.Marshal(obj) - if err != nil { - return []string{}, err - } - manifests[i] = string(o) - } - - return manifests, nil -} - -// GetTable returns a formatted instance of the table -func GetTable() *table.Table { - t := table.NewWriter(os.Stdout) - t.SetAutoWrapText(false) - t.SetAutoFormatHeaders(true) - t.SetHeaderAlignment(table.ALIGN_LEFT) - t.SetAlignment(table.ALIGN_LEFT) - t.SetCenterSeparator("") - t.SetColumnSeparator("") - t.SetRowSeparator("") - t.SetHeaderLine(false) - t.SetBorder(false) - t.SetTablePadding("\t") - t.SetNoWhiteSpace(true) - return t -} - -// DisableHelp disables the help command -func DisableHelp(cmd *cobra.Command) *cobra.Command { - cmd.SetHelpCommand(&cobra.Command{ - Use: "no-help", - Hidden: true, - }) - return cmd -} - -// Ask user for Y/N input. Return true if response is "y" -func Ask(label string) bool { - prompt := promptui.Prompt{ - Label: label, - IsConfirm: true, - Default: "n", - } - _, err := prompt.Run() - return err == nil -} - -// AskNumber prompt user for number input -func AskNumber(label string, validate func(int) error) int { - prompt := promptui.Prompt{ - Label: label, - Validate: func(input string) error { - value, err := strconv.Atoi(input) - if err != nil { - return err - } - if validate != nil { - return validate(value) - } - return nil - }, - } - result, err := prompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - r, _ := strconv.Atoi(result) - return r -} - -// AskQuestion ask user for generic input -func AskQuestion(label string, validate func(string) error) string { - prompt := promptui.Prompt{ - Label: label, - Validate: func(input string) error { - if validate != nil { - return validate(input) - } - return nil - }, - } - result, err := prompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - return result -} diff --git a/kubectl-minio/cmd/init.go b/kubectl-minio/cmd/init.go deleted file mode 100644 index 89695e40678..00000000000 --- a/kubectl-minio/cmd/init.go +++ /dev/null @@ -1,372 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "bufio" - "encoding/json" - "fmt" - "io" - "os" - "os/exec" - "strings" - - corev1 "k8s.io/api/core/v1" - - "sigs.k8s.io/kustomize/kyaml/resid" - - "sigs.k8s.io/yaml" - - "sigs.k8s.io/kustomize/api/types" - - "k8s.io/klog/v2" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - "github.com/spf13/cobra" - - "sigs.k8s.io/kustomize/api/krusty" -) - -const ( - operatorInitDesc = ` - 'init' command creates MinIO Operator deployment along with all the dependencies.` - operatorInitExample = ` kubectl minio init` -) - -type operatorInitCmd struct { - out io.Writer - errOut io.Writer - output bool - operatorOpts resources.OperatorOptions -} - -func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command { - o := &operatorInitCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "init", - Short: "Initialize MinIO Operator", - Long: operatorInitDesc, - Example: operatorInitExample, - Args: cobra.MaximumNArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - err := o.run(out) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&o.operatorOpts.Image, "image", "i", helpers.DefaultOperatorImage, "operator image") - f.StringVarP(&o.operatorOpts.Namespace, "namespace", "n", helpers.DefaultNamespace, "namespace scope for this request") - f.StringVarP(&o.operatorOpts.ClusterDomain, "cluster-domain", "d", helpers.DefaultClusterDomain, "cluster domain of the Kubernetes cluster") - f.StringVar(&o.operatorOpts.NSToWatch, "namespace-to-watch", "", "namespace where operator looks for MinIO tenants, leave empty for all namespaces") - f.StringVar(&o.operatorOpts.ImagePullSecret, "image-pull-secret", "", "image pull secret to be used for pulling MinIO Operator") - f.StringVar(&o.operatorOpts.ConsoleImage, "console-image", "", "console image") - f.BoolVar(&o.operatorOpts.ConsoleTLS, "console-tls", false, "enable tls for Operator console") - f.BoolVar(&o.operatorOpts.STS, "sts", false, "enable Operator sts (v1alpha1)") - f.StringVar(&o.operatorOpts.TenantMinIOImage, "default-minio-image", "", "default tenant MinIO image") - f.StringVar(&o.operatorOpts.TenantKesImage, "default-kes-image", "", "default tenant KES image") - f.StringVar(&o.operatorOpts.PrometheusNamespace, "prometheus-namespace", "", "namespace of the prometheus managed by prometheus-operator") - f.StringVar(&o.operatorOpts.PrometheusName, "prometheus-name", "", "name of the prometheus managed by prometheus-operator") - f.BoolVarP(&o.output, "output", "o", false, "dry run this command and generate requisite yaml") - - return cmd -} - -type opStr struct { - Op string `json:"op"` - Path string `json:"path"` - Value string `json:"value"` -} - -type opInterface struct { - Op string `json:"op"` - Path string `json:"path"` - Value interface{} `json:"value"` -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (o *operatorInitCmd) run(writer io.Writer) error { - inMemSys, err := resources.GetResourceFileSys() - if err != nil { - return err - } - - // write the kustomization file - - kustomizationYaml := types.Kustomization{ - TypeMeta: types.TypeMeta{ - Kind: "Kustomization", - APIVersion: "kustomize.config.k8s.io/v1beta1", - }, - Resources: []string{ - "operator/", - }, - PatchesJson6902: []types.Patch{}, - } - - var operatorDepPatches []interface{} - - var consoleDepPatches []interface{} - - // create patches for the supplied arguments - if o.operatorOpts.Image != "" { - operatorDepPatches = append(operatorDepPatches, opStr{ - Op: "replace", - Path: "/spec/template/spec/containers/0/image", - Value: o.operatorOpts.Image, - }) - } - // create an empty array - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env", - Value: []interface{}{}, - }) - - if o.operatorOpts.ClusterDomain != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "CLUSTER_DOMAIN", - Value: o.operatorOpts.ClusterDomain, - }, - }) - } - if o.operatorOpts.NSToWatch != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "WATCHED_NAMESPACE", - Value: o.operatorOpts.NSToWatch, - }, - }) - } - if o.operatorOpts.ConsoleTLS { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "MINIO_CONSOLE_TLS_ENABLE", - Value: "on", - }, - }) - } - if o.operatorOpts.TenantMinIOImage != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "TENANT_MINIO_IMAGE", - Value: o.operatorOpts.TenantMinIOImage, - }, - }) - } - if o.operatorOpts.TenantKesImage != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "TENANT_KES_IMAGE", - Value: o.operatorOpts.TenantKesImage, - }, - }) - } - if o.operatorOpts.ImagePullSecret != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/imagePullSecrets", - Value: []corev1.LocalObjectReference{{Name: o.operatorOpts.ImagePullSecret}}, - }) - consoleDepPatches = append(consoleDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/imagePullSecrets", - Value: []corev1.LocalObjectReference{{Name: o.operatorOpts.ImagePullSecret}}, - }) - } - if o.operatorOpts.PrometheusNamespace != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "PROMETHEUS_NAMESPACE", - Value: o.operatorOpts.PrometheusNamespace, - }, - }) - } - if o.operatorOpts.PrometheusName != "" { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "PROMETHEUS_NAME", - Value: o.operatorOpts.PrometheusName, - }, - }) - } - if o.operatorOpts.ConsoleImage != "" { - consoleDepPatches = append(consoleDepPatches, opStr{ - Op: "replace", - Path: "/spec/template/spec/containers/0/image", - Value: o.operatorOpts.ConsoleImage, - }) - } - if o.operatorOpts.STS { - operatorDepPatches = append(operatorDepPatches, opInterface{ - Op: "add", - Path: "/spec/template/spec/containers/0/env/0", - Value: corev1.EnvVar{ - Name: "OPERATOR_STS_ENABLED", - Value: "on", - }, - }) - } - // attach the patches to the kustomization file - if len(operatorDepPatches) > 0 { - kustomizationYaml.PatchesJson6902 = append(kustomizationYaml.PatchesJson6902, types.Patch{ - Patch: o.serializeJSONPatchOps(operatorDepPatches), - Target: &types.Selector{ - ResId: resid.ResId{ - Gvk: resid.Gvk{ - Group: "apps", - Version: "v1", - Kind: "Deployment", - }, - Name: "minio-operator", - }, - }, - }) - } - - if len(consoleDepPatches) > 0 { - kustomizationYaml.PatchesJson6902 = append(kustomizationYaml.PatchesJson6902, types.Patch{ - Patch: o.serializeJSONPatchOps(consoleDepPatches), - Target: &types.Selector{ - ResId: resid.ResId{ - Gvk: resid.Gvk{ - Group: "apps", - Version: "v1", - Kind: "Deployment", - }, - Name: "console", - }, - }, - }) - } - - if o.operatorOpts.Namespace != "" { - kustomizationYaml.Namespace = o.operatorOpts.Namespace - } - // Compile the kustomization to a file and create on the in memory filesystem - kustYaml, err := yaml.Marshal(kustomizationYaml) - if err != nil { - return err - } - - kustFile, err := inMemSys.Create("kustomization.yaml") - if err != nil { - return err - } - - _, err = kustFile.Write(kustYaml) - if err != nil { - return err - } - - // kustomize build the target location - k := krusty.MakeKustomizer( - krusty.MakeDefaultOptions(), - ) - - m, err := k.Run(inMemSys, ".") - if err != nil { - return err - } - - yml, err := m.AsYaml() - if err != nil { - return err - } - - if o.output { - _, err = writer.Write(yml) - return err - } - - path, _ := rootCmd.Flags().GetString(kubeconfig) - - parameters := []string{"apply", "-f", "-"} - if path != "" { - parameters = append([]string{"--kubeconfig", path}, parameters...) - } - // do kubectl apply - cmd := exec.Command("kubectl", parameters...) - - cmd.Stdin = strings.NewReader(string(yml)) - - stdoutReader, _ := cmd.StdoutPipe() - stdoutScanner := bufio.NewScanner(stdoutReader) - go func() { - for stdoutScanner.Scan() { - fmt.Println(stdoutScanner.Text()) - } - }() - stderrReader, _ := cmd.StderrPipe() - stderrScanner := bufio.NewScanner(stderrReader) - go func() { - for stderrScanner.Scan() { - fmt.Println(stderrScanner.Text()) - } - }() - err = cmd.Start() - if err != nil { - fmt.Printf("Error : %v \n", err) - os.Exit(1) - } - err = cmd.Wait() - if err != nil { - fmt.Printf("Error: %v \n", err) - os.Exit(1) - } - - // since we did an explicit deployment of resources, let's show a message telling users how to connect to console - fmt.Println("-----------------") - fmt.Println("") - fmt.Println("To open Operator UI, start a port forward using this command:") - fmt.Println("") - if o.operatorOpts.Namespace != "" { - fmt.Printf("kubectl minio proxy -n %s \n", o.operatorOpts.Namespace) - } else { - fmt.Println("kubectl minio proxy") - } - - fmt.Println("") - fmt.Println("-----------------") - - return nil -} - -func (o *operatorInitCmd) serializeJSONPatchOps(jp []interface{}) string { - jpJSON, _ := json.Marshal(jp) - return string(jpJSON) -} diff --git a/kubectl-minio/cmd/kubectl-minio.go b/kubectl-minio/cmd/kubectl-minio.go deleted file mode 100644 index a513cb56347..00000000000 --- a/kubectl-minio/cmd/kubectl-minio.go +++ /dev/null @@ -1,61 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "log" - - "github.com/spf13/cobra" - "k8s.io/cli-runtime/pkg/genericclioptions" - - // Workaround for auth import issues refer https://github.com/minio/operator/issues/283 - _ "k8s.io/client-go/plugin/pkg/client/auth" - - // Statik CRD assets for our plugin - "github.com/minio/kubectl-minio/cmd/helpers" -) - -const ( - minioDesc = `Manage and deploy MinIO object storage tenants on k8s` - kubeconfig = "kubeconfig" -) - -var ( - confPath string - rootCmd = &cobra.Command{ - Use: "minio", - Long: minioDesc, - SilenceUsage: true, - } -) - -func init() { - rootCmd.PersistentFlags().StringVar(&confPath, kubeconfig, "", "Custom kubeconfig path") - - log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) -} - -// New creates a new root command for kubectl-minio -func New(_ genericclioptions.IOStreams) *cobra.Command { - rootCmd = helpers.DisableHelp(rootCmd) - cobra.EnableCommandSorting = false - rootCmd.AddCommand(newInitCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) - rootCmd.AddCommand(newProxyCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) - rootCmd.AddCommand(newTenantCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) - rootCmd.AddCommand(newDeleteCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) - rootCmd.AddCommand(newVersionCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) - return rootCmd -} diff --git a/kubectl-minio/cmd/proxy.go b/kubectl-minio/cmd/proxy.go deleted file mode 100644 index c04230588d3..00000000000 --- a/kubectl-minio/cmd/proxy.go +++ /dev/null @@ -1,217 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "errors" - "fmt" - "io" - "log" - "os/exec" - "strings" - "sync" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog/v2" - - "github.com/fatih/color" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - "github.com/spf13/cobra" -) - -const ( - operatorProxyDesc = ` -'proxy' command starts a port-forward with the operator UI.` - operatorProxyExample = ` kubectl minio proxy` -) - -type operatorProxyCmd struct { - out io.Writer - errOut io.Writer - operatorOpts resources.OperatorOptions -} - -func newProxyCmd(out io.Writer, errOut io.Writer) *cobra.Command { - o := &operatorProxyCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "proxy", - Short: "Open a port-forward to Console UI", - Long: operatorProxyDesc, - Example: operatorProxyExample, - Args: cobra.MaximumNArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - err := o.run() - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - f := cmd.Flags() - f.StringVarP(&o.operatorOpts.Namespace, "namespace", "n", helpers.DefaultNamespace, "namespace scope for this request") - - return cmd -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (o *operatorProxyCmd) run() error { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // kubectl get secret $(kubectl get serviceaccount console-sa -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode | pbcopy - - path, _ := rootCmd.Flags().GetString(kubeconfig) - client, err := helpers.GetKubeClient(path) - if err != nil { - return err - } - - sa, err := client.CoreV1().ServiceAccounts(o.operatorOpts.Namespace).Get(ctx, "console-sa", metav1.GetOptions{}) - if err != nil { - return err - } - - secretName := "" - - // Openshift doesn't create the token with the name "console-sa-secret" instead it creates a "console-sa-token-{random id}" secret - // This section is to find that token and get the actual secret containing the JWT token to use and authenticate - secrets, err := client.CoreV1().Secrets(o.operatorOpts.Namespace).List(ctx, metav1.ListOptions{}) - if err != nil { - return err - } - - for _, secret := range secrets.Items { - if strings.HasPrefix(secret.Name, "console-sa-token") { - secretName = secret.Name - } - } - - // If no secret was found previously, is a more vanilla kubernetes setup, here we try to find the secret containing the sa token - if secretName == "" { - secretName = "console-sa-secret" - if len(sa.Secrets) > 0 { - secretName = sa.Secrets[0].Name - } - } - - secret, err := client.CoreV1().Secrets(o.operatorOpts.Namespace).Get(ctx, secretName, metav1.GetOptions{}) - if err != nil { - return err - } - - var jwtToken []byte - var ok bool - - if jwtToken, ok = secret.Data["token"]; !ok { - return errors.New("Couldn't determine JWT to connect to console") - } - - fmt.Println("Starting port forward of the Console UI.") - fmt.Println("") - fmt.Println("To connect open a browser and go to http://localhost:9090") - fmt.Println("") - fmt.Println("Current JWT to login:", string(jwtToken)) - fmt.Println("") - - consolePFCh := servicePortForwardPort(ctx, o.operatorOpts.Namespace, "console", "9090", color.FgGreen) - - <-consolePFCh - - return nil -} - -// run the command inside a goroutine, return a channel that closes then the command dies -func servicePortForwardPort(ctx context.Context, namespace, service, port string, dcolor color.Attribute) chan interface{} { - ch := make(chan interface{}) - go func() { - defer close(ch) - // service we are going to forward - serviceName := fmt.Sprintf("service/%s", service) - path, _ := rootCmd.Flags().GetString(kubeconfig) - parameters := []string{"port-forward", "--address", "0.0.0.0", "-n", namespace, serviceName, port} - if path != "" { - parameters = append([]string{"--kubeconfig", path}, parameters...) - } - // command to run - cmd := exec.CommandContext(ctx, "kubectl", parameters...) - // prepare to capture the output - var errStdout, errStderr error - stdoutIn, _ := cmd.StdoutPipe() - stderrIn, _ := cmd.StderrPipe() - err := cmd.Start() - if err != nil { - log.Fatalf("cmd.Start() failed with '%s'\n", err) - } - - // cmd.Wait() should be called only after we finish reading - // from stdoutIn and stderrIn. - // wg ensures that we finish - var wg sync.WaitGroup - wg.Add(1) - go func() { - errStdout = copyAndCapture(stdoutIn, dcolor) - wg.Done() - }() - - errStderr = copyAndCapture(stderrIn, dcolor) - - wg.Wait() - - err = cmd.Wait() - if err != nil { - log.Printf("cmd.Run() failed with %s\n", err.Error()) - return - } - if errStdout != nil || errStderr != nil { - log.Printf("failed to capture stdout or stderr\n") - return - } - // outStr, errStr := string(stdout), string(stderr) - // fmt.Printf("\nout:\n%s\nerr:\n%s\n", outStr, errStr) - }() - return ch -} - -// capture and print the output of the command -func copyAndCapture(r io.Reader, dcolor color.Attribute) error { - var out []byte - buf := make([]byte, 1024) - for { - n, err := r.Read(buf[:]) - if n > 0 { - d := buf[:n] - out = append(out, d...) - theColor := color.New(dcolor) - //_, err := w.Write(d) - _, err := theColor.Print(string(d)) - if err != nil { - return err - } - } - if err != nil { - // Read returns io.EOF at the end of file, which is not an error for us - if err == io.EOF { - err = nil - } - return err - } - } -} diff --git a/kubectl-minio/cmd/resources/common.go b/kubectl-minio/cmd/resources/common.go deleted file mode 100644 index 2e991b62c8b..00000000000 --- a/kubectl-minio/cmd/resources/common.go +++ /dev/null @@ -1,210 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package resources - -import ( - "fmt" - "io" - "io/fs" - "log" - "path" - "strings" - - "sigs.k8s.io/kustomize/kyaml/filesys" - - "github.com/minio/operator/resources" - - "k8s.io/apimachinery/pkg/runtime/schema" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - rbacv1 "k8s.io/api/rbac/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer" - - // Workaround for auth import issues refer https://github.com/minio/operator/issues/283 - _ "k8s.io/client-go/plugin/pkg/client/auth" - - "k8s.io/client-go/scale/scheme" - - "github.com/minio/kubectl-minio/cmd/helpers" - apiextensionv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" -) - -var resourcesFS = resources.GetStaticResources() - -func tenantStorage(q resource.Quantity) corev1.ResourceList { - m := make(corev1.ResourceList, 1) - m[corev1.ResourceStorage] = q - return m -} - -// Pool returns a Pool object from given values -func Pool(opts *TenantOptions, volumes int32, q resource.Quantity) miniov2.Pool { - p := miniov2.Pool{ - Name: opts.PoolName, - Servers: opts.Servers, - VolumesPerServer: volumes, - VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ - TypeMeta: metav1.TypeMeta{ - Kind: corev1.ResourcePersistentVolumeClaims.String(), - APIVersion: corev1.SchemeGroupVersion.Version, - }, - Spec: corev1.PersistentVolumeClaimSpec{ - AccessModes: []corev1.PersistentVolumeAccessMode{helpers.MinIOAccessMode}, - Resources: corev1.ResourceRequirements{ - Requests: tenantStorage(q), - }, - }, - }, - } - // only pass the storage class if specified - if opts.StorageClass != "" { - p.VolumeClaimTemplate.Spec.StorageClassName = storageClass(opts.StorageClass) - } - if !opts.DisableAntiAffinity { - p.Affinity = &corev1.Affinity{ - PodAntiAffinity: &corev1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{ - { - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{{ - Key: miniov2.TenantLabel, - Operator: "In", - Values: []string{opts.Name}, - }}, - }, - TopologyKey: "kubernetes.io/hostname", - }, - }, - }, - } - } - return p -} - -// GeneratePoolName Pool Name Generator -func GeneratePoolName(poolNumber int) string { - return fmt.Sprintf("pool-%d", poolNumber) -} - -// GetSchemeDecoder returns a decoder for the scheme's that we use -func GetSchemeDecoder() func(data []byte, defaults *schema.GroupVersionKind, into runtime.Object) (runtime.Object, *schema.GroupVersionKind, error) { - sch := runtime.NewScheme() - scheme.AddToScheme(sch) - apiextensionv1.AddToScheme(sch) - appsv1.AddToScheme(sch) - rbacv1.AddToScheme(sch) - corev1.AddToScheme(sch) - decode := serializer.NewCodecFactory(sch).UniversalDeserializer().Decode - return decode -} - -// LoadTenantCRD loads tenant crds as k8s runtime object. -func LoadTenantCRD(decode func(data []byte, defaults *schema.GroupVersionKind, into runtime.Object) (runtime.Object, *schema.GroupVersionKind, error)) *apiextensionv1.CustomResourceDefinition { - contents, err := resourcesFS.Open("base/crds/minio.min.io_tenants.yaml") - if err != nil { - log.Fatal(err) - } - contentBytes, err := io.ReadAll(contents) - if err != nil { - log.Fatal(err) - } - - obj, _, err := decode(contentBytes, nil, nil) - if err != nil { - log.Fatal(err) - } - - var ok bool - crdObj, ok := obj.(*apiextensionv1.CustomResourceDefinition) - if !ok { - log.Fatal("Unable to locate CustomResourceDefinition object") - } - return crdObj -} - -// GetResourceFileSys file -func GetResourceFileSys() (filesys.FileSystem, error) { - inMemSys := filesys.MakeFsInMemory() - // copy from the resources into the target folder on the in memory FS - if err := copyDirtoMemFS(".", "operator", inMemSys); err != nil { - log.Println(err) - return nil, err - } - return inMemSys, nil -} - -func copyFileToMemFS(src, dst string, memFS filesys.FileSystem) error { - // skip .go files - if strings.HasSuffix(src, ".go") { - return nil - } - var err error - var srcFileDesc fs.File - var dstFileDesc filesys.File - - if srcFileDesc, err = resourcesFS.Open(src); err != nil { - return err - } - defer srcFileDesc.Close() - - if dstFileDesc, err = memFS.Create(dst); err != nil { - return err - } - defer dstFileDesc.Close() - - // Note: I had to read the whole string, for some reason io.Copy was not copying the whole content - input, err := io.ReadAll(srcFileDesc) - if err != nil { - return err - } - - _, err = dstFileDesc.Write(input) - return err -} - -func copyDirtoMemFS(src string, dst string, memFS filesys.FileSystem) error { - var err error - var fds []fs.DirEntry - - if err = memFS.MkdirAll(dst); err != nil { - return err - } - - if fds, err = resourcesFS.ReadDir(src); err != nil { - return err - } - for _, fd := range fds { - srcfp := path.Join(src, fd.Name()) - dstfp := path.Join(dst, fd.Name()) - - if fd.IsDir() { - if err = copyDirtoMemFS(srcfp, dstfp, memFS); err != nil { - return err - } - } else { - if err = copyFileToMemFS(srcfp, dstfp, memFS); err != nil { - return err - } - } - } - return nil -} diff --git a/kubectl-minio/cmd/resources/deployment.go b/kubectl-minio/cmd/resources/deployment.go deleted file mode 100644 index e8204b0a85d..00000000000 --- a/kubectl-minio/cmd/resources/deployment.go +++ /dev/null @@ -1,34 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package resources - -// OperatorOptions encapsulates the CLI options for a MinIO Operator -type OperatorOptions struct { - Name string - Image string - Namespace string - NSToWatch string - ClusterDomain string - ImagePullSecret string - ConsoleImage string - ConsoleTLS bool - TenantMinIOImage string - TenantConsoleImage string - TenantKesImage string - PrometheusNamespace string - PrometheusName string - STS bool -} diff --git a/kubectl-minio/cmd/resources/secret.go b/kubectl-minio/cmd/resources/secret.go deleted file mode 100644 index 39b3473db34..00000000000 --- a/kubectl-minio/cmd/resources/secret.go +++ /dev/null @@ -1,70 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package resources - -import ( - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// NewTenantConfigurationSecret will return a new secret a MinIO Tenant -func NewTenantConfigurationSecret(opts *TenantOptions) (*corev1.Secret, error) { - accessKey, secretKey, err := miniov2.GenerateCredentials() - if err != nil { - return nil, err - } - tenantConfiguration := map[string]string{ - "MINIO_ROOT_USER": accessKey, - "MINIO_ROOT_PASSWORD": secretKey, - } - return &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: opts.ConfigurationSecretName, - Namespace: opts.NS, - }, - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: v1.SchemeGroupVersion.Version, - }, - Data: map[string][]byte{ - "config.env": []byte(miniov2.GenerateTenantConfigurationFile(tenantConfiguration)), - }, - }, nil -} - -// NewUserCredentialsSecret will return a new secret a MinIO Tenant Console -func NewUserCredentialsSecret(opts *TenantOptions, secretName string) (*corev1.Secret, error) { - accessKey, secretKey, err := miniov2.GenerateCredentials() - if err != nil { - return nil, err - } - return &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: secretName, - Namespace: opts.NS, - }, - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: v1.SchemeGroupVersion.Version, - }, - Data: map[string][]byte{ - "CONSOLE_ACCESS_KEY": []byte(accessKey), - "CONSOLE_SECRET_KEY": []byte(secretKey), - }, - }, nil -} diff --git a/kubectl-minio/cmd/resources/tenant.go b/kubectl-minio/cmd/resources/tenant.go deleted file mode 100644 index 69e3b81bcb7..00000000000 --- a/kubectl-minio/cmd/resources/tenant.go +++ /dev/null @@ -1,162 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package resources - -import ( - "errors" - - "github.com/minio/kubectl-minio/cmd/helpers" - operator "github.com/minio/operator/pkg/apis/minio.min.io" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// TenantOptions encapsulates the CLI options for a MinIO Tenant -type TenantOptions struct { - Name string - PoolName string - ConfigurationSecretName string - Servers int32 - Volumes int32 - Capacity string - NS string - Image string - KesImage string - StorageClass string - KmsSecret string - ConsoleSecret string - DisableTLS bool - ImagePullSecret string - DisableAntiAffinity bool - ExposeMinioService bool - ExposeConsoleService bool - EnableSFTP bool - - Interactive bool -} - -// Validate Tenant Options -func (t TenantOptions) Validate() error { - if t.Servers <= 0 { - return errors.New("--servers is required. Specify a value greater than or equal to 1") - } - if t.Volumes <= 0 { - return errors.New("--volumes is required. Specify a positive value") - } - if t.Capacity == "" { - return errors.New("--capacity flag is required") - } - _, err := resource.ParseQuantity(t.Capacity) - if err != nil { - if err == resource.ErrFormatWrong { - return errors.New("--capacity flag is incorrectly formatted. Please use suffix like 'T' or 'Ti' only") - } - return err - } - if t.Volumes%t.Servers != 0 { - return errors.New("--volumes should be a multiple of --servers") - } - return nil -} - -func tenantKESLabels(name string) map[string]string { - m := make(map[string]string, 1) - m["app"] = name + "-kes" - return m -} - -func tenantKESConfig(tenant, secret, kesImage string) *miniov2.KESConfig { - if secret != "" { - return &miniov2.KESConfig{ - Replicas: helpers.KESReplicas, - Image: kesImage, - Configuration: &v1.LocalObjectReference{ - Name: secret, - }, - Labels: tenantKESLabels(tenant), - } - } - return nil -} - -func storageClass(sc string) *string { - if sc != "" { - return &sc - } - return nil -} - -// NewTenant will return a new Tenant for a MinIO Operator -func NewTenant(opts *TenantOptions, userSecret *v1.Secret) (*miniov2.Tenant, error) { - autoCert := !opts.DisableTLS - volumesPerServer := helpers.VolumesPerServer(opts.Volumes, opts.Servers) - capacityPerVolume, err := helpers.CapacityPerVolume(opts.Capacity, opts.Volumes) - if err != nil { - return nil, err - } - - t := &miniov2.Tenant{ - TypeMeta: metav1.TypeMeta{ - Kind: "Tenant", - APIVersion: operator.GroupName + "/" + miniov2.Version, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: opts.Name, - Namespace: opts.NS, - }, - Spec: miniov2.TenantSpec{ - Image: opts.Image, - Configuration: &v1.LocalObjectReference{ - Name: opts.ConfigurationSecretName, - }, - ExposeServices: &miniov2.ExposeServices{ - Console: opts.ExposeConsoleService, - MinIO: opts.ExposeMinioService, - }, - Pools: []miniov2.Pool{Pool(opts, volumesPerServer, *capacityPerVolume)}, - RequestAutoCert: &autoCert, - Mountpath: helpers.MinIOMountPath, - KES: tenantKESConfig(opts.Name, opts.KmsSecret, opts.KesImage), - ImagePullSecret: v1.LocalObjectReference{Name: opts.ImagePullSecret}, - Users: []*v1.LocalObjectReference{ - { - Name: userSecret.Name, - }, - }, - Features: &miniov2.Features{ - EnableSFTP: &opts.EnableSFTP, - }, - }, - } - - if autoCert { - t.Spec.CertConfig = getAutoCertConfig(opts) - } - - t.EnsureDefaults() - - return t, t.Validate() -} - -func getAutoCertConfig(_ *TenantOptions) *miniov2.CertificateConfig { - return &miniov2.CertificateConfig{ - CommonName: "", - OrganizationName: []string{}, - DNSNames: []string{}, - } -} diff --git a/kubectl-minio/cmd/tenant-create.go b/kubectl-minio/cmd/tenant-create.go deleted file mode 100644 index 1679a8c0503..00000000000 --- a/kubectl-minio/cmd/tenant-create.go +++ /dev/null @@ -1,265 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "errors" - "fmt" - "io" - "strconv" - "strings" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/minio/operator/pkg/resources/services" - "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/klog/v2" - "sigs.k8s.io/yaml" -) - -const ( - createDesc = ` -'create' command creates a new MinIO tenant` - createExample = ` kubectl minio tenant create tenant1 --servers 4 --volumes 16 --capacity 16Ti --namespace tenant1-ns` -) - -type createCmd struct { - out io.Writer - errOut io.Writer - output bool - tenantOpts resources.TenantOptions -} - -func newTenantCreateCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &createCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "create --pool --servers --volumes --capacity --namespace ", - Short: "Create a MinIO tenant", - Long: createDesc, - Example: createExample, - Args: func(cmd *cobra.Command, args []string) error { - // The disable-tls parameter default value is false, we cannot rely on the default value binded to the tenantOpts.DisableTLS variable - // to identify if the parameter --disable-tls was actually set on the command line. - // regardless of which value is being set to the flag, if the flag and ONLY if the flag is present, then we disable TLS - c.tenantOpts.DisableTLS = cmd.Flags().Lookup("disable-tls").Changed - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.tenantOpts.PoolName, "pool", "p", "", "name for this pool") - f.Int32Var(&c.tenantOpts.Servers, "servers", 0, "total number of pods in MinIO tenant") - f.Int32Var(&c.tenantOpts.Volumes, "volumes", 0, "total number of volumes in the MinIO tenant") - f.StringVar(&c.tenantOpts.Capacity, "capacity", "", "total raw capacity of MinIO tenant in this pool, e.g. 16Ti") - f.StringVarP(&c.tenantOpts.NS, "namespace", "n", "", "k8s namespace for this MinIO tenant") - f.StringVarP(&c.tenantOpts.StorageClass, "storage-class", "s", helpers.DefaultStorageclass, "storage class for this MinIO tenant") - f.StringVarP(&c.tenantOpts.Image, "image", "i", helpers.DefaultTenantImage, "custom MinIO image for this tenant") - f.StringVarP(&c.tenantOpts.KesImage, "kes-image", "", helpers.DefaultKESImage, "custom KES image for this tenant") - f.StringVarP(&c.tenantOpts.ImagePullSecret, "image-pull-secret", "", "", "image pull secret to be used for pulling MinIO") - f.BoolVar(&c.tenantOpts.DisableAntiAffinity, "enable-host-sharing", false, "[TESTING-ONLY] disable anti-affinity to allow pods to be co-located on a single node (unsupported in production environment)") - f.StringVar(&c.tenantOpts.KmsSecret, "kes-config", "", "name of secret for KES KMS setup, refer https://github.com/minio/operator/blob/master/examples/kes-secret.yaml") - f.BoolVar(&c.tenantOpts.DisableTLS, "disable-tls", false, "Disable TLS") - f.BoolVarP(&c.output, "output", "o", false, "generate tenant yaml for 'kubectl apply -f tenant.yaml'") - f.BoolVar(&c.tenantOpts.Interactive, "interactive", false, "Create tenant in interactive mode") - f.BoolVar(&c.tenantOpts.ExposeMinioService, "expose-minio-service", false, "Enable/Disable expose the Minio Service") - f.BoolVar(&c.tenantOpts.ExposeConsoleService, "expose-console-service", false, "Enable/Disable expose the Console service") - f.BoolVar(&c.tenantOpts.EnableSFTP, "enable-sftp", false, "Enable/Disable SFTP access to the tenant") - return cmd -} - -func (c *createCmd) validate(args []string) error { - if c.tenantOpts.Interactive { - return nil - } - if args == nil { - return errors.New("create command requires specifying the tenant name as an argument, e.g. 'kubectl minio tenant create tenant1'") - } - if len(args) != 1 { - return errors.New("create command requires specifying the tenant name as an argument, e.g. 'kubectl minio tenant create tenant1'") - } - if args[0] == "" { - return errors.New("create command requires specifying the tenant name as an argument, e.g. 'kubectl minio tenant create tenant1'") - } - // Tenant name should have DNS token restrictions - if err := helpers.CheckValidTenantName(args[0]); err != nil { - return err - } - c.tenantOpts.Name = args[0] - c.tenantOpts.ConfigurationSecretName = fmt.Sprintf("%s-env-configuration", c.tenantOpts.Name) - if c.tenantOpts.NS == "" { - return errors.New("--namespace flag is required") - } - return c.tenantOpts.Validate() -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (c *createCmd) run(_ []string) error { - // Create operator and kube client - path, _ := rootCmd.Flags().GetString(kubeconfig) - operatorClient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - kubeClient, err := helpers.GetKubeClient(path) - if err != nil { - return err - } - if c.tenantOpts.Interactive { - if err := c.populateInteractiveTenant(); err != nil { - return err - } - } - // Generate MinIO user credentials - tenantUserCredentials, err := resources.NewUserCredentialsSecret(&c.tenantOpts, fmt.Sprintf("%s-user-1", c.tenantOpts.Name)) - if err != nil { - return err - } - // generate tenant configuration - tenantConfiguration, err := resources.NewTenantConfigurationSecret(&c.tenantOpts) - if err != nil { - return err - } - // generate tenant resource - tenant, err := resources.NewTenant(&c.tenantOpts, tenantUserCredentials) - if err != nil { - return err - } - // create resources - if !c.output { - return createTenant(operatorClient, kubeClient, tenant, tenantConfiguration, tenantUserCredentials) - } - tenantYAML, err := yaml.Marshal(&tenant) - if err != nil { - return err - } - tenantConfigurationYAML, err := yaml.Marshal(&tenantConfiguration) - if err != nil { - return err - } - tenantUserYAML, err := yaml.Marshal(&tenantUserCredentials) - if err != nil { - return err - } - fmt.Println(string(tenantYAML)) - fmt.Println("---") - fmt.Println(string(tenantConfigurationYAML)) - fmt.Println("---") - fmt.Println(string(tenantUserYAML)) - return nil -} - -func (c *createCmd) populateInteractiveTenant() error { - c.tenantOpts.Name = helpers.AskQuestion("Tenant name", helpers.CheckValidTenantName) - c.tenantOpts.ConfigurationSecretName = fmt.Sprintf("%s-env-configuration", c.tenantOpts.Name) - c.tenantOpts.Servers = int32(helpers.AskNumber("Total of servers", greaterThanZero)) - c.tenantOpts.Volumes = int32(helpers.AskNumber("Total of volumes", greaterThanZero)) - c.tenantOpts.NS = helpers.AskQuestion("Namespace", validateEmptyInput) - c.tenantOpts.Capacity = helpers.AskQuestion("Capacity", validateCapacity) - if err := c.tenantOpts.Validate(); err != nil { - return err - } - c.tenantOpts.DisableTLS = helpers.Ask("Disable TLS") - c.tenantOpts.ExposeMinioService = helpers.Ask("Expose Minio Service") - c.tenantOpts.ExposeConsoleService = helpers.Ask("Expose Console Service") - c.tenantOpts.EnableSFTP = helpers.Ask("Enable SFTP") - return nil -} - -func validateEmptyInput(value string) error { - if value == "" { - return errors.New("value can't be empty") - } - return nil -} - -func validateCapacity(value string) error { - if err := validateEmptyInput(value); err != nil { - return err - } - _, err := resource.ParseQuantity(value) - return err -} - -func greaterThanZero(value int) error { - if value <= 0 { - return errors.New("value needs to be greater than zero") - } - return nil -} - -func createTenant(operatorClient *operatorv1.Clientset, kubeClient *kubernetes.Clientset, tenant *miniov2.Tenant, tenantConfiguration, console *corev1.Secret) error { - if _, err := kubeClient.CoreV1().Namespaces().Get(context.Background(), tenant.Namespace, metav1.GetOptions{}); err != nil { - return fmt.Errorf("namespace %s not found, please create the namespace using 'kubectl create ns %s'", tenant.Namespace, tenant.Namespace) - } - if _, err := kubeClient.CoreV1().Secrets(tenant.Namespace).Create(context.Background(), tenantConfiguration, metav1.CreateOptions{}); err != nil { - return err - } - if _, err := kubeClient.CoreV1().Secrets(tenant.Namespace).Create(context.Background(), console, metav1.CreateOptions{}); err != nil { - return err - } - to, err := operatorClient.MinioV2().Tenants(tenant.Namespace).Create(context.Background(), tenant, v1.CreateOptions{}) - if err != nil { - return err - } - // Check MinIO S3 Endpoint Service - minSvc := services.NewClusterIPForMinIO(to) - - // Check MinIO Console Endpoint Service - conSvc := services.NewClusterIPForConsole(to) - - if IsTerminal() { - printBanner(to.ObjectMeta.Name, to.ObjectMeta.Namespace, string(console.Data["CONSOLE_ACCESS_KEY"]), string(console.Data["CONSOLE_SECRET_KEY"]), - minSvc, conSvc) - } - return nil -} - -func printBanner(tenantName, ns, user, pwd string, s, c *corev1.Service) { - fmt.Printf(Bold(fmt.Sprintf("\nTenant '%s' created in '%s' Namespace\n\n", tenantName, ns))) - fmt.Printf(Blue(" Username: %s \n", user)) - fmt.Printf(Blue(" Password: %s \n", pwd)) - fmt.Printf(Blue(" Note: Copy the credentials to a secure location. MinIO will not display these again.\n\n")) - var minPorts, consolePorts string - for _, p := range s.Spec.Ports { - minPorts = minPorts + strconv.Itoa(int(p.Port)) + "," - } - for _, p := range c.Spec.Ports { - consolePorts = consolePorts + strconv.Itoa(int(p.Port)) + "," - } - t := helpers.GetTable() - t.SetHeader([]string{"Application", "Service Name", "Namespace", "Service Type", "Service Port"}) - t.Append([]string{"MinIO", s.Name, ns, "ClusterIP", strings.TrimSuffix(minPorts, ",")}) - t.Append([]string{"Console", c.Name, ns, "ClusterIP", strings.TrimSuffix(consolePorts, ",")}) - t.Render() - fmt.Println() -} diff --git a/kubectl-minio/cmd/tenant-delete.go b/kubectl-minio/cmd/tenant-delete.go deleted file mode 100644 index 8546ca4ce48..00000000000 --- a/kubectl-minio/cmd/tenant-delete.go +++ /dev/null @@ -1,122 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020 MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "fmt" - "io" - - "github.com/minio/kubectl-minio/cmd/helpers" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/klog/v2" - - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/spf13/cobra" -) - -type tenantDeleteCmd struct { - out io.Writer - errOut io.Writer - ns string - force bool -} - -func newTenantDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &tenantDeleteCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "delete --namespace ", - Short: "Delete a MinIO tenant", - Long: deleteDesc, - Example: deleteExample, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - if !c.force { - if !helpers.Ask(fmt.Sprintf("This will delete the Tenant %s and ALL its data. Do you want to proceed", args[0])) { - return fmt.Errorf(Bold("Aborting Tenant deletion")) - } - } - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.ns, "namespace", "n", "", "namespace scope for this request") - f.BoolVarP(&c.force, "force", "f", false, "force delete the tenant") - cmd.MarkFlagRequired("namespace") - - return cmd -} - -func (d *tenantDeleteCmd) validate(args []string) error { - return validateTenantArgs("delete", args) -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (d *tenantDeleteCmd) run(args []string) error { - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - kclient, err := helpers.GetKubeClient(path) - if err != nil { - return err - } - for _, arg := range args { - if err = deleteTenant(oclient, kclient, d, arg); err != nil { - return err - } - } - return nil -} - -func deleteTenant(client *operatorv1.Clientset, kclient *kubernetes.Clientset, d *tenantDeleteCmd, name string) error { - tenant, err := client.MinioV2().Tenants(d.ns).Get(context.Background(), name, metav1.GetOptions{}) - if err != nil { - return err - } - - if err := client.MinioV2().Tenants(d.ns).Delete(context.Background(), name, v1.DeleteOptions{}); err != nil { - return err - } - - fmt.Println("Deleting MinIO Tenant: ", name) - - if tenant.HasConfigurationSecret() { - kclient.CoreV1().Secrets(d.ns).Delete(context.Background(), tenant.Spec.Configuration.Name, - metav1.DeleteOptions{}) - fmt.Println("Deleting MinIO Tenant Configuration Secret: ", tenant.Spec.Configuration.Name) - } - - // Delete all users, ignore any errors. - for _, user := range tenant.Spec.Users { - kclient.CoreV1().Secrets(d.ns).Delete(context.Background(), user.Name, metav1.DeleteOptions{}) - fmt.Println("Deleting MinIO Tenant user: ", user.Name) - } - - return nil -} diff --git a/kubectl-minio/cmd/tenant-events.go b/kubectl-minio/cmd/tenant-events.go deleted file mode 100644 index 6521ea8d1d6..00000000000 --- a/kubectl-minio/cmd/tenant-events.go +++ /dev/null @@ -1,179 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2022, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "encoding/json" - "fmt" - "io" - "time" - - "github.com/minio/kubectl-minio/cmd/helpers" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/olekukonko/tablewriter" - "github.com/spf13/cobra" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/duration" - "k8s.io/klog/v2" - "sigs.k8s.io/yaml" -) - -const ( - eventsDesc = `'events' command displays tenant events` -) - -type eventsCmd struct { - out io.Writer - errOut io.Writer - ns string - yamlOutput bool - jsonOutput bool -} - -func newTenantEventsCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &eventsCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "events ", - Short: "Display tenant events", - Long: eventsDesc, - Example: ` kubectl minio events tenant1`, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.ns, "namespace", "n", "", "namespace scope for this request") - f.BoolVarP(&c.yamlOutput, "yaml", "y", false, "yaml output") - f.BoolVarP(&c.jsonOutput, "json", "j", false, "json output") - return cmd -} - -func (d *eventsCmd) validate(args []string) error { - return validateTenantArgs("events", args) -} - -func (d *eventsCmd) run(args []string) error { - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - if d.ns == "" || d.ns == helpers.DefaultNamespace { - d.ns, err = getTenantNamespace(oclient, args[0]) - if err != nil { - return err - } - } - tenant, err := oclient.MinioV2().Tenants(d.ns).Get(context.Background(), args[0], metav1.GetOptions{}) - if err != nil { - return err - } - return d.printTenantEvents(tenant) -} - -func (d *eventsCmd) printTenantEvents(tenant *v2.Tenant) error { - events, err := d.getTenantEvents(tenant) - if err != nil { - return err - } - if !d.jsonOutput && !d.yamlOutput { - d.printRawTenantEvents(events) - return nil - } - if d.jsonOutput && d.yamlOutput { - return fmt.Errorf("Only one output can be used to display events") - } - if d.jsonOutput { - return d.printJSONTenantEvents(events) - } - if d.yamlOutput { - return d.printYAMLTenantEvents(events) - } - return nil -} - -func (d *eventsCmd) getTenantEvents(tenant *v2.Tenant) (*v1.EventList, error) { - path, _ := rootCmd.Flags().GetString(kubeconfig) - kubeClient, err := helpers.GetKubeClient(path) - if err != nil { - return nil, err - } - return kubeClient.CoreV1().Events(tenant.Namespace).List(context.Background(), metav1.ListOptions{}) -} - -func (d *eventsCmd) printRawTenantEvents(events *v1.EventList) { - table := d.initEventsTable() - data := d.getEventsData(events) - table.AppendBulk(data) - table.Render() -} - -func (d *eventsCmd) initEventsTable() *tablewriter.Table { - table := tablewriter.NewWriter(d.out) - table.SetAutoWrapText(false) - table.SetAutoFormatHeaders(true) - table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) - table.SetAlignment(tablewriter.ALIGN_LEFT) - table.SetCenterSeparator("") - table.SetColumnSeparator("") - table.SetRowSeparator("") - table.SetHeaderLine(false) - table.SetBorder(false) - table.SetTablePadding("\t") - table.SetNoWhiteSpace(true) - table.SetHeader([]string{"LAST SEEN", "TYPE", "REASON", "OBJECT", "MESSAGE"}) - return table -} - -func (d *eventsCmd) getEventsData(events *v1.EventList) (data [][]string) { - for _, event := range events.Items { - data = append(data, []string{ - duration.HumanDuration(time.Since(event.LastTimestamp.Time)), - event.Type, - event.Reason, - event.InvolvedObject.Name, - event.Message, - }) - } - return data -} - -func (d *eventsCmd) printJSONTenantEvents(events *v1.EventList) error { - enc := json.NewEncoder(d.out) - enc.SetIndent("", " ") - return enc.Encode(events) -} - -func (d *eventsCmd) printYAMLTenantEvents(events *v1.EventList) error { - eventsYAML, err := yaml.Marshal(events) - if err != nil { - return err - } - fmt.Fprintln(d.out, string(eventsYAML)) - return nil -} diff --git a/kubectl-minio/cmd/tenant-expand.go b/kubectl-minio/cmd/tenant-expand.go deleted file mode 100644 index 8894f27a97e..00000000000 --- a/kubectl-minio/cmd/tenant-expand.go +++ /dev/null @@ -1,161 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "io" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/klog/v2" - "sigs.k8s.io/yaml" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/spf13/cobra" -) - -const ( - expandDesc = ` -'expand' command adds storage capacity to a MinIO tenant` - expandExample = ` kubectl minio tenant expand tenant1 --servers 4 --volumes 32 --capacity 32Ti` -) - -type expandCmd struct { - out io.Writer - errOut io.Writer - output bool - tenantOpts resources.TenantOptions -} - -func newTenantExpandCmd(out io.Writer, errOut io.Writer) *cobra.Command { - v := &expandCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "expand --pool --servers --volumes --capacity --namespace ", - Short: "Add capacity to existing tenant", - Long: expandDesc, - Example: expandExample, - Args: func(cmd *cobra.Command, args []string) error { - return v.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := v.run() - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&v.tenantOpts.NS, "namespace", "n", "", "k8s namespace for this MinIO tenant") - f.StringVarP(&v.tenantOpts.PoolName, "pool", "p", "", "name for this pool expansion") - f.Int32Var(&v.tenantOpts.Servers, "servers", 0, "total number of pods to add to tenant") - f.Int32Var(&v.tenantOpts.Volumes, "volumes", 0, "total number of volumes to add to tenant") - f.StringVar(&v.tenantOpts.Capacity, "capacity", "", "total raw capacity to add to tenant, e.g. 16Ti") - f.StringVarP(&v.tenantOpts.StorageClass, "storage-class", "s", helpers.DefaultStorageclass, "storage class for the expanded MinIO tenant pool (can be different than original pool)") - f.BoolVarP(&v.output, "output", "o", false, "generate MinIO tenant yaml with expansion details") - - cmd.MarkFlagRequired("servers") - cmd.MarkFlagRequired("volumes") - cmd.MarkFlagRequired("capacity") - return cmd -} - -func (v *expandCmd) validate(args []string) error { - if args == nil { - return errors.New("provide the name of the tenant, e.g. 'kubectl minio tenant expand tenant1'") - } - if len(args) != 1 { - return errors.New("expand command supports a single argument, e.g. 'kubectl minio tenant expand tenant1'") - } - if args[0] == "" { - return errors.New("provide the name of the tenant, e.g. 'kubectl minio tenant expand tenant1'") - } - // Tenant name should have DNS token restrictions - if err := helpers.CheckValidTenantName(args[0]); err != nil { - return err - } - - v.tenantOpts.Name = args[0] - return v.tenantOpts.Validate() -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (v *expandCmd) run() error { - // Create operator client - path, _ := rootCmd.Flags().GetString(kubeconfig) - client, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - - if v.tenantOpts.NS == "" || v.tenantOpts.NS == helpers.DefaultNamespace { - v.tenantOpts.NS, err = getTenantNamespace(client, v.tenantOpts.Name) - if err != nil { - return err - } - } - - t, err := client.MinioV2().Tenants(v.tenantOpts.NS).Get(context.Background(), v.tenantOpts.Name, metav1.GetOptions{}) - if err != nil { - return err - } - currentCapacity := helpers.TotalCapacity(*t) - volumesPerServer := helpers.VolumesPerServer(v.tenantOpts.Volumes, v.tenantOpts.Servers) - capacityPerVolume, err := helpers.CapacityPerVolume(v.tenantOpts.Capacity, v.tenantOpts.Volumes) - if err != nil { - return err - } - - // Tenant pool id is zero based, generating pool using the count of existing pools in the tenant - if v.tenantOpts.PoolName == "" { - v.tenantOpts.PoolName = resources.GeneratePoolName(len(t.Spec.Pools)) - } - - t.Spec.Pools = append(t.Spec.Pools, resources.Pool(&v.tenantOpts, volumesPerServer, *capacityPerVolume)) - expandedCapacity := helpers.TotalCapacity(*t) - if !v.output { - fmt.Printf(Bold(fmt.Sprintf("\nExpanding Tenant '%s/%s' from %s to %s\n\n", t.ObjectMeta.Name, t.ObjectMeta.Namespace, currentCapacity, expandedCapacity))) - return addPoolToTenant(client, t) - } - - o, err := yaml.Marshal(t) - if err != nil { - return err - } - fmt.Println(string(o)) - return nil -} - -func addPoolToTenant(client *operatorv1.Clientset, t *miniov2.Tenant) error { - data, err := json.Marshal(t) - if err != nil { - return err - } - if _, err := client.MinioV2().Tenants(t.Namespace).Patch(context.Background(), t.Name, types.MergePatchType, data, metav1.PatchOptions{FieldManager: "kubectl"}); err != nil { - return err - } - return nil -} diff --git a/kubectl-minio/cmd/tenant-info.go b/kubectl-minio/cmd/tenant-info.go deleted file mode 100644 index a1e16943436..00000000000 --- a/kubectl-minio/cmd/tenant-info.go +++ /dev/null @@ -1,175 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "fmt" - "io" - "regexp" - "strconv" - "strings" - - "github.com/dustin/go-humanize" - "github.com/minio/kubectl-minio/cmd/helpers" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog/v2" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/config" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/minio/operator/pkg/resources/services" - "github.com/spf13/cobra" - "k8s.io/client-go/kubernetes/scheme" -) - -const ( - infoDesc = `'info' command lists pools from a MinIO tenant` -) - -type infoCmd struct { - out io.Writer - errOut io.Writer - ns string -} - -func newTenantInfoCmd(out io.Writer, errOut io.Writer) *cobra.Command { - _ = v2.AddToScheme(scheme.Scheme) - c := &infoCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "info ", - Short: "List all volumes in existing tenant", - Long: infoDesc, - Example: ` kubectl minio info tenant1`, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.ns, "namespace", "n", "", "namespace scope for this request") - return cmd -} - -func (d *infoCmd) validate(args []string) error { - return validateTenantArgs("info", args) -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (d *infoCmd) run(args []string) error { - // Create operator client - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - - if d.ns == "" || d.ns == helpers.DefaultNamespace { - d.ns, err = getTenantNamespace(oclient, args[0]) - if err != nil { - return err - } - } - - tenant, err := oclient.MinioV2().Tenants(d.ns).Get(context.Background(), args[0], metav1.GetOptions{}) - if err != nil { - return err - } - printTenantInfo(*tenant) - // show the secret - fmt.Println() - cfg := config.GetConfigOrDie() - // If config is passed as a flag use that instead - k8sClient, err := client.New(cfg, client.Options{}) - if err != nil { - return err - } - secret := &v1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: tenant.Spec.Configuration.Name, - Namespace: tenant.Namespace, - }, - } - err = k8sClient.Get(context.Background(), client.ObjectKeyFromObject(secret), secret) - if err != nil { - return err - } - printTenantCredentials(string(secret.Data["config.env"])) - return nil -} - -func printTenantCredentials(data string) { - users := regexp.MustCompile(`MINIO_ROOT_USER="([^"])+"`).FindAllString(data, -1) - passs := regexp.MustCompile(`MINIO_ROOT_PASSWORD="([^"])+"`).FindAllString(data, -1) - if len(users) >= 1 || len(passs) >= 1 { - fmt.Println("MinIO Root User Credentials:") - } - if len(users) >= 1 { - fmt.Println(users[0]) - } - if len(passs) >= 1 { - fmt.Println(passs[0]) - } -} - -func printTenantInfo(tenant miniov2.Tenant) { - // Check MinIO S3 Endpoint Service - minSvc := services.NewClusterIPForMinIO(&tenant) - - // Check MinIO Console Endpoint Service - conSvc := services.NewClusterIPForConsole(&tenant) - - var minPorts, consolePorts string - for _, p := range minSvc.Spec.Ports { - minPorts = minPorts + strconv.Itoa(int(p.Port)) + "," - } - for _, p := range conSvc.Spec.Ports { - consolePorts = consolePorts + strconv.Itoa(int(p.Port)) + "," - } - fmt.Printf(Bold(fmt.Sprintf("Tenant '%s', Namespace '%s', Total capacity %s\n\n", tenant.Name, tenant.ObjectMeta.Namespace, helpers.TotalCapacity(tenant)))) - fmt.Printf(Blue("Current status: %s\n", tenant.Status.CurrentState)) - fmt.Printf(Blue("MinIO version: %s\n", tenant.Spec.Image)) - fmt.Printf(Blue("MinIO service: %s/ClusterIP (port %s)\n", minSvc.Name, strings.TrimSuffix(minPorts, ","))) - fmt.Printf(Blue("Console service: %s/ClusterIP (port %s)\n", conSvc.Name, strings.TrimSuffix(consolePorts, ","))) - if tenant.Spec.KES != nil && tenant.Spec.KES.Image != "" { - fmt.Printf(Blue("KES version: %s \n\n", tenant.Spec.KES.Image)) - } else { - fmt.Println() - } - - t := helpers.GetTable() - t.SetHeader([]string{"Pool", "Servers", "Volumes(server)", "Capacity(volume)"}) - for i, z := range tenant.Spec.Pools { - t.Append([]string{ - strconv.Itoa(i), - strconv.Itoa(int(z.Servers)), - strconv.Itoa(int(z.VolumesPerServer)), - humanize.IBytes(uint64(z.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value())), - }) - } - t.Render() -} diff --git a/kubectl-minio/cmd/tenant-list.go b/kubectl-minio/cmd/tenant-list.go deleted file mode 100644 index 08a67da62e1..00000000000 --- a/kubectl-minio/cmd/tenant-list.go +++ /dev/null @@ -1,99 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "errors" - "fmt" - "io" - - "github.com/minio/kubectl-minio/cmd/helpers" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog/v2" - - "github.com/spf13/cobra" -) - -const ( - listDesc = `'list' command lists all MinIO tenant managed by the Operator` -) - -type listCmd struct { - out io.Writer - errOut io.Writer -} - -func newTenantListCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &listCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "list", - Short: "List all tenants", - Long: listDesc, - RunE: func(cmd *cobra.Command, args []string) error { - if err := c.validate(args); err != nil { - return err - } - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - return cmd -} - -func (d *listCmd) validate(args []string) error { - if len(args) != 0 { - return errors.New("list command doesn't take any argument, try 'kubectl minio tenant list'") - } - return nil -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (d *listCmd) run(_ []string) error { - // Create operator client - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - - tenants, err := oclient.MinioV2().Tenants("").List(context.Background(), metav1.ListOptions{}) - if err != nil { - return err - } - printTenantList(tenants) - - return nil -} - -func printTenantList(tenants *miniov2.TenantList) { - for _, tenant := range tenants.Items { - fmt.Printf(Bold(fmt.Sprintf("\nTenant '%s', Namespace '%s', Total capacity %s\n\n", tenant.Name, tenant.ObjectMeta.Namespace, helpers.TotalCapacity(tenant)))) - fmt.Printf(Blue(" Current status: %s \n", tenant.Status.CurrentState)) - fmt.Printf(Blue(" MinIO version: %s \n", tenant.Spec.Image)) - if tenant.Spec.KES != nil && tenant.Spec.KES.Image != "" { - fmt.Printf(Blue(" KES version: %s \n\n", tenant.Spec.KES.Image)) - } - } - fmt.Println() -} diff --git a/kubectl-minio/cmd/tenant-report.go b/kubectl-minio/cmd/tenant-report.go deleted file mode 100644 index 954a7036447..00000000000 --- a/kubectl-minio/cmd/tenant-report.go +++ /dev/null @@ -1,152 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "archive/zip" - "context" - "encoding/json" - "fmt" - "io" - "os" - - "github.com/minio/kubectl-minio/cmd/helpers" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/spf13/cobra" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog/v2" - "sigs.k8s.io/yaml" -) - -const ( - reportDesc = `'report' command saves pod logs from a MinIO tenant` -) - -type reportCmd struct { - out io.Writer - errOut io.Writer - ns string -} - -func newTenantReportCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &reportCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "report ", - Short: "Collect pod logs, events, and status for a tenant", - Long: reportDesc, - Example: ` kubectl minio report tenant1`, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.ns, "namespace", "n", "", "namespace scope for this request") - return cmd -} - -func (d *reportCmd) validate(args []string) error { - return validateTenantArgs("report", args) -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (d *reportCmd) run(args []string) error { - // Create operator client - ctx := context.Background() - - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - client, err := helpers.GetKubeClient(path) - if err != nil { - return err - } - - if d.ns == "" || d.ns == helpers.DefaultNamespace { - d.ns, err = getTenantNamespace(oclient, args[0]) - if err != nil { - return err - } - } - - tenant, err := oclient.MinioV2().Tenants(d.ns).Get(context.Background(), args[0], metav1.GetOptions{}) - if err != nil { - return err - } - listOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenant.Name), - } - podsSet := client.CoreV1().Pods(tenant.Namespace) - events := client.CoreV1().Events(tenant.Namespace) - pods, err := podsSet.List(ctx, listOpts) - if err != nil { - return err - } - w, err := os.Create(tenant.Name + "-report.zip") - if err != nil { - return err - } - zipw := zip.NewWriter(w) - tenantAsYaml, err := yaml.Marshal(tenant) - if err == nil { - f, err := zipw.Create(tenant.Name + ".yaml") - if err == nil { - f.Write(tenantAsYaml) - } - } - for i := 0; i < len(pods.Items); i++ { - toWrite, err := podsSet.GetLogs(pods.Items[i].Name, &v1.PodLogOptions{}).DoRaw(ctx) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + ".log") - if err == nil { - f.Write(toWrite) - } - } - podEvents, err := events.List(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("involvedObject.uid=%s", pods.Items[i].UID)}) - if err == nil { - podEventsJSON, err := json.Marshal(podEvents) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + "-events.txt") - if err == nil { - f.Write(podEventsJSON) - } - } - } - status := pods.Items[i].Status - statusJSON, err := json.Marshal(status) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + "-status.txt") - if err == nil { - f.Write(statusJSON) - } - } - } - zipw.Close() - fmt.Println("Data stored in " + tenant.Name + "-report.zip") - return nil -} diff --git a/kubectl-minio/cmd/tenant-status.go b/kubectl-minio/cmd/tenant-status.go deleted file mode 100644 index 407c3bb797e..00000000000 --- a/kubectl-minio/cmd/tenant-status.go +++ /dev/null @@ -1,159 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2022, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "encoding/json" - "fmt" - "io" - "strings" - - "github.com/dustin/go-humanize" - "github.com/minio/kubectl-minio/cmd/helpers" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/spf13/cobra" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/klog/v2" - "sigs.k8s.io/yaml" -) - -const ( - statusDesc = `'status' command displays tenant status information` -) - -type statusCmd struct { - out io.Writer - errOut io.Writer - ns string - yamlOutput bool - jsonOutput bool -} - -func newTenantStatusCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &statusCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "status ", - Short: "Display tenant status", - Long: statusDesc, - Example: ` kubectl minio status tenant1`, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - err := c.run(args) - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.ns, "namespace", "n", "", "namespace scope for this request") - f.BoolVarP(&c.yamlOutput, "yaml", "y", false, "yaml output") - f.BoolVarP(&c.jsonOutput, "json", "j", false, "json output") - return cmd -} - -func (d *statusCmd) validate(args []string) error { - return validateTenantArgs("status", args) -} - -func validateTenantArgs(cmd string, args []string) error { - if args == nil { - return fmt.Errorf("provide the name of the tenant, e.g. 'kubectl minio tenant %s tenant1'", cmd) - } - if len(args) != 1 { - return fmt.Errorf("%s command supports a single argument, e.g. 'kubectl minio %s tenant1'", cmd, cmd) - } - if args[0] == "" { - return fmt.Errorf("provide the name of the tenant, e.g. 'kubectl minio tenant %s tenant1'", cmd) - } - return helpers.CheckValidTenantName(args[0]) -} - -func (d *statusCmd) run(args []string) error { - path, _ := rootCmd.Flags().GetString(kubeconfig) - oclient, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - if d.ns == "" || d.ns == helpers.DefaultNamespace { - d.ns, err = getTenantNamespace(oclient, args[0]) - if err != nil { - return err - } - } - tenant, err := oclient.MinioV2().Tenants(d.ns).Get(context.Background(), args[0], metav1.GetOptions{}) - if err != nil { - return err - } - return d.printTenantStatus(tenant) -} - -func (d *statusCmd) printTenantStatus(tenant *v2.Tenant) error { - if !d.jsonOutput && !d.yamlOutput { - d.printRawTenantStatus(tenant) - return nil - } - if d.jsonOutput && d.yamlOutput { - return fmt.Errorf("Only one output can be used to display status") - } - if d.jsonOutput { - return d.printJSONTenantStatus(tenant) - } - if d.yamlOutput { - return d.printYAMLTenantStatus(tenant) - } - return nil -} - -func (d *statusCmd) printRawTenantStatus(tenant *v2.Tenant) { - var s strings.Builder - s.WriteString("=====================\n") - s.WriteString(Bold("Pools: %d \n", len(tenant.Status.Pools))) - s.WriteString(Bold("Revision: %d \n", tenant.Status.Revision)) - s.WriteString(Bold("Sync version: %s \n", tenant.Status.SyncVersion)) - s.WriteString(Bold("Write quorum: %d \n", tenant.Status.WriteQuorum)) - s.WriteString(Bold("Health status: %s \n", tenant.Status.HealthStatus)) - s.WriteString(Bold("Drives online: %d \n", tenant.Status.DrivesOnline)) - s.WriteString(Bold("Drives offline: %d \n", tenant.Status.DrivesOffline)) - s.WriteString(Bold("Drives healing: %d \n", tenant.Status.DrivesHealing)) - s.WriteString(Bold("Current status: %s \n", tenant.Status.CurrentState)) - s.WriteString(Bold("Usable capacity: %s \n", humanize.IBytes(uint64(tenant.Status.Usage.Capacity)))) - s.WriteString(Bold("Provisioned users: %t \n", tenant.Status.ProvisionedUsers)) - s.WriteString(Bold("Available replicas: %d \n", tenant.Status.AvailableReplicas)) - - fmt.Fprintln(d.out, s.String()) -} - -func (d *statusCmd) printJSONTenantStatus(tenant *v2.Tenant) error { - enc := json.NewEncoder(d.out) - enc.SetIndent("", " ") - return enc.Encode(tenant.Status) -} - -func (d *statusCmd) printYAMLTenantStatus(tenant *v2.Tenant) error { - statusYAML, err := yaml.Marshal(tenant.Status) - if err != nil { - return err - } - fmt.Fprintln(d.out, string(statusYAML)) - return nil -} diff --git a/kubectl-minio/cmd/tenant-upgrade.go b/kubectl-minio/cmd/tenant-upgrade.go deleted file mode 100644 index 603c57a6112..00000000000 --- a/kubectl-minio/cmd/tenant-upgrade.go +++ /dev/null @@ -1,156 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "fmt" - "io" - "strings" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/minio/kubectl-minio/cmd/resources" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/yaml" -) - -const ( - upgradeDesc = `'upgrade' command upgrades a MinIO tenant to the specified MinIO version` -) - -type upgradeCmd struct { - out io.Writer - errOut io.Writer - output bool - tenantOpts resources.TenantOptions -} - -func newTenantUpgradeCmd(out io.Writer, errOut io.Writer) *cobra.Command { - c := &upgradeCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "upgrade --image ", - Short: "Upgrade MinIO image for existing tenant", - Long: upgradeDesc, - Example: ` kubectl minio upgrade tenant1 --image quay.io/minio/minio:RELEASE.2023-10-07T15-07-38Z`, - Args: func(cmd *cobra.Command, args []string) error { - return c.validate(args) - }, - RunE: func(cmd *cobra.Command, args []string) error { - c.tenantOpts.Name = args[0] - err := c.run() - if err != nil { - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - f := cmd.Flags() - f.StringVarP(&c.tenantOpts.Image, "image", "i", "", "image to which tenant is to be upgraded") - f.StringVarP(&c.tenantOpts.NS, "namespace", "n", "", "namespace scope for this request") - f.BoolVarP(&c.output, "output", "o", false, "dry run this command and generate requisite yaml") - - cmd.MarkFlagRequired("image") - return cmd -} - -func (u *upgradeCmd) validate(args []string) error { - if u.tenantOpts.Image == "" { - return fmt.Errorf("provide the --image flag, e.g. 'kubectl minio tenant upgrade tenant1 --image %s'", helpers.DefaultTenantImage) - } - return validateTenantArgs("upgrade", args) -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (u *upgradeCmd) run() error { - // Create operator client - - path, _ := rootCmd.Flags().GetString(kubeconfig) - client, err := helpers.GetKubeOperatorClient(path) - if err != nil { - return err - } - - if u.tenantOpts.NS == "" || u.tenantOpts.NS == helpers.DefaultNamespace { - u.tenantOpts.NS, err = getTenantNamespace(client, u.tenantOpts.Name) - if err != nil { - return err - } - } - - imageSplits := strings.Split(u.tenantOpts.Image, ":") - if len(imageSplits) == 1 { - return fmt.Errorf("MinIO operator does not allow images without RELEASE tags") - } - - latest, err := miniov2.ReleaseTagToReleaseTime(imageSplits[1]) - if err != nil { - return fmt.Errorf("Unsupported release tag, unable to apply requested update %w", err) - } - - t, err := client.MinioV2().Tenants(u.tenantOpts.NS).Get(context.Background(), u.tenantOpts.Name, v1.GetOptions{}) - if err != nil { - return err - } - currentImageSplits := strings.Split(t.Spec.Image, ":") - if len(currentImageSplits) == 1 { - return fmt.Errorf("MinIO operator already deployed container with RELEASE tags, update not allowed please manually fix this using 'kubectl patch --help'") - } - current, err := miniov2.ReleaseTagToReleaseTime(currentImageSplits[1]) - if err != nil { - return fmt.Errorf("Unsupported release tag on current image, non-disruptive update not allowed %w", err) - } - // Verify if the new release tag is latest, if its not latest refuse to apply the new config. - if latest.Before(current) { - return fmt.Errorf("Refusing to downgrade the tenant %s to version %s, from %s", - u.tenantOpts.Name, u.tenantOpts.Image, t.Spec.Image) - } - - if u.tenantOpts.ImagePullSecret != "" { - t.Spec.ImagePullSecret = corev1.LocalObjectReference{Name: u.tenantOpts.ImagePullSecret} - } - - if !u.output { - return u.upgradeTenant(client, t, t.Spec.Image, u.tenantOpts.Image) - } - // update the image - t.Spec.Image = u.tenantOpts.Image - o, err := yaml.Marshal(&t) - if err != nil { - return err - } - fmt.Println(string(o)) - return nil -} - -func (u *upgradeCmd) upgradeTenant(client *operatorv1.Clientset, t *miniov2.Tenant, c, p string) error { - if helpers.Ask(fmt.Sprintf("Upgrade is a one way process. Are you sure to upgrade Tenant '%s/%s' from version %s to %s", t.ObjectMeta.Name, t.ObjectMeta.Namespace, c, p)) { - fmt.Printf(Bold(fmt.Sprintf("\nUpgrading Tenant '%s/%s'\n\n", t.ObjectMeta.Name, t.ObjectMeta.Namespace))) - // update the image - t.Spec.Image = u.tenantOpts.Image - if _, err := client.MinioV2().Tenants(t.Namespace).Update(context.Background(), t, v1.UpdateOptions{FieldValidation: "Ignore"}); err != nil { - return err - } - } else { - fmt.Printf(Bold("\nAborting Tenant upgrade\n\n")) - } - return nil -} diff --git a/kubectl-minio/cmd/tenant.go b/kubectl-minio/cmd/tenant.go deleted file mode 100644 index a85d569cdf4..00000000000 --- a/kubectl-minio/cmd/tenant.go +++ /dev/null @@ -1,87 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "fmt" - "io" - - "github.com/minio/kubectl-minio/cmd/resources" - operatorv1 "github.com/minio/operator/pkg/client/clientset/versioned" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/spf13/cobra" - k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - tenantDesc = ` -'tenant' is the top level command for managing MinIO tenants created via MinIO operator.` -) - -func getTenantNamespace(client *operatorv1.Clientset, tenantName string) (string, error) { - tenants, err := client.MinioV2().Tenants("").List(context.Background(), metav1.ListOptions{}) - if err != nil { - return "", err - } - for _, tenant := range tenants.Items { - if tenant.Name == tenantName { - return tenant.ObjectMeta.Namespace, nil - } - } - return "", fmt.Errorf("tenant: %s not found on any namespace", tenantName) -} - -func newTenantCmd(_ io.Writer, _ io.Writer) *cobra.Command { - cmd := &cobra.Command{ - Use: "tenant", - Short: "Manage MinIO tenant(s)", - Long: tenantDesc, - PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - path, _ := rootCmd.Flags().GetString(kubeconfig) - client, err := helpers.GetKubeExtensionClient(path) - if err != nil { - return err - } - // Load Resources - decode := resources.GetSchemeDecoder() - crdObj := resources.LoadTenantCRD(decode) - _, err = client.ApiextensionsV1().CustomResourceDefinitions().Get(context.Background(), crdObj.GetObjectMeta().GetName(), v1.GetOptions{}) - if err != nil { - if k8serrors.IsNotFound(err) { - return fmt.Errorf("CustomResourceDefinition %s: not found, please run 'kubectl minio init' before using tenant command", crdObj.ObjectMeta.Name) - } - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - cmd.AddCommand(newTenantCreateCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantInfoCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantListCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantExpandCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantUpgradeCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantDeleteCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantReportCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantStatusCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - cmd.AddCommand(newTenantEventsCmd(cmd.OutOrStdout(), cmd.ErrOrStderr())) - - return cmd -} diff --git a/kubectl-minio/cmd/version.go b/kubectl-minio/cmd/version.go deleted file mode 100644 index 58f0ab619b6..00000000000 --- a/kubectl-minio/cmd/version.go +++ /dev/null @@ -1,114 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (C) 2021, MinIO, Inc. -// -// This code is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License, version 3, -// as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License, version 3, -// along with this program. If not, see - -package cmd - -import ( - "context" - "fmt" - "io" - "os" - "strings" - - v1 "k8s.io/api/apps/v1" - "k8s.io/client-go/tools/clientcmd" - "k8s.io/klog/v2" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/config" - - "github.com/minio/kubectl-minio/cmd/helpers" - "github.com/spf13/cobra" -) - -// version provides the version of this plugin -var version = "DEVELOPMENT.GOGET" - -const ( - operatorVersionDesc = ` -'version' command displays the kubectl plugin version.` - operatorVersionExample = ` kubectl minio version` -) - -type operatorVersionCmd struct { - out io.Writer - errOut io.Writer -} - -func newVersionCmd(out io.Writer, errOut io.Writer) *cobra.Command { - o := &operatorVersionCmd{out: out, errOut: errOut} - - cmd := &cobra.Command{ - Use: "version", - Short: "Display plugin version", - Long: operatorVersionDesc, - Example: operatorVersionExample, - Args: cobra.MaximumNArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - path, _ := rootCmd.Flags().GetString(kubeconfig) - if path != "" { - os.Setenv(clientcmd.RecommendedConfigPathEnvVar, path) - } - err := o.run() - if err != nil { - klog.Warning(err) - return err - } - return nil - }, - } - cmd = helpers.DisableHelp(cmd) - - return cmd -} - -// run initializes local config and installs MinIO Operator to Kubernetes cluster. -func (o *operatorVersionCmd) run() error { - fmt.Println("Kubectl-Plugin Version:", version) - cfg := config.GetConfigOrDie() - // If config is passed as a flag use that instead - k8sClient, err := client.New(cfg, client.Options{}) - if err != nil { - return err - } - deployList := &v1.DeploymentList{} - listOpt := &client.ListOptions{} - client.MatchingLabels{"app.kubernetes.io/name": "minio-operator"}.ApplyToList(listOpt) - err = k8sClient.List(context.Background(), deployList, listOpt) - if err != nil { - return err - } - for _, item := range deployList.Items { - image := "" - if len(item.Spec.Template.Spec.Containers) == 1 { - image = item.Spec.Template.Spec.Containers[0].Image - } else { - for _, container := range item.Spec.Template.Spec.Containers { - if strings.Contains(container.Image, "operator") { - image = container.Image - break - } - } - } - if image != "" { - if item.Name == "console" { - fmt.Printf("Minio-Operator Console Version: %s/%s:%s \r\n", item.Namespace, item.Name, strings.SplitN(image, ":", 2)[1]) - } - if item.Name == "minio-operator" { - fmt.Printf("Minio-Operator Controller Version: %s/%s:%s \r\n", item.Namespace, item.Name, strings.SplitN(image, ":", 2)[1]) - } - } - } - return nil -} diff --git a/kubectl-minio/go.mod b/kubectl-minio/go.mod deleted file mode 100644 index 8b10e9712d1..00000000000 --- a/kubectl-minio/go.mod +++ /dev/null @@ -1,109 +0,0 @@ -module github.com/minio/kubectl-minio - -go 1.21 - -toolchain go1.21.0 - -replace github.com/minio/operator => ../ - -require ( - github.com/dustin/go-humanize v1.0.1 - github.com/fatih/color v1.14.1 - github.com/manifoldco/promptui v0.9.0 - github.com/minio/operator v0.4.0 - github.com/olekukonko/tablewriter v0.0.5 - github.com/pkg/errors v0.9.1 - github.com/spf13/cobra v1.7.0 - k8s.io/api v0.28.1 - k8s.io/apiextensions-apiserver v0.28.0 - k8s.io/apimachinery v0.28.1 - k8s.io/cli-runtime v0.28.1 - k8s.io/client-go v0.28.1 - k8s.io/klog/v2 v2.100.1 - sigs.k8s.io/controller-runtime v0.16.2 - sigs.k8s.io/kustomize/api v0.14.0 - sigs.k8s.io/kustomize/kyaml v0.14.3 - sigs.k8s.io/yaml v1.3.0 -) - -require ( - github.com/chzyer/readline v1.5.1 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.10.0 // indirect - github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/go-errors/errors v1.4.2 // indirect - github.com/go-logr/logr v1.2.4 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-openapi/jsonpointer v0.20.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.4 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect - github.com/imdario/mergo v0.3.13 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.15.15 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect - github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect - github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/miekg/dns v1.1.50 // indirect - github.com/minio/madmin-go/v2 v2.0.14 // indirect - github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/minio-go/v7 v7.0.49 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/philhofer/fwd v1.1.2 // indirect - github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect - github.com/prometheus/procfs v0.10.1 // indirect - github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/rs/xid v1.4.0 // indirect - github.com/secure-io/sio-go v0.3.1 // indirect - github.com/shirou/gopsutil/v3 v3.23.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/tinylib/msgp v1.1.8 // indirect - github.com/tklauser/go-sysconf v0.3.11 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect - github.com/xlab/treeprint v1.2.0 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.2.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 - golang.org/x/tools v0.9.3 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect - k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect -) diff --git a/kubectl-minio/go.sum b/kubectl-minio/go.sum deleted file mode 100644 index 3e7cba03566..00000000000 --- a/kubectl-minio/go.sum +++ /dev/null @@ -1,414 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -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/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= -github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= -github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= -github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -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/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-logr/logr v1.2.0/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/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -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.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.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -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/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -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.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.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/gofuzz v1.0.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/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -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/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -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.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= -github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -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/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/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= -github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de h1:V53FWzU6KAZVi1tPp5UIsMoUWJ2/PNwYIDXnu7QuBCE= -github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/minio/madmin-go/v2 v2.0.14 h1:FJs34UMm1jmDj3rA75tZnZAVRSaeXCL6q0D4Twrwz0M= -github.com/minio/madmin-go/v2 v2.0.14/go.mod h1:lFQ1Zzi30StjJtyIpVLhjoxn/uPS+0Wxw4MyuRlNkR0= -github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= -github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.49 h1:dE5DfOtnXMXCjr/HWI6zN9vCrY6Sv666qhhiwUMvGV4= -github.com/minio/minio-go/v7 v7.0.49/go.mod h1:UI34MvQEiob3Cf/gGExGMmzugkM/tNgbFypNDy5LMVc= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= -github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/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/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= -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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= -github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/secure-io/sio-go v0.3.1 h1:dNvY9awjabXTYGsTF1PiCySl9Ltofk9GA3VdWlo7rRc= -github.com/secure-io/sio-go v0.3.1/go.mod h1:+xbkjDzPjwh4Axd07pRKSNriS9SCiYksWnZqdnfpQxs= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4= -github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= -github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= -github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= -github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= -go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= -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 v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -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-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/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-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.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -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.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= -gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -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.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -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.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -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.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.28.1 h1:i+0O8k2NPBCPYaMB+uCkseEbawEt/eFaiRqUx8aB108= -k8s.io/api v0.28.1/go.mod h1:uBYwID+66wiL28Kn2tBjBYQdEU0Xk0z5qF8bIBqk/Dg= -k8s.io/apiextensions-apiserver v0.28.0 h1:CszgmBL8CizEnj4sj7/PtLGey6Na3YgWyGCPONv7E9E= -k8s.io/apiextensions-apiserver v0.28.0/go.mod h1:uRdYiwIuu0SyqJKriKmqEN2jThIJPhVmOWETm8ud1VE= -k8s.io/apimachinery v0.28.1 h1:EJD40og3GizBSV3mkIoXQBsws32okPOy+MkRyzh6nPY= -k8s.io/apimachinery v0.28.1/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= -k8s.io/cli-runtime v0.28.1 h1:7Njc4eD5kaO4tYdSYVJJEs54koYD/vT6gxOq8dEVf9g= -k8s.io/cli-runtime v0.28.1/go.mod h1:yIThSWkAVLqeRs74CMkq6lNFW42GyJmvMtcNn01SZho= -k8s.io/client-go v0.28.1 h1:pRhMzB8HyLfVwpngWKE8hDcXRqifh1ga2Z/PU9SXVK8= -k8s.io/client-go v0.28.1/go.mod h1:pEZA3FqOsVkCc07pFVzK076R+P/eXqsgx5zuuRWukNE= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= -k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.16.2 h1:mwXAVuEk3EQf478PQwQ48zGOXvW27UJc8NHktQVuIPU= -sigs.k8s.io/controller-runtime v0.16.2/go.mod h1:vpMu3LpI5sYWtujJOa2uPK61nB5rbwlN7BAB8aSLvGU= -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/api v0.14.0 h1:6+QLmXXA8X4eDM7ejeaNUyruA1DDB3PVIjbpVhDOJRA= -sigs.k8s.io/kustomize/api v0.14.0/go.mod h1:vmOXlC8BcmcUJQjiceUbcyQ75JBP6eg8sgoyzc+eLpQ= -sigs.k8s.io/kustomize/kyaml v0.14.3 h1:WpabVAKZe2YEp/irTSHwD6bfjwZnTtSDewd2BVJGMZs= -sigs.k8s.io/kustomize/kyaml v0.14.3/go.mod h1:npvh9epWysfQ689Rtt/U+dpOJDTBn8kUnF1O6VzvmZA= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/manifests/console-env_v1_configmap.yaml b/manifests/console-env_v1_configmap.yaml index 1c276708cd0..a74206147b2 100644 --- a/manifests/console-env_v1_configmap.yaml +++ b/manifests/console-env_v1_configmap.yaml @@ -8,4 +8,5 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-env diff --git a/manifests/console-sa-secret_v1_secret.yaml b/manifests/console-sa-secret_v1_secret.yaml index 8f7c7e18363..77a6d71d9e6 100644 --- a/manifests/console-sa-secret_v1_secret.yaml +++ b/manifests/console-sa-secret_v1_secret.yaml @@ -6,5 +6,6 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-sa-secret type: kubernetes.io/service-account-token diff --git a/manifests/console_v1_service.yaml b/manifests/console_v1_service.yaml index 1d2af3ffb8a..544027e0a9c 100644 --- a/manifests/console_v1_service.yaml +++ b/manifests/console_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: console-tls creationTimestamp: null labels: diff --git a/manifests/job.min.io_miniojobs.yaml b/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/manifests/minio-operator-rhmp.clusterserviceversion.yaml index da0bd26a29b..64242b7c05f 100644 --- a/manifests/minio-operator-rhmp.clusterserviceversion.yaml +++ b/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -32,7 +32,7 @@ metadata: "bucketDNS": false, "domains": {} }, - "image": "quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65", + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", "imagePullSecret": {}, "mountPath": "/export", "podManagementPolicy": "Parallel", @@ -80,25 +80,37 @@ metadata: ] capabilities: Full Lifecycle categories: AI/Machine Learning, Big Data, Cloud Provider, Storage - createdAt: "2023-10-12T17:54:23Z" description: |- MinIO is a Kubernetes-native high performance object store with an S3-compatible API. The MinIO Operator supports deploying MinIO Tenants onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" k8sMinVersion: "1.18" marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console operatorframework.io/suggested-namespace: minio-operator - operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/builder: operator-sdk-v1.22.2 operators.operatorframework.io/project_layout: unknown repository: https://github.com/minio/operator - containerImage: quay.io/minio/operator:v5.0.10 - name: minio-operator-rhmp.v5.0.10 + containerImage: quay.io/minio/operator:v5.0.14 + name: minio-operator-rhmp.v5.0.14 namespace: minio-operator spec: apiservicedefinitions: {} customresourcedefinitions: owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 - kind: PolicyBinding name: policybindings.sts.min.io version: v1alpha1 @@ -380,6 +392,7 @@ spec: - get - update - list + - delete - apiGroups: - "" resources: @@ -501,6 +514,7 @@ spec: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - '*' verbs: @@ -555,6 +569,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app: console app.kubernetes.io/instance: minio-operator-console @@ -564,7 +579,7 @@ spec: - args: - ui - --certs-dir=/tmp/certs - image: quay.io/minio/operator:v5.0.10 + image: quay.io/minio/operator:v5.0.14 imagePullPolicy: IfNotPresent name: console ports: @@ -577,6 +592,8 @@ spec: volumeMounts: - mountPath: /tmp/certs name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp serviceAccountName: console-sa volumes: - name: tls-certificates @@ -597,6 +614,8 @@ spec: path: CAs/ca.crt name: openshift-service-ca.crt optional: true + - emptyDir: {} + name: tmp - label: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -614,6 +633,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -638,8 +658,8 @@ spec: - name: MINIO_CONSOLE_TLS_ENABLE value: "on" - name: OPERATOR_STS_ENABLED - value: "off" - image: quay.io/minio/operator:v5.0.10 + value: "on" + image: quay.io/minio/operator:v5.0.14 imagePullPolicy: IfNotPresent name: minio-operator resources: @@ -757,11 +777,11 @@ spec: name: MinIO Inc url: https://min.io relatedImages: - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: minio/operator@sha256:91268142b22f88bef9fe74577930afffa9e877f48da84bf0a2b7303c74c1dd06 name: console - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: minio/operator@sha256:91268142b22f88bef9fe74577930afffa9e877f48da84bf0a2b7303c74c1dd06 name: minio-operator - - image: quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65 - name: minio-7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65-annotation - version: 5.0.10 - replaces: minio-operator-rhmp.v5.0.9 + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 + replaces: minio-operator-rhmp.v5.0.13 diff --git a/manifests/minio.min.io_tenants.yaml b/manifests/minio.min.io_tenants.yaml index d18f067d261..1c9fa3aa98d 100644 --- a/manifests/minio.min.io_tenants.yaml +++ b/manifests/minio.min.io_tenants.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: tenants.minio.min.io spec: @@ -312,18 +313,6 @@ spec: 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: @@ -367,6 +356,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -555,6 +546,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1109,6 +1137,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1159,6 +1195,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1355,6 +1399,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -1386,6 +1443,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -1702,6 +1761,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1770,6 +1839,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1836,6 +1915,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1904,6 +1993,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1953,6 +2052,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2442,6 +2602,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2510,6 +2680,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2576,6 +2756,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2644,6 +2834,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2755,6 +2955,8 @@ spec: additionalProperties: type: string type: object + reclaimStorage: + type: boolean resources: properties: claims: @@ -2983,18 +3185,6 @@ spec: 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: @@ -3038,6 +3228,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3049,6 +3241,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -3087,9 +3284,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -3350,6 +3556,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3400,6 +3614,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3596,6 +3818,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -3627,6 +3862,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -3906,18 +4143,6 @@ spec: 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: @@ -3961,6 +4186,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3972,6 +4199,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -4010,9 +4242,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -4264,18 +4505,6 @@ spec: 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: @@ -4319,6 +4548,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4507,6 +4738,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -4745,8 +5013,6 @@ spec: - name type: object type: array - required: - - containers type: object startup: properties: diff --git a/manifests/operator_v1_service.yaml b/manifests/operator_v1_service.yaml index 011f9599ff8..6b7b8d53ba8 100644 --- a/manifests/operator_v1_service.yaml +++ b/manifests/operator_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null labels: app.kubernetes.io/instance: minio-operator diff --git a/manifests/sts.min.io_policybindings.yaml b/manifests/sts.min.io_policybindings.yaml index fbbf279207d..d74cf747abc 100644 --- a/manifests/sts.min.io_policybindings.yaml +++ b/manifests/sts.min.io_policybindings.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: policybindings.sts.min.io spec: diff --git a/manifests/sts_v1_service.yaml b/manifests/sts_v1_service.yaml index cdec8486952..34c64e69366 100644 --- a/manifests/sts_v1_service.yaml +++ b/manifests/sts_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: sts-tls creationTimestamp: null labels: diff --git a/metadata/annotations.yaml b/metadata/annotations.yaml index e00c3b7426c..cc61e37d00a 100644 --- a/metadata/annotations.yaml +++ b/metadata/annotations.yaml @@ -6,7 +6,7 @@ annotations: operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp operators.operatorframework.io.bundle.channels.v1: stable # Annotations to specify OCP versions compatibility. - com.redhat.openshift.versions: v4.8-v4.13 + com.redhat.openshift.versions: v4.8-v4.15 # Annotation to add default bundle channel as potential is declared operators.operatorframework.io.bundle.channel.default.v1: stable operatorframework.io/suggested-namespace: minio-operator diff --git a/olm-post-script.sh b/olm-post-script.sh index 5c4a92361c8..49f7045f92a 100755 --- a/olm-post-script.sh +++ b/olm-post-script.sh @@ -37,12 +37,18 @@ for catalog in "${redhatCatalogs[@]}"; do echo "operatorImageDigest: ${operatorImageDigest} @ ${digest}" yq -i ".metadata.annotations.containerImage |= (\"${operatorImageDigest}\")" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml - # Operator Image in Digest mode: sha256:xxx + # Operator Image in Digest mode: sha256:xxx published catalogs yq -i ".spec.install.spec.deployments[0].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml yq -i ".spec.install.spec.deployments[1].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml yq -i "(.spec.relatedImages[] | select( .name == \"minio-operator\")).image |= \"${operatorImageDigest}\"" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml yq -i "(.spec.relatedImages[] | select( .name == \"console\")).image |= \"${operatorImageDigest}\"" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml -# yq eval-all -i ". as \$item ireduce ({}; . * \$item )" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml resources/templates/olm-template.yaml + + # Operator Image in Digest mode: sha256:xxx local test manifests + yq -i ".spec.install.spec.deployments[0].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" $catalog/manifests/$package.clusterserviceversion.yaml + yq -i ".spec.install.spec.deployments[1].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" $catalog/manifests/$package.clusterserviceversion.yaml + yq -i "(.spec.relatedImages[] | select( .name == \"minio-operator\")).image |= \"${operatorImageDigest}\"" $catalog/manifests/$package.clusterserviceversion.yaml + yq -i "(.spec.relatedImages[] | select( .name == \"console\")).image |= \"${operatorImageDigest}\"" $catalog/manifests/$package.clusterserviceversion.yaml + # https://connect.redhat.com/support/technology-partner/#/case/03206318 # If no securityContext is specified, the OLM will choose one that fits within diff --git a/olm.sh b/olm.sh index bc1d14da229..04ecab38e24 100755 --- a/olm.sh +++ b/olm.sh @@ -42,6 +42,10 @@ echo "minioVersionDigest: ${minioVersionDigest}" redhatCatalogs=("certified-operators" "redhat-marketplace" "community-operators") +# This constants are supported Openshift versions +minOpenshiftVersion=4.8 +maxOpenshiftVersion=4.15 + for catalog in "${redhatCatalogs[@]}"; do echo " " echo $catalog @@ -70,13 +74,24 @@ for catalog in "${redhatCatalogs[@]}"; do yq -i ".spec.install.spec.deployments[0].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml yq -i ".spec.install.spec.deployments[1].spec.template.spec.containers[0].image |= (\"${operatorImageDigest}\")" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml - # To provide channel for upgrade where we tell what versions can be replaced by the new version we offer - # You can read the documentation at link below: - # https://access.redhat.com/documentation/en-us/openshift_container_platform/4.2/html/operators/understanding-the-operator-lifecycle-manager-olm#olm-upgrades_olm-understanding-olm - echo "To provide replacement for upgrading Operator..." - PREV_VERSION=$(curl -s "https://catalog.redhat.com/api/containers/v1/operators/bundles?channel_name=stable&package=${package}&organization=${catalog}&include=data.version,data.csv_name,data.ocp_version" | jq '.data | max_by(.version).csv_name' -r) - echo "replaces: $PREV_VERSION" - yq -i e ".spec.replaces |= \"${PREV_VERSION}\"" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml + # Will query if a previous version of the CSV was published to the catalog of the latest supported Openshift version. + # It will help to prevent add the `spec.replaces` annotation when there is no preexisting CSV in the catalog to replace. + # See support case https://connect.redhat.com/support/technology-partner/#/case/03671253 + prev=$(curl -s "https://catalog.redhat.com/api/containers/v1/operators/bundles?channel_name=stable&package=${package}&organization=${catalog}&ocp_version=${maxOpenshiftVersion}&include=data.version,data.csv_name,data.ocp_version" | jq '.data | length' -r) + + # only add `spec.replaces` if at least one version have been published to the catalog + if [ "$prev" -gt 0 ]; then + # To provide channel for upgrade where we tell what versions can be replaced by the new version we offer + # You can read the documentation at link below: + # https://access.redhat.com/documentation/en-us/openshift_container_platform/4.2/html/operators/understanding-the-operator-lifecycle-manager-olm#olm-upgrades_olm-understanding-olm + echo "To provide replacement for upgrading Operator..." + PREV_VERSION=$(curl -s "https://catalog.redhat.com/api/containers/v1/operators/bundles?channel_name=stable&package=${package}&organization=${catalog}&ocp_version=${maxOpenshiftVersion}&include=data.version,data.csv_name,data.ocp_version" | jq '.data | max_by(.version).csv_name' -r) + echo "replaces: $PREV_VERSION" + yq -i e ".spec.replaces |= \"${PREV_VERSION}\"" bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml + else + echo "no previous published in catalog ${maxOpenshiftVersion}, removing spec.replaces" + yq -i "del(.spec.replaces) " bundles/$catalog/$RELEASE/manifests/$package.clusterserviceversion.yaml + fi # Now promote the latest release to the root of the repository rm -Rf manifests @@ -101,7 +116,7 @@ for catalog in "${redhatCatalogs[@]}"; do # as well as the default. { echo " # Annotations to specify OCP versions compatibility." - echo " com.redhat.openshift.versions: v4.8-v4.13" + echo " com.redhat.openshift.versions: v${minOpenshiftVersion}-v${maxOpenshiftVersion}" echo " # Annotation to add default bundle channel as potential is declared" echo " operators.operatorframework.io.bundle.channel.default.v1: stable" echo " operatorframework.io/suggested-namespace: minio-operator" diff --git a/package.sh b/package.sh deleted file mode 100755 index ead4b5a9cbf..00000000000 --- a/package.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -binary=$(basename "$(dirname "${1}")") -if [[ "${binary}" =~ kubectl-minio* ]]; then - cp -f LICENSE "$(dirname "${1}")" - cp -f CREDITS "$(dirname "${1}")" - cp -f README.md "$(dirname "${1}")" - zip -q -r -j "${binary}.zip" "$(dirname "${1}")" -fi diff --git a/pkg/controller/events.go b/pkg/apis/job.min.io/register.go similarity index 66% rename from pkg/controller/events.go rename to pkg/apis/job.min.io/register.go index 79e9f7e9eef..6f9dd18c333 100644 --- a/pkg/controller/events.go +++ b/pkg/apis/job.min.io/register.go @@ -12,15 +12,9 @@ // You should have received a copy of the GNU Affero General Public License, version 3, // along with this program. If not, see -package controller +package operator -import ( - "context" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" +// MinIOJob group name. +const ( + GroupName = "job.min.io" ) - -// RegisterEvent creates an event for a given tenant -func (c *Controller) RegisterEvent(ctx context.Context, tenant *miniov2.Tenant, eventType, reason, message string) { - c.recorder.Event(tenant, eventType, reason, message) -} diff --git a/kubectl-minio/main.go b/pkg/apis/job.min.io/v1alpha1/doc.go similarity index 58% rename from kubectl-minio/main.go rename to pkg/apis/job.min.io/v1alpha1/doc.go index df77edb002e..a1a16c638e3 100644 --- a/kubectl-minio/main.go +++ b/pkg/apis/job.min.io/v1alpha1/doc.go @@ -1,5 +1,4 @@ -// This file is part of MinIO Operator -// Copyright (C) 2020, MinIO, Inc. +// Copyright (C) 2023, MinIO, Inc. // // This code is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License, version 3, @@ -13,21 +12,12 @@ // You should have received a copy of the GNU Affero General Public License, version 3, // along with this program. If not, see -package main +// +k8s:deepcopy-gen=package,register +// go:generate controller-gen crd:trivialVersions=true paths=. output:dir=. -import ( - "os" - - "github.com/minio/kubectl-minio/cmd" - "k8s.io/cli-runtime/pkg/genericclioptions" -) - -func main() { - if err := cmd.New(genericclioptions.IOStreams{ - In: os.Stdin, - Out: os.Stdout, - ErrOut: os.Stderr, - }).Execute(); err != nil { - os.Exit(1) - } -} +// Package v1alpha1 - The following parameters are specific to the `job.min.io/v1alpha1` MinIOJob CRD API. +// +// MinIOJob is an automated InfrastructureAsCode integrated with Minio Operator STS to configure MinIO Tenants. +// +groupName=job.min.io +// +versionName=v1alpha1 +package v1alpha1 diff --git a/pkg/apis/job.min.io/v1alpha1/register.go b/pkg/apis/job.min.io/v1alpha1/register.go new file mode 100644 index 00000000000..9e761c14276 --- /dev/null +++ b/pkg/apis/job.min.io/v1alpha1/register.go @@ -0,0 +1,57 @@ +// Copyright (C) 2022, MinIO, Inc. +// +// This code is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License, version 3, +// as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License, version 3, +// along with this program. If not, see + +package v1alpha1 + +import ( + operator "github.com/minio/operator/pkg/apis/job.min.io" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// Version specifies the API Version +const Version = "v1alpha1" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: operator.GroupName, Version: Version} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder collects the scheme builder functions for the MinIO + // Operator API. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + + // AddToScheme applies the SchemeBuilder functions to a specified scheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &MinIOJob{}, + &MinIOJobList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/pkg/apis/job.min.io/v1alpha1/types.go b/pkg/apis/job.min.io/v1alpha1/types.go new file mode 100644 index 00000000000..43f842f56c9 --- /dev/null +++ b/pkg/apis/job.min.io/v1alpha1/types.go @@ -0,0 +1,148 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Execution is the MinIO Job level execution policy +type Execution string + +const ( + // Parallel Run MC Jobs in parallel + Parallel Execution = "parallel" + // Sequential Run MC Jobs in sequential mode + Sequential Execution = "sequential" +) + +// FailureStrategy is the failure strategy at MinIO Job level +type FailureStrategy string + +const ( + // ContinueOnFailure indicates to MinIO Job to continue execution of following commands even in the case of the + // failure of a command + ContinueOnFailure FailureStrategy = "continueOnFailure" + + // StopOnFailure indicates to MinIO Job to stop execution of following commands even in the case of the failure + // of a command + StopOnFailure FailureStrategy = "stopOnFailure" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +k8s:defaulter-gen=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:scope=Namespaced,shortName=miniojob,singular=miniojob +// +kubebuilder:printcolumn:name="Tenant",type=string,JSONPath=`.spec.tenant.name` +// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.spec.status.phase` +// +kubebuilder:metadata:annotations=operator.min.io/version=v5.0.14 + +// MinIOJob is a top-level type. A client is created for it +type MinIOJob struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // *Required* + + // + // The root field for the MinIOJob object. + Spec MinIOJobSpec `json:"spec,omitempty"` + + // Status provides details of the state of the MinIOJob steps + // +optional + Status MinIOJobStatus `json:"status,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MinIOJobList is a top-level list type. +type MinIOJobList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty"` + + Items []MinIOJob `json:"items"` +} + +// MinIOJobSpec (`spec`) defines the configuration of a MinIOJob object. + +type MinIOJobSpec struct { + // *Required* + + // + // Service Account name for the jobs to run + ServiceAccountName string `json:"serviceAccountName"` + + // *Required* + + // + // TenantRef Reference for minio Tenant to eun the jobs against + TenantRef TenantRef `json:"tenant"` + + // Execution order of the jobs, either `parallel` or `sequential`. + // Defaults to `parallel` if not provided. + // +optional + // +kubebuilder:default=parallel + // +kubebuilder:validation:Enum=parallel;sequential; + Execution Execution `json:"execution"` + + // FailureStrategy is the forward plan in case of the failure of one or more MinioJob pods + // Either `stopOnFailure` or `continueOnFailure`, defaults to `continueOnFailure`. + // +optional + // +kubebuilder:default=continueOnFailure + // +kubebuilder:validation:Enum=continueOnFailure;stopOnFailure; + FailureStrategy FailureStrategy `json:"failureStrategy"` + + // *Required* + + // + // Commands List of MinioClient commands + Commands []CommandSpec `json:"commands"` + + // mc job image + // +optional + // +kubebuilder:default="minio/mc:latest" + MCImage string `json:"mcImage,omitempty"` +} + +// CommandSpec (`spec`) defines the configuration of a MinioClient Command. +type CommandSpec struct { + // *Required* + + // + // Operation is the MinioClient Action + Operation string `json:"op"` + + // Name is the Command Name, optional, required if want to reference it with `DependsOn` + // +optional + Name string `json:"name,omitempty"` + + // Args Arguments to pass to the action + // +optional + Args map[string]string `json:"args,omitempty"` + + // DependsOn List of named `command` in this MinioJob that have to be scheduled and executed before this command runs + // +optional + DependsOn []string `json:"dependsOn,omitempty"` +} + +// TenantRef Is the reference to the target tenant of the jobs +type TenantRef struct { + // *Required* + + Name string `json:"name"` + // *Required* + + Namespace string `json:"namespace"` +} + +// MinIOJobStatus Status of MinioJob resource +type MinIOJobStatus struct { + // +optional + Phase string `json:"phase"` + // +optional + CommandsStatus []CommandStatus `json:"commands"` + // +optional + Message string `json:"message"` +} + +// CommandStatus Status of MinioJob command execution +type CommandStatus struct { + // +optional + Name string `json:"name"` + // *Required* + + Result string `json:"result"` + // +optional + Message string `json:"message"` +} diff --git a/pkg/apis/job.min.io/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/job.min.io/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..2294b2d2bfc --- /dev/null +++ b/pkg/apis/job.min.io/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,192 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommandSpec) DeepCopyInto(out *CommandSpec) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.DependsOn != nil { + in, out := &in.DependsOn, &out.DependsOn + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommandSpec. +func (in *CommandSpec) DeepCopy() *CommandSpec { + if in == nil { + return nil + } + out := new(CommandSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommandStatus) DeepCopyInto(out *CommandStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommandStatus. +func (in *CommandStatus) DeepCopy() *CommandStatus { + if in == nil { + return nil + } + out := new(CommandStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MinIOJob) DeepCopyInto(out *MinIOJob) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MinIOJob. +func (in *MinIOJob) DeepCopy() *MinIOJob { + if in == nil { + return nil + } + out := new(MinIOJob) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MinIOJob) 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 *MinIOJobList) DeepCopyInto(out *MinIOJobList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MinIOJob, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MinIOJobList. +func (in *MinIOJobList) DeepCopy() *MinIOJobList { + if in == nil { + return nil + } + out := new(MinIOJobList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MinIOJobList) 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 *MinIOJobSpec) DeepCopyInto(out *MinIOJobSpec) { + *out = *in + out.TenantRef = in.TenantRef + if in.Commands != nil { + in, out := &in.Commands, &out.Commands + *out = make([]CommandSpec, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MinIOJobSpec. +func (in *MinIOJobSpec) DeepCopy() *MinIOJobSpec { + if in == nil { + return nil + } + out := new(MinIOJobSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MinIOJobStatus) DeepCopyInto(out *MinIOJobStatus) { + *out = *in + if in.CommandsStatus != nil { + in, out := &in.CommandsStatus, &out.CommandsStatus + *out = make([]CommandStatus, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MinIOJobStatus. +func (in *MinIOJobStatus) DeepCopy() *MinIOJobStatus { + if in == nil { + return nil + } + out := new(MinIOJobStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TenantRef) DeepCopyInto(out *TenantRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantRef. +func (in *TenantRef) DeepCopy() *TenantRef { + if in == nil { + return nil + } + out := new(TenantRef) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/apis/minio.min.io/v2/constants.go b/pkg/apis/minio.min.io/v2/constants.go index 2dd348c7210..9a59ad26f5f 100644 --- a/pkg/apis/minio.min.io/v2/constants.go +++ b/pkg/apis/minio.min.io/v2/constants.go @@ -97,7 +97,7 @@ const MinIOVolumeMountPath = "/export" const MinIOVolumeSubPath = "" // DefaultMinIOImage specifies the default MinIO Docker hub image -const DefaultMinIOImage = "minio/minio:RELEASE.2023-10-07T15-07-38Z" +const DefaultMinIOImage = "minio/minio:RELEASE.2024-03-15T01-07-19Z" // DefaultMinIOUpdateURL specifies the default MinIO URL where binaries are // pulled from during MinIO upgrades @@ -135,7 +135,7 @@ const ConsoleAdminPolicyName = "consoleAdmin" // KES Related Constants // DefaultKESImage specifies the latest KES Docker hub image -const DefaultKESImage = "minio/kes:2023-10-03T00-48-37Z" +const DefaultKESImage = "minio/kes:2024-03-13T17-52-13Z" // KESInstanceLabel is applied to the KES pods of a Tenant cluster const KESInstanceLabel = "v1.min.io/kes" diff --git a/pkg/apis/minio.min.io/v2/helper.go b/pkg/apis/minio.min.io/v2/helper.go index c5a88017a9c..8e49c874bc9 100644 --- a/pkg/apis/minio.min.io/v2/helper.go +++ b/pkg/apis/minio.min.io/v2/helper.go @@ -46,7 +46,7 @@ import ( "k8s.io/klog/v2" "github.com/golang-jwt/jwt" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) @@ -773,7 +773,6 @@ func (t *Tenant) CreateBuckets(minioClient *minio.Client, buckets ...Bucket) (cr }); err != nil { switch minio.ToErrorResponse(err).Code { case "BucketAlreadyOwnedByYou", "BucketAlreadyExists": - klog.Infof(err.Error()) continue default: return false, err diff --git a/pkg/apis/minio.min.io/v2/names.go b/pkg/apis/minio.min.io/v2/names.go index 29f1c859dd2..b0761f91080 100644 --- a/pkg/apis/minio.min.io/v2/names.go +++ b/pkg/apis/minio.min.io/v2/names.go @@ -25,9 +25,6 @@ const MinIOServerName = "minio" // KESContainerName specifies the default container name for KES const KESContainerName = "kes" -// InitContainerImage name for init container. -const InitContainerImage = "busybox:1.33.1" - // MinIO Related Names // MinIOStatefulSetNameForPool returns the name for MinIO StatefulSet diff --git a/pkg/apis/minio.min.io/v2/types.go b/pkg/apis/minio.min.io/v2/types.go index e2f8b8eec5a..cc576deb59b 100644 --- a/pkg/apis/minio.min.io/v2/types.go +++ b/pkg/apis/minio.min.io/v2/types.go @@ -30,6 +30,7 @@ import ( // +kubebuilder:resource:scope=Namespaced,shortName=tenant,singular=tenant // +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.currentState" // +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:metadata:annotations=operator.min.io/version=v5.0.14 // +kubebuilder:storageversion type Tenant struct { metav1.TypeMeta `json:",inline"` @@ -97,6 +98,8 @@ type Features struct { // For more complete documentation on this object, see the https://min.io/docs/minio/kubernetes/upstream/operations/installation.html[MinIO Kubernetes Documentation]. + type TenantSpec struct { // *Required* + + // +listType=map + // +listMapKey=name // // An array of objects describing each MinIO server pool deployed in the MinIO Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + // @@ -333,7 +336,7 @@ type TenantSpec struct { // // The Operator creates each user with the `consoleAdmin` policy by default. You can change the assigned policy after the Tenant starts. + // +optional - Users []*corev1.LocalObjectReference `json:"users,omitempty"` + Users []corev1.LocalObjectReference `json:"users,omitempty"` // *Optional* + // // Create buckets when creating a new tenant. Skip if bucket with given name already exists @@ -414,12 +417,12 @@ type LocalCertificateReference struct { type ExposeServices struct { // *Optional* + // - // Directs the Operator to expose the MinIO service. Defaults to `true`. + + // Directs the Operator to expose the MinIO service. Defaults to `false`. + // +optional MinIO bool `json:"minio,omitempty"` // *Optional* + // - // Directs the Operator to expose the MinIO Console service. Defaults to `true`. + + // Directs the Operator to expose the MinIO Console service. Defaults to `false`. + // +optional Console bool `json:"console,omitempty"` } @@ -612,18 +615,19 @@ type CustomCertificateConfig struct { // // See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. + type Pool struct { - // *Optional* + + // *Required* // // Specify the name of the pool. The Operator automatically generates the pool name if this field is omitted. - // +optional - Name string `json:"name,omitempty"` + Name string `json:"name"` // *Required* + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="servers is immutable" // // The number of MinIO server pods to deploy in the pool. The minimum value is `2`. // // The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + Servers int32 `json:"servers"` // *Required* + + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="volumesPerServer is immutable" // // The number of Persistent Volume Claims to generate for each MinIO server pod in the pool. + // @@ -860,6 +864,8 @@ type KESConfig struct { // * `seLinuxOptions` + // +optional SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty"` + // Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. + ContainerSecurityContext *corev1.SecurityContext `json:"containerSecurityContext,omitempty"` // *Optional* + // // If provided, the MinIO Operator adds the specified environment variables when deploying the KES resource. diff --git a/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go b/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go index a5d0b57007a..d0ea81be025 100644 --- a/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go +++ b/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go @@ -2,7 +2,7 @@ // +build !ignore_autogenerated // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -291,6 +291,11 @@ func (in *KESConfig) DeepCopyInto(out *KESConfig) { *out = new(v1.PodSecurityContext) (*in).DeepCopyInto(*out) } + if in.ContainerSecurityContext != nil { + in, out := &in.ContainerSecurityContext, &out.ContainerSecurityContext + *out = new(v1.SecurityContext) + (*in).DeepCopyInto(*out) + } if in.Env != nil { in, out := &in.Env, &out.Env *out = make([]v1.EnvVar, len(*in)) @@ -407,6 +412,11 @@ func (in *Pool) DeepCopyInto(out *Pool) { *out = new(string) **out = **in } + if in.ReclaimStorage != nil { + in, out := &in.ReclaimStorage, &out.ReclaimStorage + *out = new(bool) + **out = **in + } return } @@ -504,6 +514,11 @@ func (in *SideCars) DeepCopyInto(out *SideCars) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(v1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } return } @@ -729,14 +744,8 @@ func (in *TenantSpec) DeepCopyInto(out *TenantSpec) { } if in.Users != nil { in, out := &in.Users, &out.Users - *out = make([]*v1.LocalObjectReference, len(*in)) - for i := range *in { - if (*in)[i] != nil { - in, out := &(*in)[i], &(*out)[i] - *out = new(v1.LocalObjectReference) - **out = **in - } - } + *out = make([]v1.LocalObjectReference, len(*in)) + copy(*out, *in) } if in.Buckets != nil { in, out := &in.Buckets, &out.Buckets @@ -760,6 +769,20 @@ func (in *TenantSpec) DeepCopyInto(out *TenantSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdditionalVolumes != nil { + in, out := &in.AdditionalVolumes, &out.AdditionalVolumes + *out = make([]v1.Volume, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AdditionalVolumeMounts != nil { + in, out := &in.AdditionalVolumeMounts, &out.AdditionalVolumeMounts + *out = make([]v1.VolumeMount, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/pkg/apis/sts.min.io/v1alpha1/types.go b/pkg/apis/sts.min.io/v1alpha1/types.go index 660480822cc..84971ce3f40 100644 --- a/pkg/apis/sts.min.io/v1alpha1/types.go +++ b/pkg/apis/sts.min.io/v1alpha1/types.go @@ -25,6 +25,7 @@ import ( // +kubebuilder:resource:scope=Namespaced,shortName=policybinding,singular=policybinding // +kubebuilder:printcolumn:name="State",type="string",JSONPath=".status.currentState" // +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:metadata:annotations=operator.min.io/version=v5.0.14 // +kubebuilder:storageversion // PolicyBinding is a https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/[Kubernetes object] describing a MinIO PolicyBinding. diff --git a/pkg/apis/sts.min.io/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/sts.min.io/v1alpha1/zz_generated.deepcopy.go index 387b9d10a43..5dce41962f4 100644 --- a/pkg/apis/sts.min.io/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/sts.min.io/v1alpha1/zz_generated.deepcopy.go @@ -2,7 +2,7 @@ // +build !ignore_autogenerated // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/auth/idp/oauth2/provider.go b/pkg/auth/idp/oauth2/provider.go index e85b140f6a0..28e419bbb1b 100644 --- a/pkg/auth/idp/oauth2/provider.go +++ b/pkg/auth/idp/oauth2/provider.go @@ -34,7 +34,6 @@ import ( "github.com/minio/operator/pkg/auth/utils" "golang.org/x/crypto/pbkdf2" - "golang.org/x/oauth2" xoauth2 "golang.org/x/oauth2" ) @@ -207,7 +206,7 @@ func NewOauth2ProviderClient(scopes []string, r *http.Request, httpClient *http. ClientID: GetIDPClientID(), ClientSecret: GetIDPSecret(), RedirectURL: redirectURL, - Endpoint: oauth2.Endpoint{ + Endpoint: xoauth2.Endpoint{ AuthURL: ddoc.AuthEndpoint, TokenURL: ddoc.TokenEndpoint, }, @@ -281,7 +280,7 @@ func (o OpenIDPCfg) NewOauth2ProviderClient(name string, scopes []string, r *htt ClientID: o[name].ClientID, ClientSecret: o[name].ClientSecret, RedirectURL: redirectURL, - Endpoint: oauth2.Endpoint{ + Endpoint: xoauth2.Endpoint{ AuthURL: ddoc.AuthEndpoint, TokenURL: ddoc.TokenEndpoint, }, @@ -334,7 +333,7 @@ func (client *Provider) VerifyIdentity(ctx context.Context, code, state, roleARN return nil, err } getWebTokenExpiry := func() (*credentials.WebIdentityToken, error) { - customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.provHTTPClient) + customCtx := context.WithValue(ctx, xoauth2.HTTPClient, client.provHTTPClient) oauth2Token, err := client.oauth2Config.Exchange(customCtx, code) client.RefreshToken = oauth2Token.RefreshToken if err != nil { @@ -387,7 +386,7 @@ func (client *Provider) VerifyIdentityForOperator(ctx context.Context, code, sta if err := validateOauth2State(state, keyFunc); err != nil { return nil, err } - customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.provHTTPClient) + customCtx := context.WithValue(ctx, xoauth2.HTTPClient, client.provHTTPClient) oauth2Token, err := client.oauth2Config.Exchange(customCtx, code) if err != nil { return nil, err diff --git a/pkg/client/applyconfiguration/internal/internal.go b/pkg/client/applyconfiguration/internal/internal.go index f8947621d09..3e6cc682dfe 100644 --- a/pkg/client/applyconfiguration/internal/internal.go +++ b/pkg/client/applyconfiguration/internal/internal.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandspec.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandspec.go new file mode 100644 index 00000000000..e52a28de971 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandspec.go @@ -0,0 +1,74 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// CommandSpecApplyConfiguration represents an declarative configuration of the CommandSpec type for use +// with apply. +type CommandSpecApplyConfiguration struct { + Operation *string `json:"op,omitempty"` + Name *string `json:"name,omitempty"` + Args map[string]string `json:"args,omitempty"` + DependsOn []string `json:"dependsOn,omitempty"` +} + +// CommandSpecApplyConfiguration constructs an declarative configuration of the CommandSpec type for use with +// apply. +func CommandSpec() *CommandSpecApplyConfiguration { + return &CommandSpecApplyConfiguration{} +} + +// WithOperation sets the Operation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Operation field is set to the value of the last call. +func (b *CommandSpecApplyConfiguration) WithOperation(value string) *CommandSpecApplyConfiguration { + b.Operation = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CommandSpecApplyConfiguration) WithName(value string) *CommandSpecApplyConfiguration { + b.Name = &value + return b +} + +// WithArgs puts the entries into the Args field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Args field, +// overwriting an existing map entries in Args field with the same key. +func (b *CommandSpecApplyConfiguration) WithArgs(entries map[string]string) *CommandSpecApplyConfiguration { + if b.Args == nil && len(entries) > 0 { + b.Args = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Args[k] = v + } + return b +} + +// WithDependsOn adds the given value to the DependsOn field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the DependsOn field. +func (b *CommandSpecApplyConfiguration) WithDependsOn(values ...string) *CommandSpecApplyConfiguration { + for i := range values { + b.DependsOn = append(b.DependsOn, values[i]) + } + return b +} diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandstatus.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandstatus.go new file mode 100644 index 00000000000..460713b5660 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/commandstatus.go @@ -0,0 +1,57 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// CommandStatusApplyConfiguration represents an declarative configuration of the CommandStatus type for use +// with apply. +type CommandStatusApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Result *string `json:"result,omitempty"` + Message *string `json:"message,omitempty"` +} + +// CommandStatusApplyConfiguration constructs an declarative configuration of the CommandStatus type for use with +// apply. +func CommandStatus() *CommandStatusApplyConfiguration { + return &CommandStatusApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *CommandStatusApplyConfiguration) WithName(value string) *CommandStatusApplyConfiguration { + b.Name = &value + return b +} + +// WithResult sets the Result field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Result field is set to the value of the last call. +func (b *CommandStatusApplyConfiguration) WithResult(value string) *CommandStatusApplyConfiguration { + b.Result = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *CommandStatusApplyConfiguration) WithMessage(value string) *CommandStatusApplyConfiguration { + b.Message = &value + return b +} diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojob.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojob.go new file mode 100644 index 00000000000..51d4aaa84f9 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojob.go @@ -0,0 +1,219 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// MinIOJobApplyConfiguration represents an declarative configuration of the MinIOJob type for use +// with apply. +type MinIOJobApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *MinIOJobSpecApplyConfiguration `json:"spec,omitempty"` + Status *MinIOJobStatusApplyConfiguration `json:"status,omitempty"` +} + +// MinIOJob constructs an declarative configuration of the MinIOJob type for use with +// apply. +func MinIOJob(name, namespace string) *MinIOJobApplyConfiguration { + b := &MinIOJobApplyConfiguration{} + b.WithName(name) + b.WithNamespace(namespace) + b.WithKind("MinIOJob") + b.WithAPIVersion("job.min.io/v1alpha1") + return b +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithKind(value string) *MinIOJobApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithAPIVersion(value string) *MinIOJobApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithName(value string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithGenerateName(value string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithNamespace(value string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithUID(value types.UID) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithResourceVersion(value string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithGeneration(value int64) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithCreationTimestamp(value metav1.Time) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *MinIOJobApplyConfiguration) WithLabels(entries map[string]string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *MinIOJobApplyConfiguration) WithAnnotations(entries map[string]string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *MinIOJobApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *MinIOJobApplyConfiguration) WithFinalizers(values ...string) *MinIOJobApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *MinIOJobApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithSpec(value *MinIOJobSpecApplyConfiguration) *MinIOJobApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *MinIOJobApplyConfiguration) WithStatus(value *MinIOJobStatusApplyConfiguration) *MinIOJobApplyConfiguration { + b.Status = value + return b +} diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobspec.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobspec.go new file mode 100644 index 00000000000..b5101c99fb0 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobspec.go @@ -0,0 +1,93 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + jobminiov1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" +) + +// MinIOJobSpecApplyConfiguration represents an declarative configuration of the MinIOJobSpec type for use +// with apply. +type MinIOJobSpecApplyConfiguration struct { + ServiceAccountName *string `json:"serviceAccountName,omitempty"` + TenantRef *TenantRefApplyConfiguration `json:"tenant,omitempty"` + Execution *jobminiov1alpha1.Execution `json:"execution,omitempty"` + FailureStrategy *jobminiov1alpha1.FailureStrategy `json:"failureStrategy,omitempty"` + Commands []CommandSpecApplyConfiguration `json:"commands,omitempty"` + MCImage *string `json:"mcImage,omitempty"` +} + +// MinIOJobSpecApplyConfiguration constructs an declarative configuration of the MinIOJobSpec type for use with +// apply. +func MinIOJobSpec() *MinIOJobSpecApplyConfiguration { + return &MinIOJobSpecApplyConfiguration{} +} + +// WithServiceAccountName sets the ServiceAccountName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ServiceAccountName field is set to the value of the last call. +func (b *MinIOJobSpecApplyConfiguration) WithServiceAccountName(value string) *MinIOJobSpecApplyConfiguration { + b.ServiceAccountName = &value + return b +} + +// WithTenantRef sets the TenantRef field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TenantRef field is set to the value of the last call. +func (b *MinIOJobSpecApplyConfiguration) WithTenantRef(value *TenantRefApplyConfiguration) *MinIOJobSpecApplyConfiguration { + b.TenantRef = value + return b +} + +// WithExecution sets the Execution field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Execution field is set to the value of the last call. +func (b *MinIOJobSpecApplyConfiguration) WithExecution(value jobminiov1alpha1.Execution) *MinIOJobSpecApplyConfiguration { + b.Execution = &value + return b +} + +// WithFailureStrategy sets the FailureStrategy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FailureStrategy field is set to the value of the last call. +func (b *MinIOJobSpecApplyConfiguration) WithFailureStrategy(value jobminiov1alpha1.FailureStrategy) *MinIOJobSpecApplyConfiguration { + b.FailureStrategy = &value + return b +} + +// WithCommands adds the given value to the Commands field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Commands field. +func (b *MinIOJobSpecApplyConfiguration) WithCommands(values ...*CommandSpecApplyConfiguration) *MinIOJobSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithCommands") + } + b.Commands = append(b.Commands, *values[i]) + } + return b +} + +// WithMCImage sets the MCImage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MCImage field is set to the value of the last call. +func (b *MinIOJobSpecApplyConfiguration) WithMCImage(value string) *MinIOJobSpecApplyConfiguration { + b.MCImage = &value + return b +} diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobstatus.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobstatus.go new file mode 100644 index 00000000000..9518387b464 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/miniojobstatus.go @@ -0,0 +1,62 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// MinIOJobStatusApplyConfiguration represents an declarative configuration of the MinIOJobStatus type for use +// with apply. +type MinIOJobStatusApplyConfiguration struct { + Phase *string `json:"phase,omitempty"` + CommandsStatus []CommandStatusApplyConfiguration `json:"commands,omitempty"` + Message *string `json:"message,omitempty"` +} + +// MinIOJobStatusApplyConfiguration constructs an declarative configuration of the MinIOJobStatus type for use with +// apply. +func MinIOJobStatus() *MinIOJobStatusApplyConfiguration { + return &MinIOJobStatusApplyConfiguration{} +} + +// WithPhase sets the Phase field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Phase field is set to the value of the last call. +func (b *MinIOJobStatusApplyConfiguration) WithPhase(value string) *MinIOJobStatusApplyConfiguration { + b.Phase = &value + return b +} + +// WithCommandsStatus adds the given value to the CommandsStatus field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CommandsStatus field. +func (b *MinIOJobStatusApplyConfiguration) WithCommandsStatus(values ...*CommandStatusApplyConfiguration) *MinIOJobStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithCommandsStatus") + } + b.CommandsStatus = append(b.CommandsStatus, *values[i]) + } + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *MinIOJobStatusApplyConfiguration) WithMessage(value string) *MinIOJobStatusApplyConfiguration { + b.Message = &value + return b +} diff --git a/pkg/client/applyconfiguration/job.min.io/v1alpha1/tenantref.go b/pkg/client/applyconfiguration/job.min.io/v1alpha1/tenantref.go new file mode 100644 index 00000000000..35f7eab4487 --- /dev/null +++ b/pkg/client/applyconfiguration/job.min.io/v1alpha1/tenantref.go @@ -0,0 +1,48 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// TenantRefApplyConfiguration represents an declarative configuration of the TenantRef type for use +// with apply. +type TenantRefApplyConfiguration struct { + Name *string `json:"name,omitempty"` + Namespace *string `json:"namespace,omitempty"` +} + +// TenantRefApplyConfiguration constructs an declarative configuration of the TenantRef type for use with +// apply. +func TenantRef() *TenantRefApplyConfiguration { + return &TenantRefApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *TenantRefApplyConfiguration) WithName(value string) *TenantRefApplyConfiguration { + b.Name = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *TenantRefApplyConfiguration) WithNamespace(value string) *TenantRefApplyConfiguration { + b.Namespace = &value + return b +} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/auditconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/auditconfig.go deleted file mode 100644 index afe9ac04d50..00000000000 --- a/pkg/client/applyconfiguration/minio.min.io/v2/auditconfig.go +++ /dev/null @@ -1,39 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v2 - -// AuditConfigApplyConfiguration represents an declarative configuration of the AuditConfig type for use -// with apply. -type AuditConfigApplyConfiguration struct { - DiskCapacityGB *int `json:"diskCapacityGB,omitempty"` -} - -// AuditConfigApplyConfiguration constructs an declarative configuration of the AuditConfig type for use with -// apply. -func AuditConfig() *AuditConfigApplyConfiguration { - return &AuditConfigApplyConfiguration{} -} - -// WithDiskCapacityGB sets the DiskCapacityGB field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DiskCapacityGB field is set to the value of the last call. -func (b *AuditConfigApplyConfiguration) WithDiskCapacityGB(value int) *AuditConfigApplyConfiguration { - b.DiskCapacityGB = &value - return b -} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/bucket.go b/pkg/client/applyconfiguration/minio.min.io/v2/bucket.go index cec561d23bb..fdb26667dce 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/bucket.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/bucket.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/certificateconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/certificateconfig.go index dfe17b043bb..272a19ea38f 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/certificateconfig.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/certificateconfig.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/certificatestatus.go b/pkg/client/applyconfiguration/minio.min.io/v2/certificatestatus.go index e79c887ec57..efbd929ff69 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/certificatestatus.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/certificatestatus.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/customcertificateconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/customcertificateconfig.go index 0e94e32b5aa..e3a09487c21 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/customcertificateconfig.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/customcertificateconfig.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/customcertificates.go b/pkg/client/applyconfiguration/minio.min.io/v2/customcertificates.go index 90158e022c7..08a64f20395 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/customcertificates.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/customcertificates.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/exposeservices.go b/pkg/client/applyconfiguration/minio.min.io/v2/exposeservices.go index 4e4005e13f4..6aa22504c7f 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/exposeservices.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/exposeservices.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/features.go b/pkg/client/applyconfiguration/minio.min.io/v2/features.go index 4da0ab0ee9e..0d3bb3c1db6 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/features.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/features.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/kesconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/kesconfig.go index 2f9fea8f4be..c9b4ce7b83c 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/kesconfig.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/kesconfig.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -43,6 +43,7 @@ type KESConfigApplyConfiguration struct { TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` KeyName *string `json:"keyName,omitempty"` SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"` + ContainerSecurityContext *v1.SecurityContext `json:"containerSecurityContext,omitempty"` Env []v1.EnvVar `json:"env,omitempty"` } @@ -218,6 +219,14 @@ func (b *KESConfigApplyConfiguration) WithSecurityContext(value v1.PodSecurityCo return b } +// WithContainerSecurityContext sets the ContainerSecurityContext field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ContainerSecurityContext field is set to the value of the last call. +func (b *KESConfigApplyConfiguration) WithContainerSecurityContext(value v1.SecurityContext) *KESConfigApplyConfiguration { + b.ContainerSecurityContext = &value + return b +} + // WithEnv adds the given value to the Env field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Env field. diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/localcertificatereference.go b/pkg/client/applyconfiguration/minio.min.io/v2/localcertificatereference.go index f2a9378f67e..e6ddf162935 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/localcertificatereference.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/localcertificatereference.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/logconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/logconfig.go deleted file mode 100644 index 2023c2cf100..00000000000 --- a/pkg/client/applyconfiguration/minio.min.io/v2/logconfig.go +++ /dev/null @@ -1,175 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v2 - -import ( - v1 "k8s.io/api/core/v1" -) - -// LogConfigApplyConfiguration represents an declarative configuration of the LogConfig type for use -// with apply. -type LogConfigApplyConfiguration struct { - Image *string `json:"image,omitempty"` - Resources *v1.ResourceRequirements `json:"resources,omitempty"` - NodeSelector map[string]string `json:"nodeSelector,omitempty"` - Affinity *v1.Affinity `json:"affinity,omitempty"` - Tolerations []v1.Toleration `json:"tolerations,omitempty"` - TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` - Annotations map[string]string `json:"annotations,omitempty"` - Labels map[string]string `json:"labels,omitempty"` - Db *LogDbConfigApplyConfiguration `json:"db,omitempty"` - Audit *AuditConfigApplyConfiguration `json:"audit,omitempty"` - SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"` - ServiceAccountName *string `json:"serviceAccountName,omitempty"` - Env []v1.EnvVar `json:"env,omitempty"` -} - -// LogConfigApplyConfiguration constructs an declarative configuration of the LogConfig type for use with -// apply. -func LogConfig() *LogConfigApplyConfiguration { - return &LogConfigApplyConfiguration{} -} - -// WithImage sets the Image field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Image field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithImage(value string) *LogConfigApplyConfiguration { - b.Image = &value - return b -} - -// WithResources sets the Resources field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Resources field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithResources(value v1.ResourceRequirements) *LogConfigApplyConfiguration { - b.Resources = &value - return b -} - -// WithNodeSelector puts the entries into the NodeSelector field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the NodeSelector field, -// overwriting an existing map entries in NodeSelector field with the same key. -func (b *LogConfigApplyConfiguration) WithNodeSelector(entries map[string]string) *LogConfigApplyConfiguration { - if b.NodeSelector == nil && len(entries) > 0 { - b.NodeSelector = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.NodeSelector[k] = v - } - return b -} - -// WithAffinity sets the Affinity field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Affinity field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithAffinity(value v1.Affinity) *LogConfigApplyConfiguration { - b.Affinity = &value - return b -} - -// WithTolerations adds the given value to the Tolerations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Tolerations field. -func (b *LogConfigApplyConfiguration) WithTolerations(values ...v1.Toleration) *LogConfigApplyConfiguration { - for i := range values { - b.Tolerations = append(b.Tolerations, values[i]) - } - return b -} - -// WithTopologySpreadConstraints adds the given value to the TopologySpreadConstraints field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the TopologySpreadConstraints field. -func (b *LogConfigApplyConfiguration) WithTopologySpreadConstraints(values ...v1.TopologySpreadConstraint) *LogConfigApplyConfiguration { - for i := range values { - b.TopologySpreadConstraints = append(b.TopologySpreadConstraints, values[i]) - } - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *LogConfigApplyConfiguration) WithAnnotations(entries map[string]string) *LogConfigApplyConfiguration { - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *LogConfigApplyConfiguration) WithLabels(entries map[string]string) *LogConfigApplyConfiguration { - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithDb sets the Db field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Db field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithDb(value *LogDbConfigApplyConfiguration) *LogConfigApplyConfiguration { - b.Db = value - return b -} - -// WithAudit sets the Audit field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Audit field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithAudit(value *AuditConfigApplyConfiguration) *LogConfigApplyConfiguration { - b.Audit = value - return b -} - -// WithSecurityContext sets the SecurityContext field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SecurityContext field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithSecurityContext(value v1.PodSecurityContext) *LogConfigApplyConfiguration { - b.SecurityContext = &value - return b -} - -// WithServiceAccountName sets the ServiceAccountName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ServiceAccountName field is set to the value of the last call. -func (b *LogConfigApplyConfiguration) WithServiceAccountName(value string) *LogConfigApplyConfiguration { - b.ServiceAccountName = &value - return b -} - -// WithEnv adds the given value to the Env field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Env field. -func (b *LogConfigApplyConfiguration) WithEnv(values ...v1.EnvVar) *LogConfigApplyConfiguration { - for i := range values { - b.Env = append(b.Env, values[i]) - } - return b -} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/logdbconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/logdbconfig.go deleted file mode 100644 index d9dcab9629b..00000000000 --- a/pkg/client/applyconfiguration/minio.min.io/v2/logdbconfig.go +++ /dev/null @@ -1,175 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v2 - -import ( - v1 "k8s.io/api/core/v1" -) - -// LogDbConfigApplyConfiguration represents an declarative configuration of the LogDbConfig type for use -// with apply. -type LogDbConfigApplyConfiguration struct { - Image *string `json:"image,omitempty"` - InitImage *string `json:"initimage,omitempty"` - VolumeClaimTemplate *v1.PersistentVolumeClaim `json:"volumeClaimTemplate,omitempty"` - Resources *v1.ResourceRequirements `json:"resources,omitempty"` - NodeSelector map[string]string `json:"nodeSelector,omitempty"` - Affinity *v1.Affinity `json:"affinity,omitempty"` - Tolerations []v1.Toleration `json:"tolerations,omitempty"` - TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` - Annotations map[string]string `json:"annotations,omitempty"` - Labels map[string]string `json:"labels,omitempty"` - SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"` - ServiceAccountName *string `json:"serviceAccountName,omitempty"` - Env []v1.EnvVar `json:"env,omitempty"` -} - -// LogDbConfigApplyConfiguration constructs an declarative configuration of the LogDbConfig type for use with -// apply. -func LogDbConfig() *LogDbConfigApplyConfiguration { - return &LogDbConfigApplyConfiguration{} -} - -// WithImage sets the Image field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Image field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithImage(value string) *LogDbConfigApplyConfiguration { - b.Image = &value - return b -} - -// WithInitImage sets the InitImage field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the InitImage field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithInitImage(value string) *LogDbConfigApplyConfiguration { - b.InitImage = &value - return b -} - -// WithVolumeClaimTemplate sets the VolumeClaimTemplate field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the VolumeClaimTemplate field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithVolumeClaimTemplate(value v1.PersistentVolumeClaim) *LogDbConfigApplyConfiguration { - b.VolumeClaimTemplate = &value - return b -} - -// WithResources sets the Resources field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Resources field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithResources(value v1.ResourceRequirements) *LogDbConfigApplyConfiguration { - b.Resources = &value - return b -} - -// WithNodeSelector puts the entries into the NodeSelector field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the NodeSelector field, -// overwriting an existing map entries in NodeSelector field with the same key. -func (b *LogDbConfigApplyConfiguration) WithNodeSelector(entries map[string]string) *LogDbConfigApplyConfiguration { - if b.NodeSelector == nil && len(entries) > 0 { - b.NodeSelector = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.NodeSelector[k] = v - } - return b -} - -// WithAffinity sets the Affinity field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Affinity field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithAffinity(value v1.Affinity) *LogDbConfigApplyConfiguration { - b.Affinity = &value - return b -} - -// WithTolerations adds the given value to the Tolerations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Tolerations field. -func (b *LogDbConfigApplyConfiguration) WithTolerations(values ...v1.Toleration) *LogDbConfigApplyConfiguration { - for i := range values { - b.Tolerations = append(b.Tolerations, values[i]) - } - return b -} - -// WithTopologySpreadConstraints adds the given value to the TopologySpreadConstraints field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the TopologySpreadConstraints field. -func (b *LogDbConfigApplyConfiguration) WithTopologySpreadConstraints(values ...v1.TopologySpreadConstraint) *LogDbConfigApplyConfiguration { - for i := range values { - b.TopologySpreadConstraints = append(b.TopologySpreadConstraints, values[i]) - } - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *LogDbConfigApplyConfiguration) WithAnnotations(entries map[string]string) *LogDbConfigApplyConfiguration { - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *LogDbConfigApplyConfiguration) WithLabels(entries map[string]string) *LogDbConfigApplyConfiguration { - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithSecurityContext sets the SecurityContext field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SecurityContext field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithSecurityContext(value v1.PodSecurityContext) *LogDbConfigApplyConfiguration { - b.SecurityContext = &value - return b -} - -// WithServiceAccountName sets the ServiceAccountName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ServiceAccountName field is set to the value of the last call. -func (b *LogDbConfigApplyConfiguration) WithServiceAccountName(value string) *LogDbConfigApplyConfiguration { - b.ServiceAccountName = &value - return b -} - -// WithEnv adds the given value to the Env field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Env field. -func (b *LogDbConfigApplyConfiguration) WithEnv(values ...v1.EnvVar) *LogDbConfigApplyConfiguration { - for i := range values { - b.Env = append(b.Env, values[i]) - } - return b -} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/logging.go b/pkg/client/applyconfiguration/minio.min.io/v2/logging.go index a2a8dd7d215..8367044a677 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/logging.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/logging.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/pool.go b/pkg/client/applyconfiguration/minio.min.io/v2/pool.go index b8cf99b462f..61d1e389986 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/pool.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/pool.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -39,6 +39,7 @@ type PoolApplyConfiguration struct { Annotations map[string]string `json:"annotations,omitempty"` Labels map[string]string `json:"labels,omitempty"` RuntimeClassName *string `json:"runtimeClassName,omitempty"` + ReclaimStorage *bool `json:"reclaimStorage,omitempty"` } // PoolApplyConfiguration constructs an declarative configuration of the Pool type for use with @@ -180,3 +181,11 @@ func (b *PoolApplyConfiguration) WithRuntimeClassName(value string) *PoolApplyCo b.RuntimeClassName = &value return b } + +// WithReclaimStorage sets the ReclaimStorage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ReclaimStorage field is set to the value of the last call. +func (b *PoolApplyConfiguration) WithReclaimStorage(value bool) *PoolApplyConfiguration { + b.ReclaimStorage = &value + return b +} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/poolstatus.go b/pkg/client/applyconfiguration/minio.min.io/v2/poolstatus.go index 266737bd9c4..c663c74be02 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/poolstatus.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/poolstatus.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/prometheusconfig.go b/pkg/client/applyconfiguration/minio.min.io/v2/prometheusconfig.go deleted file mode 100644 index dc116d079b5..00000000000 --- a/pkg/client/applyconfiguration/minio.min.io/v2/prometheusconfig.go +++ /dev/null @@ -1,193 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v2 - -import ( - v1 "k8s.io/api/core/v1" -) - -// PrometheusConfigApplyConfiguration represents an declarative configuration of the PrometheusConfig type for use -// with apply. -type PrometheusConfigApplyConfiguration struct { - Image *string `json:"image,omitempty"` - SideCarImage *string `json:"sidecarimage,omitempty"` - InitImage *string `json:"initimage,omitempty"` - DiskCapacityDB *int `json:"diskCapacityGB,omitempty"` - StorageClassName *string `json:"storageClassName,omitempty"` - Annotations map[string]string `json:"annotations,omitempty"` - Labels map[string]string `json:"labels,omitempty"` - NodeSelector map[string]string `json:"nodeSelector,omitempty"` - Affinity *v1.Affinity `json:"affinity,omitempty"` - Tolerations []v1.Toleration `json:"tolerations,omitempty"` - TopologySpreadConstraints []v1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` - Resources *v1.ResourceRequirements `json:"resources,omitempty"` - SecurityContext *v1.PodSecurityContext `json:"securityContext,omitempty"` - ServiceAccountName *string `json:"serviceAccountName,omitempty"` - Env []v1.EnvVar `json:"env,omitempty"` -} - -// PrometheusConfigApplyConfiguration constructs an declarative configuration of the PrometheusConfig type for use with -// apply. -func PrometheusConfig() *PrometheusConfigApplyConfiguration { - return &PrometheusConfigApplyConfiguration{} -} - -// WithImage sets the Image field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Image field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithImage(value string) *PrometheusConfigApplyConfiguration { - b.Image = &value - return b -} - -// WithSideCarImage sets the SideCarImage field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SideCarImage field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithSideCarImage(value string) *PrometheusConfigApplyConfiguration { - b.SideCarImage = &value - return b -} - -// WithInitImage sets the InitImage field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the InitImage field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithInitImage(value string) *PrometheusConfigApplyConfiguration { - b.InitImage = &value - return b -} - -// WithDiskCapacityDB sets the DiskCapacityDB field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the DiskCapacityDB field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithDiskCapacityDB(value int) *PrometheusConfigApplyConfiguration { - b.DiskCapacityDB = &value - return b -} - -// WithStorageClassName sets the StorageClassName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the StorageClassName field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithStorageClassName(value string) *PrometheusConfigApplyConfiguration { - b.StorageClassName = &value - return b -} - -// WithAnnotations puts the entries into the Annotations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Annotations field, -// overwriting an existing map entries in Annotations field with the same key. -func (b *PrometheusConfigApplyConfiguration) WithAnnotations(entries map[string]string) *PrometheusConfigApplyConfiguration { - if b.Annotations == nil && len(entries) > 0 { - b.Annotations = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Annotations[k] = v - } - return b -} - -// WithLabels puts the entries into the Labels field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the Labels field, -// overwriting an existing map entries in Labels field with the same key. -func (b *PrometheusConfigApplyConfiguration) WithLabels(entries map[string]string) *PrometheusConfigApplyConfiguration { - if b.Labels == nil && len(entries) > 0 { - b.Labels = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.Labels[k] = v - } - return b -} - -// WithNodeSelector puts the entries into the NodeSelector field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, the entries provided by each call will be put on the NodeSelector field, -// overwriting an existing map entries in NodeSelector field with the same key. -func (b *PrometheusConfigApplyConfiguration) WithNodeSelector(entries map[string]string) *PrometheusConfigApplyConfiguration { - if b.NodeSelector == nil && len(entries) > 0 { - b.NodeSelector = make(map[string]string, len(entries)) - } - for k, v := range entries { - b.NodeSelector[k] = v - } - return b -} - -// WithAffinity sets the Affinity field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Affinity field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithAffinity(value v1.Affinity) *PrometheusConfigApplyConfiguration { - b.Affinity = &value - return b -} - -// WithTolerations adds the given value to the Tolerations field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Tolerations field. -func (b *PrometheusConfigApplyConfiguration) WithTolerations(values ...v1.Toleration) *PrometheusConfigApplyConfiguration { - for i := range values { - b.Tolerations = append(b.Tolerations, values[i]) - } - return b -} - -// WithTopologySpreadConstraints adds the given value to the TopologySpreadConstraints field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the TopologySpreadConstraints field. -func (b *PrometheusConfigApplyConfiguration) WithTopologySpreadConstraints(values ...v1.TopologySpreadConstraint) *PrometheusConfigApplyConfiguration { - for i := range values { - b.TopologySpreadConstraints = append(b.TopologySpreadConstraints, values[i]) - } - return b -} - -// WithResources sets the Resources field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Resources field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithResources(value v1.ResourceRequirements) *PrometheusConfigApplyConfiguration { - b.Resources = &value - return b -} - -// WithSecurityContext sets the SecurityContext field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the SecurityContext field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithSecurityContext(value v1.PodSecurityContext) *PrometheusConfigApplyConfiguration { - b.SecurityContext = &value - return b -} - -// WithServiceAccountName sets the ServiceAccountName field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ServiceAccountName field is set to the value of the last call. -func (b *PrometheusConfigApplyConfiguration) WithServiceAccountName(value string) *PrometheusConfigApplyConfiguration { - b.ServiceAccountName = &value - return b -} - -// WithEnv adds the given value to the Env field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the Env field. -func (b *PrometheusConfigApplyConfiguration) WithEnv(values ...v1.EnvVar) *PrometheusConfigApplyConfiguration { - for i := range values { - b.Env = append(b.Env, values[i]) - } - return b -} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/s3features.go b/pkg/client/applyconfiguration/minio.min.io/v2/s3features.go deleted file mode 100644 index 5490c642ae2..00000000000 --- a/pkg/client/applyconfiguration/minio.min.io/v2/s3features.go +++ /dev/null @@ -1,39 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v2 - -// S3FeaturesApplyConfiguration represents an declarative configuration of the S3Features type for use -// with apply. -type S3FeaturesApplyConfiguration struct { - BucketDNS *bool `json:"bucketDNS,omitempty"` -} - -// S3FeaturesApplyConfiguration constructs an declarative configuration of the S3Features type for use with -// apply. -func S3Features() *S3FeaturesApplyConfiguration { - return &S3FeaturesApplyConfiguration{} -} - -// WithBucketDNS sets the BucketDNS field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the BucketDNS field is set to the value of the last call. -func (b *S3FeaturesApplyConfiguration) WithBucketDNS(value bool) *S3FeaturesApplyConfiguration { - b.BucketDNS = &value - return b -} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/servicemetadata.go b/pkg/client/applyconfiguration/minio.min.io/v2/servicemetadata.go index 490e825b615..4d60a73fae1 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/servicemetadata.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/servicemetadata.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/sidecars.go b/pkg/client/applyconfiguration/minio.min.io/v2/sidecars.go index 2dedd201dd1..cbc92e64c18 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/sidecars.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/sidecars.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -28,6 +28,7 @@ type SideCarsApplyConfiguration struct { Containers []v1.Container `json:"containers,omitempty"` VolumeClaimTemplates []v1.PersistentVolumeClaim `json:"volumeClaimTemplates,omitempty"` Volumes []v1.Volume `json:"volumes,omitempty"` + Resources *v1.ResourceRequirements `json:"resources,omitempty"` } // SideCarsApplyConfiguration constructs an declarative configuration of the SideCars type for use with @@ -65,3 +66,11 @@ func (b *SideCarsApplyConfiguration) WithVolumes(values ...v1.Volume) *SideCarsA } return b } + +// WithResources sets the Resources field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Resources field is set to the value of the last call. +func (b *SideCarsApplyConfiguration) WithResources(value v1.ResourceRequirements) *SideCarsApplyConfiguration { + b.Resources = &value + return b +} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenant.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenant.go index c226e57d909..94901c07aec 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenant.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenant.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenantdomains.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenantdomains.go index 11aec624d19..a0caeb49780 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenantdomains.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenantdomains.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenantscheduler.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenantscheduler.go index 56bcd1689b1..ab1b74a073f 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenantscheduler.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenantscheduler.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenantspec.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenantspec.go index 8f36eef2b3e..487e376ef46 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenantspec.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenantspec.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -53,10 +53,13 @@ type TenantSpecApplyConfiguration struct { SideCars *SideCarsApplyConfiguration `json:"sideCars,omitempty"` ExposeServices *ExposeServicesApplyConfiguration `json:"exposeServices,omitempty"` ServiceMetadata *ServiceMetadataApplyConfiguration `json:"serviceMetadata,omitempty"` - Users []*v1.LocalObjectReference `json:"users,omitempty"` + Users []v1.LocalObjectReference `json:"users,omitempty"` Buckets []BucketApplyConfiguration `json:"buckets,omitempty"` Logging *LoggingApplyConfiguration `json:"logging,omitempty"` Configuration *v1.LocalObjectReference `json:"configuration,omitempty"` + InitContainers []v1.Container `json:"initContainers,omitempty"` + AdditionalVolumes []v1.Volume `json:"additionalVolumes,omitempty"` + AdditionalVolumeMounts []v1.VolumeMount `json:"additionalVolumeMounts,omitempty"` } // TenantSpecApplyConfiguration constructs an declarative configuration of the TenantSpec type for use with @@ -298,11 +301,8 @@ func (b *TenantSpecApplyConfiguration) WithServiceMetadata(value *ServiceMetadat // WithUsers adds the given value to the Users field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Users field. -func (b *TenantSpecApplyConfiguration) WithUsers(values ...*v1.LocalObjectReference) *TenantSpecApplyConfiguration { +func (b *TenantSpecApplyConfiguration) WithUsers(values ...v1.LocalObjectReference) *TenantSpecApplyConfiguration { for i := range values { - if values[i] == nil { - panic("nil value passed to WithUsers") - } b.Users = append(b.Users, values[i]) } return b @@ -336,3 +336,33 @@ func (b *TenantSpecApplyConfiguration) WithConfiguration(value v1.LocalObjectRef b.Configuration = &value return b } + +// WithInitContainers adds the given value to the InitContainers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the InitContainers field. +func (b *TenantSpecApplyConfiguration) WithInitContainers(values ...v1.Container) *TenantSpecApplyConfiguration { + for i := range values { + b.InitContainers = append(b.InitContainers, values[i]) + } + return b +} + +// WithAdditionalVolumes adds the given value to the AdditionalVolumes field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AdditionalVolumes field. +func (b *TenantSpecApplyConfiguration) WithAdditionalVolumes(values ...v1.Volume) *TenantSpecApplyConfiguration { + for i := range values { + b.AdditionalVolumes = append(b.AdditionalVolumes, values[i]) + } + return b +} + +// WithAdditionalVolumeMounts adds the given value to the AdditionalVolumeMounts field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AdditionalVolumeMounts field. +func (b *TenantSpecApplyConfiguration) WithAdditionalVolumeMounts(values ...v1.VolumeMount) *TenantSpecApplyConfiguration { + for i := range values { + b.AdditionalVolumeMounts = append(b.AdditionalVolumeMounts, values[i]) + } + return b +} diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenantstatus.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenantstatus.go index d0dad817d87..825333518c3 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenantstatus.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenantstatus.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tenantusage.go b/pkg/client/applyconfiguration/minio.min.io/v2/tenantusage.go index a7ee20e2f24..0048bdfb355 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tenantusage.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tenantusage.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/tierusage.go b/pkg/client/applyconfiguration/minio.min.io/v2/tierusage.go index a6cac167924..d76fdd73bb6 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/tierusage.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/tierusage.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/application.go b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/application.go index 83c93335ae7..65edc593941 100644 --- a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/application.go +++ b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/application.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybinding.go b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybinding.go index f8e98d4dada..7ec3e5f80c8 100644 --- a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybinding.go +++ b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybinding.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingspec.go b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingspec.go index 7eee72667f7..f10cfa65136 100644 --- a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingspec.go +++ b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingspec.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingstatus.go b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingstatus.go index cf51856c5b1..0609e29e7c0 100644 --- a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingstatus.go +++ b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingstatus.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingusage.go b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingusage.go index 1407845b651..83c4ab833f5 100644 --- a/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingusage.go +++ b/pkg/client/applyconfiguration/sts.min.io/v1alpha1/policybindingusage.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/applyconfiguration/utils.go b/pkg/client/applyconfiguration/utils.go index e5008a1dd62..466234e27e3 100644 --- a/pkg/client/applyconfiguration/utils.go +++ b/pkg/client/applyconfiguration/utils.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -19,10 +19,12 @@ package applyconfiguration import ( + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" + stsminiov1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" + jobminiov1alpha1 "github.com/minio/operator/pkg/client/applyconfiguration/job.min.io/v1alpha1" miniominiov2 "github.com/minio/operator/pkg/client/applyconfiguration/minio.min.io/v2" - stsminiov1alpha1 "github.com/minio/operator/pkg/client/applyconfiguration/sts.min.io/v1alpha1" + applyconfigurationstsminiov1alpha1 "github.com/minio/operator/pkg/client/applyconfiguration/sts.min.io/v1alpha1" schema "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -30,7 +32,21 @@ import ( // apply configuration type exists for the given GroupVersionKind. func ForKind(kind schema.GroupVersionKind) interface{} { switch kind { - // Group=minio.min.io, Version=v2 + // Group=job.min.io, Version=v1alpha1 + case v1alpha1.SchemeGroupVersion.WithKind("CommandSpec"): + return &jobminiov1alpha1.CommandSpecApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("CommandStatus"): + return &jobminiov1alpha1.CommandStatusApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("MinIOJob"): + return &jobminiov1alpha1.MinIOJobApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("MinIOJobSpec"): + return &jobminiov1alpha1.MinIOJobSpecApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("MinIOJobStatus"): + return &jobminiov1alpha1.MinIOJobStatusApplyConfiguration{} + case v1alpha1.SchemeGroupVersion.WithKind("TenantRef"): + return &jobminiov1alpha1.TenantRefApplyConfiguration{} + + // Group=minio.min.io, Version=v2 case v2.SchemeGroupVersion.WithKind("Bucket"): return &miniominiov2.BucketApplyConfiguration{} case v2.SchemeGroupVersion.WithKind("CertificateConfig"): @@ -75,16 +91,16 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &miniominiov2.TierUsageApplyConfiguration{} // Group=sts.min.io, Version=v1alpha1 - case v1alpha1.SchemeGroupVersion.WithKind("Application"): - return &stsminiov1alpha1.ApplicationApplyConfiguration{} - case v1alpha1.SchemeGroupVersion.WithKind("PolicyBinding"): - return &stsminiov1alpha1.PolicyBindingApplyConfiguration{} - case v1alpha1.SchemeGroupVersion.WithKind("PolicyBindingSpec"): - return &stsminiov1alpha1.PolicyBindingSpecApplyConfiguration{} - case v1alpha1.SchemeGroupVersion.WithKind("PolicyBindingStatus"): - return &stsminiov1alpha1.PolicyBindingStatusApplyConfiguration{} - case v1alpha1.SchemeGroupVersion.WithKind("PolicyBindingUsage"): - return &stsminiov1alpha1.PolicyBindingUsageApplyConfiguration{} + case stsminiov1alpha1.SchemeGroupVersion.WithKind("Application"): + return &applyconfigurationstsminiov1alpha1.ApplicationApplyConfiguration{} + case stsminiov1alpha1.SchemeGroupVersion.WithKind("PolicyBinding"): + return &applyconfigurationstsminiov1alpha1.PolicyBindingApplyConfiguration{} + case stsminiov1alpha1.SchemeGroupVersion.WithKind("PolicyBindingSpec"): + return &applyconfigurationstsminiov1alpha1.PolicyBindingSpecApplyConfiguration{} + case stsminiov1alpha1.SchemeGroupVersion.WithKind("PolicyBindingStatus"): + return &applyconfigurationstsminiov1alpha1.PolicyBindingStatusApplyConfiguration{} + case stsminiov1alpha1.SchemeGroupVersion.WithKind("PolicyBindingUsage"): + return &applyconfigurationstsminiov1alpha1.PolicyBindingUsageApplyConfiguration{} } return nil diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go index babee4e91b4..7bd9bdcc99f 100644 --- a/pkg/client/clientset/versioned/clientset.go +++ b/pkg/client/clientset/versioned/clientset.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -22,6 +22,7 @@ import ( "fmt" "net/http" + jobv1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1" miniov2 "github.com/minio/operator/pkg/client/clientset/versioned/typed/minio.min.io/v2" stsv1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1" discovery "k8s.io/client-go/discovery" @@ -31,6 +32,7 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface + JobV1alpha1() jobv1alpha1.JobV1alpha1Interface MinioV2() miniov2.MinioV2Interface StsV1alpha1() stsv1alpha1.StsV1alpha1Interface } @@ -38,10 +40,16 @@ type Interface interface { // Clientset contains the clients for groups. type Clientset struct { *discovery.DiscoveryClient + jobV1alpha1 *jobv1alpha1.JobV1alpha1Client minioV2 *miniov2.MinioV2Client stsV1alpha1 *stsv1alpha1.StsV1alpha1Client } +// JobV1alpha1 retrieves the JobV1alpha1Client +func (c *Clientset) JobV1alpha1() jobv1alpha1.JobV1alpha1Interface { + return c.jobV1alpha1 +} + // MinioV2 retrieves the MinioV2Client func (c *Clientset) MinioV2() miniov2.MinioV2Interface { return c.minioV2 @@ -96,6 +104,10 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, var cs Clientset var err error + cs.jobV1alpha1, err = jobv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } cs.minioV2, err = miniov2.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err @@ -125,6 +137,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { // New creates a new Clientset for the given RESTClient. func New(c rest.Interface) *Clientset { var cs Clientset + cs.jobV1alpha1 = jobv1alpha1.New(c) cs.minioV2 = miniov2.New(c) cs.stsV1alpha1 = stsv1alpha1.New(c) diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go index c8d5beb4a90..12d1e469ac5 100644 --- a/pkg/client/clientset/versioned/fake/clientset_generated.go +++ b/pkg/client/clientset/versioned/fake/clientset_generated.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -20,6 +20,8 @@ package fake import ( clientset "github.com/minio/operator/pkg/client/clientset/versioned" + jobv1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1" + fakejobv1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake" miniov2 "github.com/minio/operator/pkg/client/clientset/versioned/typed/minio.min.io/v2" fakeminiov2 "github.com/minio/operator/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake" stsv1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1" @@ -81,6 +83,11 @@ var ( _ testing.FakeClient = &Clientset{} ) +// JobV1alpha1 retrieves the JobV1alpha1Client +func (c *Clientset) JobV1alpha1() jobv1alpha1.JobV1alpha1Interface { + return &fakejobv1alpha1.FakeJobV1alpha1{Fake: &c.Fake} +} + // MinioV2 retrieves the MinioV2Client func (c *Clientset) MinioV2() miniov2.MinioV2Interface { return &fakeminiov2.FakeMinioV2{Fake: &c.Fake} diff --git a/pkg/client/clientset/versioned/fake/doc.go b/pkg/client/clientset/versioned/fake/doc.go index d18f95b6ba3..6daa1fd810d 100644 --- a/pkg/client/clientset/versioned/fake/doc.go +++ b/pkg/client/clientset/versioned/fake/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/fake/register.go b/pkg/client/clientset/versioned/fake/register.go index 5e316060f23..f4d3fae6bc9 100644 --- a/pkg/client/clientset/versioned/fake/register.go +++ b/pkg/client/clientset/versioned/fake/register.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -19,6 +19,7 @@ package fake import ( + jobv1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" stsv1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -32,6 +33,7 @@ var scheme = runtime.NewScheme() var codecs = serializer.NewCodecFactory(scheme) var localSchemeBuilder = runtime.SchemeBuilder{ + jobv1alpha1.AddToScheme, miniov2.AddToScheme, stsv1alpha1.AddToScheme, } diff --git a/pkg/client/clientset/versioned/scheme/doc.go b/pkg/client/clientset/versioned/scheme/doc.go index 5d3cf4e5fd5..f4572920d22 100644 --- a/pkg/client/clientset/versioned/scheme/doc.go +++ b/pkg/client/clientset/versioned/scheme/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/scheme/register.go b/pkg/client/clientset/versioned/scheme/register.go index bb942db90e0..4964b82af62 100644 --- a/pkg/client/clientset/versioned/scheme/register.go +++ b/pkg/client/clientset/versioned/scheme/register.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -19,6 +19,7 @@ package scheme import ( + jobv1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" stsv1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -32,6 +33,7 @@ var Scheme = runtime.NewScheme() var Codecs = serializer.NewCodecFactory(Scheme) var ParameterCodec = runtime.NewParameterCodec(Scheme) var localSchemeBuilder = runtime.SchemeBuilder{ + jobv1alpha1.AddToScheme, miniov2.AddToScheme, stsv1alpha1.AddToScheme, } diff --git a/web-app/src/screens/shared/__tests__/ErrorBlock.test.tsx b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/doc.go similarity index 71% rename from web-app/src/screens/shared/__tests__/ErrorBlock.test.tsx rename to pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/doc.go index 504cbd68ba3..3b4480b44f7 100644 --- a/web-app/src/screens/shared/__tests__/ErrorBlock.test.tsx +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -13,11 +13,8 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React from "react"; -import ReactDOM from "react-dom"; -import ErrorBlock from "../ErrorBlock"; -it("renders without crashing", () => { - const div = document.createElement("div"); - ReactDOM.render(, div); -}); +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff --git a/pkg/client/clientset/versioned/doc.go b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/doc.go similarity index 87% rename from pkg/client/clientset/versioned/doc.go rename to pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/doc.go index 316f16da0d9..85a59559240 100644 --- a/pkg/client/clientset/versioned/doc.go +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -16,5 +16,5 @@ // Code generated by client-gen. DO NOT EDIT. -// This package has the automatically generated clientset. -package versioned +// Package fake has the automatically generated clients. +package fake diff --git a/web-app/src/screens/shared/tabs.tsx b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_job.min.io_client.go similarity index 52% rename from web-app/src/screens/shared/tabs.tsx rename to pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_job.min.io_client.go index 4971d0b8eee..1a3ab4f3ec9 100644 --- a/web-app/src/screens/shared/tabs.tsx +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_job.min.io_client.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -14,27 +14,27 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { Fragment } from "react"; +// Code generated by client-gen. DO NOT EDIT. -interface TabPanelProps { - children?: React.ReactNode; - index: any; - value: any; +package fake + +import ( + v1alpha1 "github.com/minio/operator/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeJobV1alpha1 struct { + *testing.Fake } -export const TabPanel = (props: TabPanelProps) => { - const { children, value, index, ...other } = props; +func (c *FakeJobV1alpha1) MinIOJobs(namespace string) v1alpha1.MinIOJobInterface { + return &FakeMinIOJobs{c, namespace} +} - return ( - - ); -}; +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeJobV1alpha1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_miniojob.go b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_miniojob.go new file mode 100644 index 00000000000..d92f5fe647a --- /dev/null +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/fake/fake_miniojob.go @@ -0,0 +1,189 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + json "encoding/json" + "fmt" + + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + jobminiov1alpha1 "github.com/minio/operator/pkg/client/applyconfiguration/job.min.io/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeMinIOJobs implements MinIOJobInterface +type FakeMinIOJobs struct { + Fake *FakeJobV1alpha1 + ns string +} + +var miniojobsResource = v1alpha1.SchemeGroupVersion.WithResource("miniojobs") + +var miniojobsKind = v1alpha1.SchemeGroupVersion.WithKind("MinIOJob") + +// Get takes name of the minIOJob, and returns the corresponding minIOJob object, and an error if there is any. +func (c *FakeMinIOJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.MinIOJob, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(miniojobsResource, c.ns, name), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// List takes label and field selectors, and returns the list of MinIOJobs that match those selectors. +func (c *FakeMinIOJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.MinIOJobList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(miniojobsResource, miniojobsKind, c.ns, opts), &v1alpha1.MinIOJobList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1alpha1.MinIOJobList{ListMeta: obj.(*v1alpha1.MinIOJobList).ListMeta} + for _, item := range obj.(*v1alpha1.MinIOJobList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested minIOJobs. +func (c *FakeMinIOJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(miniojobsResource, c.ns, opts)) + +} + +// Create takes the representation of a minIOJob and creates it. Returns the server's representation of the minIOJob, and an error, if there is any. +func (c *FakeMinIOJobs) Create(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.CreateOptions) (result *v1alpha1.MinIOJob, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(miniojobsResource, c.ns, minIOJob), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// Update takes the representation of a minIOJob and updates it. Returns the server's representation of the minIOJob, and an error, if there is any. +func (c *FakeMinIOJobs) Update(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (result *v1alpha1.MinIOJob, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(miniojobsResource, c.ns, minIOJob), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeMinIOJobs) UpdateStatus(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (*v1alpha1.MinIOJob, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(miniojobsResource, "status", c.ns, minIOJob), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// Delete takes name of the minIOJob and deletes it. Returns an error if one occurs. +func (c *FakeMinIOJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteActionWithOptions(miniojobsResource, c.ns, name, opts), &v1alpha1.MinIOJob{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeMinIOJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(miniojobsResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &v1alpha1.MinIOJobList{}) + return err +} + +// Patch applies the patch and returns the patched minIOJob. +func (c *FakeMinIOJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.MinIOJob, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(miniojobsResource, c.ns, name, pt, data, subresources...), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied minIOJob. +func (c *FakeMinIOJobs) Apply(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) { + if minIOJob == nil { + return nil, fmt.Errorf("minIOJob provided to Apply must not be nil") + } + data, err := json.Marshal(minIOJob) + if err != nil { + return nil, err + } + name := minIOJob.Name + if name == nil { + return nil, fmt.Errorf("minIOJob.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(miniojobsResource, c.ns, *name, types.ApplyPatchType, data), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *FakeMinIOJobs) ApplyStatus(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) { + if minIOJob == nil { + return nil, fmt.Errorf("minIOJob provided to Apply must not be nil") + } + data, err := json.Marshal(minIOJob) + if err != nil { + return nil, err + } + name := minIOJob.Name + if name == nil { + return nil, fmt.Errorf("minIOJob.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(miniojobsResource, c.ns, *name, types.ApplyPatchType, data, "status"), &v1alpha1.MinIOJob{}) + + if obj == nil { + return nil, err + } + return obj.(*v1alpha1.MinIOJob), err +} diff --git a/web-app/src/screens/Console/Common/FormHr.tsx b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/generated_expansion.go similarity index 78% rename from web-app/src/screens/Console/Common/FormHr.tsx rename to pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/generated_expansion.go index 2205ef2be91..cb17df7446d 100644 --- a/web-app/src/screens/Console/Common/FormHr.tsx +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/generated_expansion.go @@ -14,14 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import styled from "@emotion/styled"; +// Code generated by client-gen. DO NOT EDIT. -const FormHr = styled("hr")` - border-top: 0; - border-left: 0; - border-right: 0; - border-color: #999999; - background-color: transparent; -`; +package v1alpha1 -export default FormHr; +type MinIOJobExpansion interface{} diff --git a/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/job.min.io_client.go b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/job.min.io_client.go new file mode 100644 index 00000000000..d5c5486d31f --- /dev/null +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/job.min.io_client.go @@ -0,0 +1,107 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "net/http" + + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + "github.com/minio/operator/pkg/client/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type JobV1alpha1Interface interface { + RESTClient() rest.Interface + MinIOJobsGetter +} + +// JobV1alpha1Client is used to interact with features provided by the job.min.io group. +type JobV1alpha1Client struct { + restClient rest.Interface +} + +func (c *JobV1alpha1Client) MinIOJobs(namespace string) MinIOJobInterface { + return newMinIOJobs(c, namespace) +} + +// NewForConfig creates a new JobV1alpha1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*JobV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new JobV1alpha1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*JobV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) + if err != nil { + return nil, err + } + return &JobV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new JobV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *JobV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new JobV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *JobV1alpha1Client { + return &JobV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *JobV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/miniojob.go b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/miniojob.go new file mode 100644 index 00000000000..24cd4e53fc9 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/job.min.io/v1alpha1/miniojob.go @@ -0,0 +1,256 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + jobminiov1alpha1 "github.com/minio/operator/pkg/client/applyconfiguration/job.min.io/v1alpha1" + scheme "github.com/minio/operator/pkg/client/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// MinIOJobsGetter has a method to return a MinIOJobInterface. +// A group's client should implement this interface. +type MinIOJobsGetter interface { + MinIOJobs(namespace string) MinIOJobInterface +} + +// MinIOJobInterface has methods to work with MinIOJob resources. +type MinIOJobInterface interface { + Create(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.CreateOptions) (*v1alpha1.MinIOJob, error) + Update(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (*v1alpha1.MinIOJob, error) + UpdateStatus(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (*v1alpha1.MinIOJob, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.MinIOJob, error) + List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.MinIOJobList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.MinIOJob, err error) + Apply(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) + ApplyStatus(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) + MinIOJobExpansion +} + +// minIOJobs implements MinIOJobInterface +type minIOJobs struct { + client rest.Interface + ns string +} + +// newMinIOJobs returns a MinIOJobs +func newMinIOJobs(c *JobV1alpha1Client, namespace string) *minIOJobs { + return &minIOJobs{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the minIOJob, and returns the corresponding minIOJob object, and an error if there is any. +func (c *minIOJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.MinIOJob, err error) { + result = &v1alpha1.MinIOJob{} + err = c.client.Get(). + Namespace(c.ns). + Resource("miniojobs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of MinIOJobs that match those selectors. +func (c *minIOJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.MinIOJobList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.MinIOJobList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("miniojobs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested minIOJobs. +func (c *minIOJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("miniojobs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a minIOJob and creates it. Returns the server's representation of the minIOJob, and an error, if there is any. +func (c *minIOJobs) Create(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.CreateOptions) (result *v1alpha1.MinIOJob, err error) { + result = &v1alpha1.MinIOJob{} + err = c.client.Post(). + Namespace(c.ns). + Resource("miniojobs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(minIOJob). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a minIOJob and updates it. Returns the server's representation of the minIOJob, and an error, if there is any. +func (c *minIOJobs) Update(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (result *v1alpha1.MinIOJob, err error) { + result = &v1alpha1.MinIOJob{} + err = c.client.Put(). + Namespace(c.ns). + Resource("miniojobs"). + Name(minIOJob.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(minIOJob). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *minIOJobs) UpdateStatus(ctx context.Context, minIOJob *v1alpha1.MinIOJob, opts v1.UpdateOptions) (result *v1alpha1.MinIOJob, err error) { + result = &v1alpha1.MinIOJob{} + err = c.client.Put(). + Namespace(c.ns). + Resource("miniojobs"). + Name(minIOJob.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(minIOJob). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the minIOJob and deletes it. Returns an error if one occurs. +func (c *minIOJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("miniojobs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *minIOJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("miniojobs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched minIOJob. +func (c *minIOJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.MinIOJob, err error) { + result = &v1alpha1.MinIOJob{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("miniojobs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied minIOJob. +func (c *minIOJobs) Apply(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) { + if minIOJob == nil { + return nil, fmt.Errorf("minIOJob provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(minIOJob) + if err != nil { + return nil, err + } + name := minIOJob.Name + if name == nil { + return nil, fmt.Errorf("minIOJob.Name must be provided to Apply") + } + result = &v1alpha1.MinIOJob{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("miniojobs"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *minIOJobs) ApplyStatus(ctx context.Context, minIOJob *jobminiov1alpha1.MinIOJobApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MinIOJob, err error) { + if minIOJob == nil { + return nil, fmt.Errorf("minIOJob provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(minIOJob) + if err != nil { + return nil, err + } + + name := minIOJob.Name + if name == nil { + return nil, fmt.Errorf("minIOJob.Name must be provided to Apply") + } + + result = &v1alpha1.MinIOJob{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("miniojobs"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/doc.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/doc.go index 0dcc25c9d6c..3aba29f3aca 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/doc.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/doc.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/doc.go index af8d23ae280..85a59559240 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/doc.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_minio.min.io_client.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_minio.min.io_client.go index 8ab1b8018f0..ab7b435cb56 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_minio.min.io_client.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_minio.min.io_client.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_tenant.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_tenant.go index bf97ed26612..f326006187a 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_tenant.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/fake/fake_tenant.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/generated_expansion.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/generated_expansion.go index 3e69057bb38..172fdf814cf 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/generated_expansion.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/minio.min.io_client.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/minio.min.io_client.go index d776d583b96..ed3adc2fb63 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/minio.min.io_client.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/minio.min.io_client.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/minio.min.io/v2/tenant.go b/pkg/client/clientset/versioned/typed/minio.min.io/v2/tenant.go index b26dd5906f4..c29edd84d55 100644 --- a/pkg/client/clientset/versioned/typed/minio.min.io/v2/tenant.go +++ b/pkg/client/clientset/versioned/typed/minio.min.io/v2/tenant.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/doc.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/doc.go index 8d796276602..3b4480b44f7 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/doc.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/doc.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/doc.go index af8d23ae280..85a59559240 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/doc.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/doc.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_policybinding.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_policybinding.go index 8df61d2283f..8e1d8af1951 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_policybinding.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_policybinding.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_sts.min.io_client.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_sts.min.io_client.go index ecbfb218923..6dfbf04e746 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_sts.min.io_client.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/fake/fake_sts.min.io_client.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/generated_expansion.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/generated_expansion.go index 8afaf86213e..7b1409ae353 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/policybinding.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/policybinding.go index 2cd673123b5..f326bf16f31 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/policybinding.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/policybinding.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/sts.min.io_client.go b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/sts.min.io_client.go index 1b3adb7905b..413dde10f54 100644 --- a/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/sts.min.io_client.go +++ b/pkg/client/clientset/versioned/typed/sts.min.io/v1alpha1/sts.min.io_client.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go index 2263a2b8c6b..f099bdc7f9e 100644 --- a/pkg/client/informers/externalversions/factory.go +++ b/pkg/client/informers/externalversions/factory.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -25,6 +25,7 @@ import ( versioned "github.com/minio/operator/pkg/client/clientset/versioned" internalinterfaces "github.com/minio/operator/pkg/client/informers/externalversions/internalinterfaces" + jobminio "github.com/minio/operator/pkg/client/informers/externalversions/job.min.io" miniominio "github.com/minio/operator/pkg/client/informers/externalversions/minio.min.io" stsminio "github.com/minio/operator/pkg/client/informers/externalversions/sts.min.io" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -43,6 +44,7 @@ type sharedInformerFactory struct { lock sync.Mutex defaultResync time.Duration customResync map[reflect.Type]time.Duration + transform cache.TransformFunc informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -81,6 +83,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform cache.TransformFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -167,7 +177,7 @@ func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[ref return res } -// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// InformerFor returns the SharedIndexInformer for obj using an internal // client. func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { f.lock.Lock() @@ -185,6 +195,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer @@ -240,14 +251,19 @@ type SharedInformerFactory interface { // ForResource gives generic access to a shared informer of the matching type. ForResource(resource schema.GroupVersionResource) (GenericInformer, error) - // InternalInformerFor returns the SharedIndexInformer for obj using an internal + // InformerFor returns the SharedIndexInformer for obj using an internal // client. InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer + Job() jobminio.Interface Minio() miniominio.Interface Sts() stsminio.Interface } +func (f *sharedInformerFactory) Job() jobminio.Interface { + return jobminio.New(f, f.namespace, f.tweakListOptions) +} + func (f *sharedInformerFactory) Minio() miniominio.Interface { return miniominio.New(f, f.namespace, f.tweakListOptions) } diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go index 1c93ddc9ea6..6ef90962506 100644 --- a/pkg/client/informers/externalversions/generic.go +++ b/pkg/client/informers/externalversions/generic.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -21,8 +21,9 @@ package externalversions import ( "fmt" + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" + stsminiov1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" schema "k8s.io/apimachinery/pkg/runtime/schema" cache "k8s.io/client-go/tools/cache" ) @@ -53,12 +54,16 @@ func (f *genericInformer) Lister() cache.GenericLister { // TODO extend this to unknown resources with a client pool func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { switch resource { - // Group=minio.min.io, Version=v2 + // Group=job.min.io, Version=v1alpha1 + case v1alpha1.SchemeGroupVersion.WithResource("miniojobs"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Job().V1alpha1().MinIOJobs().Informer()}, nil + + // Group=minio.min.io, Version=v2 case v2.SchemeGroupVersion.WithResource("tenants"): return &genericInformer{resource: resource.GroupResource(), informer: f.Minio().V2().Tenants().Informer()}, nil // Group=sts.min.io, Version=v1alpha1 - case v1alpha1.SchemeGroupVersion.WithResource("policybindings"): + case stsminiov1alpha1.SchemeGroupVersion.WithResource("policybindings"): return &genericInformer{resource: resource.GroupResource(), informer: f.Sts().V1alpha1().PolicyBindings().Informer()}, nil } diff --git a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go index c66f9a8fdae..2486e2ceba0 100644 --- a/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/job.min.io/interface.go b/pkg/client/informers/externalversions/job.min.io/interface.go new file mode 100644 index 00000000000..cc73f45577e --- /dev/null +++ b/pkg/client/informers/externalversions/job.min.io/interface.go @@ -0,0 +1,46 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by informer-gen. DO NOT EDIT. + +package job + +import ( + internalinterfaces "github.com/minio/operator/pkg/client/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/minio/operator/pkg/client/informers/externalversions/job.min.io/v1alpha1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1alpha1 provides access to shared informers for resources in V1alpha1. + V1alpha1() v1alpha1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1alpha1 returns a new v1alpha1.Interface. +func (g *group) V1alpha1() v1alpha1.Interface { + return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/pkg/client/informers/externalversions/job.min.io/v1alpha1/interface.go b/pkg/client/informers/externalversions/job.min.io/v1alpha1/interface.go new file mode 100644 index 00000000000..a42cf61dd7d --- /dev/null +++ b/pkg/client/informers/externalversions/job.min.io/v1alpha1/interface.go @@ -0,0 +1,45 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + internalinterfaces "github.com/minio/operator/pkg/client/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // MinIOJobs returns a MinIOJobInformer. + MinIOJobs() MinIOJobInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// MinIOJobs returns a MinIOJobInformer. +func (v *version) MinIOJobs() MinIOJobInformer { + return &minIOJobInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/pkg/client/informers/externalversions/job.min.io/v1alpha1/miniojob.go b/pkg/client/informers/externalversions/job.min.io/v1alpha1/miniojob.go new file mode 100644 index 00000000000..fcd6afb26dc --- /dev/null +++ b/pkg/client/informers/externalversions/job.min.io/v1alpha1/miniojob.go @@ -0,0 +1,90 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + time "time" + + jobminiov1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + versioned "github.com/minio/operator/pkg/client/clientset/versioned" + internalinterfaces "github.com/minio/operator/pkg/client/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/minio/operator/pkg/client/listers/job.min.io/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// MinIOJobInformer provides access to a shared informer and lister for +// MinIOJobs. +type MinIOJobInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1alpha1.MinIOJobLister +} + +type minIOJobInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewMinIOJobInformer constructs a new informer for MinIOJob type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewMinIOJobInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredMinIOJobInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredMinIOJobInformer constructs a new informer for MinIOJob type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredMinIOJobInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.JobV1alpha1().MinIOJobs(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.JobV1alpha1().MinIOJobs(namespace).Watch(context.TODO(), options) + }, + }, + &jobminiov1alpha1.MinIOJob{}, + resyncPeriod, + indexers, + ) +} + +func (f *minIOJobInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredMinIOJobInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *minIOJobInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&jobminiov1alpha1.MinIOJob{}, f.defaultInformer) +} + +func (f *minIOJobInformer) Lister() v1alpha1.MinIOJobLister { + return v1alpha1.NewMinIOJobLister(f.Informer().GetIndexer()) +} diff --git a/pkg/client/informers/externalversions/minio.min.io/interface.go b/pkg/client/informers/externalversions/minio.min.io/interface.go index 0d3c5e09e7f..d4ab2c43146 100644 --- a/pkg/client/informers/externalversions/minio.min.io/interface.go +++ b/pkg/client/informers/externalversions/minio.min.io/interface.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/minio.min.io/v2/interface.go b/pkg/client/informers/externalversions/minio.min.io/v2/interface.go index b3ca3e44f35..95c51612cd9 100644 --- a/pkg/client/informers/externalversions/minio.min.io/v2/interface.go +++ b/pkg/client/informers/externalversions/minio.min.io/v2/interface.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/minio.min.io/v2/tenant.go b/pkg/client/informers/externalversions/minio.min.io/v2/tenant.go index 491c74b6f89..7294aedaf0d 100644 --- a/pkg/client/informers/externalversions/minio.min.io/v2/tenant.go +++ b/pkg/client/informers/externalversions/minio.min.io/v2/tenant.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/sts.min.io/interface.go b/pkg/client/informers/externalversions/sts.min.io/interface.go index ffa5a13b17f..b0c331dcafe 100644 --- a/pkg/client/informers/externalversions/sts.min.io/interface.go +++ b/pkg/client/informers/externalversions/sts.min.io/interface.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/sts.min.io/v1alpha1/interface.go b/pkg/client/informers/externalversions/sts.min.io/v1alpha1/interface.go index 9d5eba602fe..c74e9874ed5 100644 --- a/pkg/client/informers/externalversions/sts.min.io/v1alpha1/interface.go +++ b/pkg/client/informers/externalversions/sts.min.io/v1alpha1/interface.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/informers/externalversions/sts.min.io/v1alpha1/policybinding.go b/pkg/client/informers/externalversions/sts.min.io/v1alpha1/policybinding.go index feaa08ebe3f..98ac7245c28 100644 --- a/pkg/client/informers/externalversions/sts.min.io/v1alpha1/policybinding.go +++ b/pkg/client/informers/externalversions/sts.min.io/v1alpha1/policybinding.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/web-app/src/screens/Console/Common/SectionH1.tsx b/pkg/client/listers/job.min.io/v1alpha1/expansion_generated.go similarity index 65% rename from web-app/src/screens/Console/Common/SectionH1.tsx rename to pkg/client/listers/job.min.io/v1alpha1/expansion_generated.go index eacf3f284eb..339fc4bb42d 100644 --- a/web-app/src/screens/Console/Common/SectionH1.tsx +++ b/pkg/client/listers/job.min.io/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -14,18 +14,14 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React from "react"; +// Code generated by lister-gen. DO NOT EDIT. -type Props = { - children: string; -}; +package v1alpha1 -const SectionH1: React.FC = ({ children }) => { - return ( -

- {children} -

- ); -}; +// MinIOJobListerExpansion allows custom methods to be added to +// MinIOJobLister. +type MinIOJobListerExpansion interface{} -export default SectionH1; +// MinIOJobNamespaceListerExpansion allows custom methods to be added to +// MinIOJobNamespaceLister. +type MinIOJobNamespaceListerExpansion interface{} diff --git a/pkg/client/listers/job.min.io/v1alpha1/miniojob.go b/pkg/client/listers/job.min.io/v1alpha1/miniojob.go new file mode 100644 index 00000000000..468dec7847a --- /dev/null +++ b/pkg/client/listers/job.min.io/v1alpha1/miniojob.go @@ -0,0 +1,99 @@ +// This file is part of MinIO Operator +// Copyright (c) 2023 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// MinIOJobLister helps list MinIOJobs. +// All objects returned here must be treated as read-only. +type MinIOJobLister interface { + // List lists all MinIOJobs in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.MinIOJob, err error) + // MinIOJobs returns an object that can list and get MinIOJobs. + MinIOJobs(namespace string) MinIOJobNamespaceLister + MinIOJobListerExpansion +} + +// minIOJobLister implements the MinIOJobLister interface. +type minIOJobLister struct { + indexer cache.Indexer +} + +// NewMinIOJobLister returns a new MinIOJobLister. +func NewMinIOJobLister(indexer cache.Indexer) MinIOJobLister { + return &minIOJobLister{indexer: indexer} +} + +// List lists all MinIOJobs in the indexer. +func (s *minIOJobLister) List(selector labels.Selector) (ret []*v1alpha1.MinIOJob, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.MinIOJob)) + }) + return ret, err +} + +// MinIOJobs returns an object that can list and get MinIOJobs. +func (s *minIOJobLister) MinIOJobs(namespace string) MinIOJobNamespaceLister { + return minIOJobNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// MinIOJobNamespaceLister helps list and get MinIOJobs. +// All objects returned here must be treated as read-only. +type MinIOJobNamespaceLister interface { + // List lists all MinIOJobs in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.MinIOJob, err error) + // Get retrieves the MinIOJob from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1alpha1.MinIOJob, error) + MinIOJobNamespaceListerExpansion +} + +// minIOJobNamespaceLister implements the MinIOJobNamespaceLister +// interface. +type minIOJobNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all MinIOJobs in the indexer for a given namespace. +func (s minIOJobNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.MinIOJob, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.MinIOJob)) + }) + return ret, err +} + +// Get retrieves the MinIOJob from the indexer for a given namespace and name. +func (s minIOJobNamespaceLister) Get(name string) (*v1alpha1.MinIOJob, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1alpha1.Resource("miniojob"), name) + } + return obj.(*v1alpha1.MinIOJob), nil +} diff --git a/pkg/client/listers/minio.min.io/v2/expansion_generated.go b/pkg/client/listers/minio.min.io/v2/expansion_generated.go index 366706bf1a8..ba5ab1167e8 100644 --- a/pkg/client/listers/minio.min.io/v2/expansion_generated.go +++ b/pkg/client/listers/minio.min.io/v2/expansion_generated.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/listers/minio.min.io/v2/tenant.go b/pkg/client/listers/minio.min.io/v2/tenant.go index b4c9d40dd65..69c79903fd4 100644 --- a/pkg/client/listers/minio.min.io/v2/tenant.go +++ b/pkg/client/listers/minio.min.io/v2/tenant.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/listers/sts.min.io/v1alpha1/expansion_generated.go b/pkg/client/listers/sts.min.io/v1alpha1/expansion_generated.go index d6a4a571087..3e486ef14c4 100644 --- a/pkg/client/listers/sts.min.io/v1alpha1/expansion_generated.go +++ b/pkg/client/listers/sts.min.io/v1alpha1/expansion_generated.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/client/listers/sts.min.io/v1alpha1/policybinding.go b/pkg/client/listers/sts.min.io/v1alpha1/policybinding.go index 4f1384257d5..934dc42cd2b 100644 --- a/pkg/client/listers/sts.min.io/v1alpha1/policybinding.go +++ b/pkg/client/listers/sts.min.io/v1alpha1/policybinding.go @@ -1,5 +1,5 @@ // This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. +// Copyright (c) 2023 MinIO, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/pkg/controller/artifacts.go b/pkg/controller/artifacts.go index f5e8ed8ecb5..1058d15ef95 100644 --- a/pkg/controller/artifacts.go +++ b/pkg/controller/artifacts.go @@ -105,7 +105,8 @@ func (c *Controller) fetchArtifacts(tenant *miniov2.Tenant) (latest string, err return latest, err } - keychain := authn.DefaultKeychain + var keychain authn.Keychain + keychain = authn.DefaultKeychain // if the tenant has imagePullSecret use that for pulling the image, but if we fail to extract the secret or we // can't find the expected registry in the secret we will continue with the default keychain. This is because the diff --git a/pkg/controller/certificates/csr.go b/pkg/controller/certificates/csr.go index c12c1dfa651..ec39f6a1fdc 100644 --- a/pkg/controller/certificates/csr.go +++ b/pkg/controller/certificates/csr.go @@ -61,11 +61,7 @@ var ( func getDefaultCsrSignerName() string { defaultCsrSignerNameOnce.Do(func() { - if os.Getenv(CSRSignerName) != "" { - defaultCsrSignerName = os.Getenv(CSRSignerName) - return - } - defaultCsrSignerName = certificatesV1.KubeletServingSignerName + defaultCsrSignerName = os.Getenv(CSRSignerName) }) return defaultCsrSignerName } @@ -108,8 +104,10 @@ func GetCertificatesAPIVersion(clientSet kubernetes.Interface) CSRVersion { // GetCSRSignerName returns the signer to be used func GetCSRSignerName(clientSet kubernetes.Interface) string { csrSignerNameOnce.Do(func() { - // At the moment we will use kubernetes.io/kubelet-serving as the default csrSignerName = getDefaultCsrSignerName() + if csrSignerName != "" { + return + } // only for csr api v1 we will try to detect if we are running inside an EKS cluster and switch to AWS's way to // get certificates using their CSRSignerName https://docs.aws.amazon.com/eks/latest/userguide/cert-signing.html if GetCertificatesAPIVersion(clientSet) == CSRV1 { @@ -136,6 +134,10 @@ func GetCSRSignerName(clientSet kubernetes.Interface) string { } } } + if csrSignerName == "" { + // At the moment we will use kubernetes.io/kubelet-serving as the default + csrSignerName = certificatesV1.KubeletServingSignerName + } }) return csrSignerName } diff --git a/pkg/controller/console.go b/pkg/controller/console.go index fe65950ad55..8c1b4d99621 100644 --- a/pkg/controller/console.go +++ b/pkg/controller/console.go @@ -24,7 +24,6 @@ import ( "github.com/minio/operator/pkg/resources/services" "github.com/minio/pkg/env" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -57,7 +56,7 @@ func (c *Controller) checkConsoleSvc(ctx context.Context, tenant *miniov2.Tenant if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "SvcCreated", "Console Service Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "SvcCreated", "Console Service Created") } else { return err } @@ -81,9 +80,9 @@ func (c *Controller) checkConsoleSvc(ctx context.Context, tenant *miniov2.Tenant // Only when ExposeServices is set an explicit value we do modifications to the service type if tenant.Spec.ExposeServices != nil { if tenant.Spec.ExposeServices.Console { - svc.Spec.Type = v1.ServiceTypeLoadBalancer + svc.Spec.Type = corev1.ServiceTypeLoadBalancer } else { - svc.Spec.Type = v1.ServiceTypeClusterIP + svc.Spec.Type = corev1.ServiceTypeClusterIP } } @@ -94,7 +93,7 @@ func (c *Controller) checkConsoleSvc(ctx context.Context, tenant *miniov2.Tenant if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "Updated", "Console Service Updated") + c.recorder.Event(tenant, corev1.EventTypeNormal, "Updated", "Console Service Updated") } return err } diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index 41a49cce345..40f92b2379f 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -23,6 +23,8 @@ import ( "syscall" "time" + "github.com/minio/pkg/env" + "github.com/minio/operator/pkg" "k8s.io/client-go/tools/clientcmd" @@ -32,11 +34,15 @@ import ( "k8s.io/klog/v2" + "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" + stsv1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" clientset "github.com/minio/operator/pkg/client/clientset/versioned" informers "github.com/minio/operator/pkg/client/informers/externalversions" promclientset "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned" kubeinformers "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/scheme" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -68,6 +74,9 @@ func init() { // StartOperator starts the MinIO Operator controller func StartOperator(kubeconfig string) { + _ = v2.AddToScheme(scheme.Scheme) + _ = v1alpha1.AddToScheme(scheme.Scheme) + _ = stsv1alpha1.AddToScheme(scheme.Scheme) klog.Info("Starting MinIO Operator") // set up signals, so we handle the first shutdown signal gracefully stopCh := setupSignalHandler() @@ -79,8 +88,21 @@ func StartOperator(kubeconfig string) { return } - // Look for incluster config by default - cfg, err := rest.InClusterConfig() + var cfg *rest.Config + var err error + + if token := env.Get("DEV_MODE", ""); token == "on" { + klog.Info("DEV_MODE present, running dev mode") + cfg = &rest.Config{ + Host: "http://localhost:8001", + TLSClientConfig: rest.TLSClientConfig{Insecure: true}, + APIPath: "/", + BearerToken: "", + } + } else { + // Look for incluster config by default + cfg, err = rest.InClusterConfig() + } // If config is passed as a flag use that instead if kubeconfig != "" { cfg, err = clientcmd.BuildConfigFromFlags(masterURL, kubeconfig) @@ -146,6 +168,8 @@ func StartOperator(kubeconfig string) { kubeInformerFactory.Core().V1().Services(), hostsTemplate, pkg.Version, + minioInformerFactory.Job().V1alpha1().MinIOJobs(), + kubeInformerFactory.Batch().V1().Jobs(), ) go kubeInformerFactory.Start(stopCh) diff --git a/pkg/controller/csr.go b/pkg/controller/csr.go index 82a0be73a5a..92c2776afc5 100644 --- a/pkg/controller/csr.go +++ b/pkg/controller/csr.go @@ -41,7 +41,6 @@ import ( corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -80,11 +79,11 @@ func (c *Controller) createCertificateSigningRequest(ctx context.Context, labels certificatesV1.UsageServerAuth, } kubeCSR := &certificatesV1.CertificateSigningRequest{ - TypeMeta: v1.TypeMeta{ + TypeMeta: metav1.TypeMeta{ APIVersion: "certificates.k8s.io/v1", Kind: "CertificateSigningRequest", }, - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Name: name, Labels: labels, Namespace: namespace, @@ -129,11 +128,11 @@ func (c *Controller) createCertificateSigningRequest(ctx context.Context, labels certificatesV1beta1.UsageClientAuth, } kubeCSR := &certificatesV1beta1.CertificateSigningRequest{ - TypeMeta: v1.TypeMeta{ + TypeMeta: metav1.TypeMeta{ APIVersion: "certificates.k8s.io/v1beta1", Kind: "CertificateSigningRequest", }, - ObjectMeta: v1.ObjectMeta{ + ObjectMeta: metav1.ObjectMeta{ Name: name, Labels: labels, Namespace: namespace, @@ -199,7 +198,7 @@ func (c *Controller) fetchCertificate(ctx context.Context, csrName string) ([]by case <-tick.C: if certificates.GetCertificatesAPIVersion(c.kubeClientSet) == certificates.CSRV1 { - r, err := c.kubeClientSet.CertificatesV1().CertificateSigningRequests().Get(ctx, csrName, v1.GetOptions{}) + r, err := c.kubeClientSet.CertificatesV1().CertificateSigningRequests().Get(ctx, csrName, metav1.GetOptions{}) if err != nil { klog.Errorf("Unexpected error during certificate fetching of csr/%s V1: %s", csrName, err) return nil, err @@ -216,7 +215,7 @@ func (c *Controller) fetchCertificate(ctx context.Context, csrName string) ([]by } } } else { - r, err := c.kubeClientSet.CertificatesV1beta1().CertificateSigningRequests().Get(ctx, csrName, v1.GetOptions{}) + r, err := c.kubeClientSet.CertificatesV1beta1().CertificateSigningRequests().Get(ctx, csrName, metav1.GetOptions{}) if err != nil { klog.Errorf("Unexpected error during certificate fetching of csr/%s V1beta1: %s", csrName, err) return nil, err diff --git a/pkg/controller/custom.go b/pkg/controller/custom.go index ec8e13a4754..38c523b7040 100644 --- a/pkg/controller/custom.go +++ b/pkg/controller/custom.go @@ -107,16 +107,16 @@ func (c *Controller) getCustomCertificates(ctx context.Context, tenant *miniov2. expiresInHuman := fmt.Sprintf("%v days, %v hours, %v minutes, %v seconds", expiresInDays, expiresInHours, expiresInMinutes, expiresInSeconds) if expiresInDays >= 10 && expiresInDays < 30 { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CertificateExpiring", fmt.Sprintf("%s certificate '%s' is expiring in %d days", certType, secret.Name, expiresInDays)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CertificateExpiring", fmt.Sprintf("%s certificate '%s' is expiring in %d days", certType, secret.Name, expiresInDays)) } if expiresInDays > 0 && expiresInDays < 10 { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CertificateExpiryImminent", fmt.Sprintf("%s certificate '%s' is expiring in %d days", certType, secret.Name, expiresInDays)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CertificateExpiryImminent", fmt.Sprintf("%s certificate '%s' is expiring in %d days", certType, secret.Name, expiresInDays)) } if expiresInDays > 0 && expiresInDays < 1 { expiresInHuman = fmt.Sprintf("%v hours, %v minutes, and %v seconds", expiresInHours, expiresInMinutes, expiresInSeconds) } if expiresInDays <= 0 { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CertificateExpired", fmt.Sprintf("%s certificate '%s' has expired", certType, secret.Name)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CertificateExpired", fmt.Sprintf("%s certificate '%s' has expired", certType, secret.Name)) expiresInHuman = "EXPIRED" } diff --git a/pkg/controller/decomission.go b/pkg/controller/decomission.go index ca5e1bef40a..e97559df89f 100644 --- a/pkg/controller/decomission.go +++ b/pkg/controller/decomission.go @@ -126,7 +126,7 @@ func (c *Controller) checkForPoolDecommission(ctx context.Context, key string, t } for _, ssName := range poolNamesRemoved { - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "PoolRemoved", fmt.Sprintf("Tenant pool %s removed", ssName)) + c.recorder.Event(tenant, corev1.EventTypeNormal, "PoolRemoved", fmt.Sprintf("Tenant pool %s removed", ssName)) if err = c.kubeClientSet.AppsV1().StatefulSets(tenant.Namespace).Delete(ctx, ssName, metav1.DeleteOptions{}); err != nil { if k8serrors.IsNotFound(err) { continue diff --git a/pkg/controller/job-controller.go b/pkg/controller/job-controller.go new file mode 100644 index 00000000000..0c0d8c60d6b --- /dev/null +++ b/pkg/controller/job-controller.go @@ -0,0 +1,328 @@ +// This file is part of MinIO Operator +// Copyright (c) 2024 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package controller + +import ( + "context" + "fmt" + "reflect" + "sync" + "time" + + "github.com/minio/minio-go/v7/pkg/set" + "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" + stsv1alpha1 "github.com/minio/operator/pkg/apis/sts.min.io/v1alpha1" + jobinformers "github.com/minio/operator/pkg/client/informers/externalversions/job.min.io/v1alpha1" + joblisters "github.com/minio/operator/pkg/client/listers/job.min.io/v1alpha1" + "github.com/minio/operator/pkg/utils/miniojob" + batchjobv1 "k8s.io/api/batch/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/runtime" + batchv1 "k8s.io/client-go/informers/batch/v1" + "k8s.io/client-go/kubernetes" + k8sjoblisters "k8s.io/client-go/listers/batch/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + "k8s.io/client-go/util/workqueue" + "k8s.io/klog/v2" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// JobController struct watches the Kubernetes API for changes to Tenant resources +type JobController struct { + namespacesToWatch set.StringSet + minioJobLister joblisters.MinIOJobLister + minioJobHasSynced cache.InformerSynced + jobLister k8sjoblisters.JobLister + jobHasSynced cache.InformerSynced + recorder record.EventRecorder + workqueue workqueue.RateLimitingInterface + k8sClient client.Client +} + +// runWorker is a long-running function that will continually call the +// processNextWorkItem function in order to read and process a message on the +// workqueue. +func (c *JobController) runJobWorker() { + defer runtime.HandleCrash() + for processNextItem(c.workqueue, c.SyncHandler) { + } +} + +func (c *JobController) enqueueJob(obj interface{}) { + key, err := cache.MetaNamespaceKeyFunc(obj) + if err != nil { + runtime.HandleError(err) + return + } + if !c.namespacesToWatch.IsEmpty() { + meta, err := meta.Accessor(obj) + if err != nil { + runtime.HandleError(err) + return + } + if !c.namespacesToWatch.Contains(meta.GetNamespace()) { + klog.Infof("Ignoring tenant `%s` in namespace that is not watched by this controller.", key) + return + } + } + // key = default/mc-job-1 + c.workqueue.AddRateLimited(key) +} + +// NewJobController returns a new Operator Controller +func NewJobController( + minioJobInformer jobinformers.MinIOJobInformer, + jobInformer batchv1.JobInformer, + namespacesToWatch set.StringSet, + kubeClientSet kubernetes.Interface, + recorder record.EventRecorder, + workqueue workqueue.RateLimitingInterface, + k8sClient client.Client, +) *JobController { + controller := &JobController{ + namespacesToWatch: namespacesToWatch, + minioJobLister: minioJobInformer.Lister(), + minioJobHasSynced: minioJobInformer.Informer().HasSynced, + jobLister: jobInformer.Lister(), + jobHasSynced: jobInformer.Informer().HasSynced, + recorder: recorder, + workqueue: workqueue, + k8sClient: k8sClient, + } + + // Set up an event handler for when resources change + minioJobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: controller.enqueueJob, + UpdateFunc: func(old, new interface{}) { + oldJob := old.(*v1alpha1.MinIOJob) + newJob := new.(*v1alpha1.MinIOJob) + if oldJob.ResourceVersion == newJob.ResourceVersion { + return + } + controller.enqueueJob(new) + }, + }) + + jobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + UpdateFunc: func(old, new interface{}) { + newJob := new.(*batchjobv1.Job) + jobName, ok := newJob.Labels[miniojob.MinioJobName] + if !ok { + return + } + jobCRName, ok := newJob.Labels[miniojob.MinioJobCRName] + if !ok { + return + } + val, ok := globalIntervalJobStatus.Load(fmt.Sprintf("%s/%s", newJob.GetNamespace(), jobCRName)) + if ok { + intervalJob := val.(*miniojob.MinIOIntervalJob) + command, ok := intervalJob.CommandMap[jobName] + if ok { + if newJob.Status.Succeeded > 0 { + command.SetStatus(true, "") + } else { + for _, condition := range newJob.Status.Conditions { + if condition.Type == batchjobv1.JobFailed { + command.SetStatus(false, condition.Message) + break + } + } + } + } + } + controller.HandleObject(newJob) + }, + }) + return controller +} + +// HasSynced is to determine if obj is synced +func (c *JobController) HasSynced() cache.InformerSynced { + return c.minioJobHasSynced +} + +// HandleObject will take any resource implementing metav1.Object and attempt +// to find the CRD resource that 'owns' it. +func (c *JobController) HandleObject(obj metav1.Object) { + JobCRDResourceKind := "MinIOJob" + if ownerRef := metav1.GetControllerOf(obj); ownerRef != nil { + switch ownerRef.Kind { + case JobCRDResourceKind: + job, err := c.minioJobLister.MinIOJobs(obj.GetNamespace()).Get(ownerRef.Name) + if err != nil { + klog.V(4).Info("Ignore orphaned object", "object", klog.KObj(job), JobCRDResourceKind, ownerRef.Name) + return + } + c.enqueueJob(job) + default: + return + } + return + } +} + +// SyncHandler compares the current Job state with the desired, and attempts to +// converge the two. It then updates the Status block of the Job resource +// with the current status of the resource. +func (c *JobController) SyncHandler(key string) (Result, error) { + // Convert the namespace/name string into a distinct namespace and name + if key == "" { + runtime.HandleError(fmt.Errorf("Invalid resource key: %s", key)) + return WrapResult(Result{}, nil) + } + namespace, jobName := key2NamespaceName(key) + ctx := context.Background() + jobCR := v1alpha1.MinIOJob{ + ObjectMeta: metav1.ObjectMeta{ + Name: jobName, + Namespace: namespace, + }, + } + err := c.k8sClient.Get(ctx, client.ObjectKeyFromObject(&jobCR), &jobCR) + if err != nil { + // job cr have gone + globalIntervalJobStatus.Delete(fmt.Sprintf("%s/%s", jobCR.Namespace, jobCR.Name)) + if errors.IsNotFound(err) { + return WrapResult(Result{}, nil) + } + return WrapResult(Result{}, err) + } + // if job cr is Success, do nothing + if jobCR.Status.Phase == miniojob.MinioJobPhaseSuccess { + // delete the job status + globalIntervalJobStatus.Delete(fmt.Sprintf("%s/%s", jobCR.Namespace, jobCR.Name)) + return WrapResult(Result{}, nil) + } + intervalJob, err := checkMinIOJob(&jobCR) + if err != nil { + return WrapResult(Result{}, err) + } + // get tenant + tenant := &miniov2.Tenant{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: jobCR.Spec.TenantRef.Namespace, + Name: jobCR.Spec.TenantRef.Name, + }, + } + err = c.k8sClient.Get(ctx, client.ObjectKeyFromObject(tenant), tenant) + if err != nil { + jobCR.Status.Phase = miniojob.MinioJobPhaseError + jobCR.Status.Message = fmt.Sprintf("Get tenant %s/%s error:%v", jobCR.Spec.TenantRef.Namespace, jobCR.Spec.TenantRef.Name, err) + err = c.updateJobStatus(ctx, &jobCR) + return WrapResult(Result{}, err) + } + if tenant.Status.HealthStatus != miniov2.HealthStatusGreen { + return WrapResult(Result{RequeueAfter: time.Second * 5}, nil) + } + // check sa + pbs := &stsv1alpha1.PolicyBindingList{} + err = c.k8sClient.List(ctx, pbs, client.InNamespace(namespace)) + if err != nil { + return WrapResult(Result{}, err) + } + if len(pbs.Items) == 0 { + return WrapResult(Result{}, fmt.Errorf("no policybinding found")) + } + saFound := false + for _, pb := range pbs.Items { + if pb.Spec.Application.Namespace == namespace && pb.Spec.Application.ServiceAccount == jobCR.Spec.ServiceAccountName { + saFound = true + } + } + if !saFound { + return WrapResult(Result{}, fmt.Errorf("no serviceaccount found")) + } + err = intervalJob.CreateCommandJob(ctx, c.k8sClient) + if err != nil { + jobCR.Status.Phase = miniojob.MinioJobPhaseError + jobCR.Status.Message = fmt.Sprintf("Create job error:%v", err) + err = c.updateJobStatus(ctx, &jobCR) + return WrapResult(Result{}, err) + } + // update status + jobCR.Status = intervalJob.GetMinioJobStatus(ctx) + err = c.updateJobStatus(ctx, &jobCR) + return WrapResult(Result{}, err) +} + +func (c *JobController) updateJobStatus(ctx context.Context, job *v1alpha1.MinIOJob) error { + return c.k8sClient.Status().Update(ctx, job) +} + +func checkMinIOJob(jobCR *v1alpha1.MinIOJob) (intervalJob *miniojob.MinIOIntervalJob, err error) { + defer func() { + if err != nil { + globalIntervalJobStatus.Delete(fmt.Sprintf("%s/%s", jobCR.Namespace, jobCR.Name)) + } + }() + val, found := globalIntervalJobStatus.Load(fmt.Sprintf("%s/%s", jobCR.Namespace, jobCR.Name)) + if found { + intervalJob = val.(*miniojob.MinIOIntervalJob) + if reflect.DeepEqual(intervalJob.JobCR.Spec, jobCR.Spec) { + intervalJob.JobCR.UID = jobCR.UID + return intervalJob, nil + } + } + intervalJob = &miniojob.MinIOIntervalJob{ + JobCR: jobCR.DeepCopy(), + Command: []*miniojob.MinIOIntervalJobCommand{}, + CommandMap: map[string]*miniojob.MinIOIntervalJobCommand{}, + } + if jobCR.Spec.TenantRef.Namespace == "" { + return intervalJob, fmt.Errorf("tenant namespace is empty") + } + if jobCR.Spec.TenantRef.Name == "" { + return intervalJob, fmt.Errorf("tenant name is empty") + } + if jobCR.Spec.ServiceAccountName == "" { + return intervalJob, fmt.Errorf("serviceaccount name is empty") + } + for index, val := range jobCR.Spec.Commands { + mcCommand, found := miniojob.OperationAliasToMC(val.Operation) + if !found { + return intervalJob, fmt.Errorf("operation %s is not supported", val.Operation) + } + argsFuncs, found := miniojob.JobOperation[mcCommand] + if !found { + return intervalJob, fmt.Errorf("operation %s is not supported", mcCommand) + } + jobCommand, err := miniojob.GenerateMinIOIntervalJobCommand(mcCommand, index, val.DependsOn, val.Name, val.Args, argsFuncs) + if err != nil { + return intervalJob, err + } + intervalJob.Command = append(intervalJob.Command, jobCommand) + intervalJob.CommandMap[jobCommand.JobName] = jobCommand + } + // check all dependon + for _, command := range intervalJob.Command { + for _, dep := range command.DepnedsOn { + _, found := intervalJob.CommandMap[dep] + if !found { + return intervalJob, fmt.Errorf("dependent job %s not found", dep) + } + } + } + globalIntervalJobStatus.Store(fmt.Sprintf("%s/%s", jobCR.Namespace, jobCR.Name), intervalJob) + return intervalJob, nil +} + +var globalIntervalJobStatus = sync.Map{} diff --git a/pkg/controller/kes.go b/pkg/controller/kes.go index eb5a6c8629d..52d312d8074 100644 --- a/pkg/controller/kes.go +++ b/pkg/controller/kes.go @@ -33,7 +33,6 @@ import ( "github.com/minio/operator/pkg/resources/services" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "github.com/minio/operator/pkg/resources/statefulsets" @@ -101,13 +100,13 @@ func (c *Controller) createKESCSR(ctx context.Context, tenant *miniov2.Tenant) e klog.Errorf("Unexpected error during the creation of the csr/%s: %v", tenant.KESCSRName(), err) return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "CSRCreated", "KES CSR Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "CSRCreated", "KES CSR Created") // fetch certificate from CSR certbytes, err := c.fetchCertificate(ctx, tenant.KESCSRName()) if err != nil { klog.Errorf("Unexpected error during the creation of the csr/%s: %v", tenant.KESCSRName(), err) - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CSRFailed", fmt.Sprintf("KES CSR Failed to create: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CSRFailed", fmt.Sprintf("KES CSR Failed to create: %s", err)) return err } @@ -214,17 +213,17 @@ func (c *Controller) checkKESStatus(ctx context.Context, tenant *miniov2.Tenant, klog.V(2).Infof("Creating a new Headless Service for cluster %q", nsName) svc = services.NewHeadlessForKES(tenant) if _, err = c.kubeClientSet.CoreV1().Services(svc.Namespace).Create(ctx, svc, cOpts); err != nil { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "SvcFailed", fmt.Sprintf("KES Headless Service failed to create: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "SvcFailed", fmt.Sprintf("KES Headless Service failed to create: %s", err)) return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "SvcCreated", "KES Headless Service created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "SvcCreated", "KES Headless Service created") } else { return err } } if tenant.HasGCPCredentialSecretForKES() { - kesSA, err := c.kubeClientSet.CoreV1().ServiceAccounts(tenant.Namespace).Get(ctx, tenant.Spec.KES.ServiceAccountName, v1.GetOptions{}) + kesSA, err := c.kubeClientSet.CoreV1().ServiceAccounts(tenant.Namespace).Get(ctx, tenant.Spec.KES.ServiceAccountName, metav1.GetOptions{}) if err != nil { klog.Errorf("unable to get the service account %s/%s: %v", tenant.Namespace, tenant.Spec.KES.ServiceAccountName, err) return err @@ -244,10 +243,10 @@ func (c *Controller) checkKESStatus(ctx context.Context, tenant *miniov2.Tenant, klog.V(2).Infof("Creating a new KES StatefulSet for %q", nsName) if _, err = c.kubeClientSet.AppsV1().StatefulSets(tenant.Namespace).Create(ctx, ks, cOpts); err != nil { klog.V(2).Infof(err.Error()) - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "StsFailed", fmt.Sprintf("KES Statefulset failed to create: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "StsFailed", fmt.Sprintf("KES Statefulset failed to create: %s", err)) return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "StsCreated", "KES Statefulset Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "StsCreated", "KES Statefulset Created") } else { return err } @@ -265,10 +264,10 @@ func (c *Controller) checkKESStatus(ctx context.Context, tenant *miniov2.Tenant, return err } if _, err = c.kubeClientSet.AppsV1().StatefulSets(tenant.Namespace).Update(ctx, ks, uOpts); err != nil { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "StsFailed", fmt.Sprintf("KES Statefulset failed to update: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "StsFailed", fmt.Sprintf("KES Statefulset failed to update: %s", err)) return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "StsUpdated", "KES Statefulset Updated") + c.recorder.Event(tenant, corev1.EventTypeNormal, "StsUpdated", "KES Statefulset Updated") } } } @@ -286,7 +285,7 @@ func (c *Controller) checkAndCreateMinIOClientCertificates(ctx context.Context, klog.V(2).Infof("Creating a new Client Certificate for MinIO, cluster %q", nsName) if err = c.createMinIOClientCertificates(ctx, tenant); err != nil { // we want to re-queue this tenant so we can re-check for the health at a later stage - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CertFailed", fmt.Sprintf("KES MinIO Client Certificate failed to create: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CertFailed", fmt.Sprintf("KES MinIO Client Certificate failed to create: %s", err)) return err } return errors.New("waiting for minio client cert") diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go index b88cc35d244..5502a7321f4 100644 --- a/pkg/controller/main-controller.go +++ b/pkg/controller/main-controller.go @@ -28,7 +28,7 @@ import ( "github.com/minio/operator/pkg/utils" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/operator/pkg/common" xcerts "github.com/minio/pkg/certs" @@ -56,6 +56,7 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" appsinformers "k8s.io/client-go/informers/apps/v1" + batchv1 "k8s.io/client-go/informers/batch/v1" coreinformers "k8s.io/client-go/informers/core/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" @@ -73,9 +74,9 @@ import ( miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" clientset "github.com/minio/operator/pkg/client/clientset/versioned" minioscheme "github.com/minio/operator/pkg/client/clientset/versioned/scheme" + jobinformers "github.com/minio/operator/pkg/client/informers/externalversions/job.min.io/v1alpha1" informers "github.com/minio/operator/pkg/client/informers/externalversions/minio.min.io/v2" stsInformers "github.com/minio/operator/pkg/client/informers/externalversions/sts.min.io/v1alpha1" - "github.com/minio/operator/pkg/resources/services" "github.com/minio/operator/pkg/resources/statefulsets" ) @@ -197,6 +198,11 @@ type Controller struct { // policyBindingListerSynced returns true if the PolicyBinding shared informer // has synced at least once. policyBindingListerSynced cache.InformerSynced + + // controllers denotes the list of components controlled + // by the controller. Each component is itself + // a controller. This handle is for supporting the abstraction. + controllers []*JobController } // EventType is Event type to handle @@ -208,7 +214,7 @@ const ( LeaderElection ) -// EventNotification - structure to send messages trough a channel regarding a error event to be handled +// EventNotification - structure to send messages through a channel regarding a error event to be handled type EventNotification struct { // Err the error to handle if any, null when is just a message Err error @@ -216,8 +222,25 @@ type EventNotification struct { Type EventType } -// NewController returns a new sample controller -func NewController(podName string, namespacesToWatch set.StringSet, kubeClientSet kubernetes.Interface, k8sClient client.Client, minioClientSet clientset.Interface, promClient promclientset.Interface, statefulSetInformer appsinformers.StatefulSetInformer, deploymentInformer appsinformers.DeploymentInformer, podInformer coreinformers.PodInformer, tenantInformer informers.TenantInformer, policyBindingInformer stsInformers.PolicyBindingInformer, serviceInformer coreinformers.ServiceInformer, hostsTemplate, operatorVersion string) *Controller { +// NewController returns a new Operator Controller +func NewController( + podName string, + namespacesToWatch set.StringSet, + kubeClientSet kubernetes.Interface, + k8sClient client.Client, + minioClientSet clientset.Interface, + promClient promclientset.Interface, + statefulSetInformer appsinformers.StatefulSetInformer, + deploymentInformer appsinformers.DeploymentInformer, + podInformer coreinformers.PodInformer, + tenantInformer informers.TenantInformer, + policyBindingInformer stsInformers.PolicyBindingInformer, + serviceInformer coreinformers.ServiceInformer, + hostsTemplate, + operatorVersion string, + minioJobinformer jobinformers.MinIOJobInformer, + jobInformer batchv1.JobInformer, +) *Controller { // Create event broadcaster // Add minio-controller types to the default Kubernetes Scheme so Events can be // logged for minio-controller types. @@ -248,6 +271,14 @@ func NewController(podName string, namespacesToWatch set.StringSet, kubeClientSe oprImg = env.Get(DefaultOperatorImageEnv, oprImg) + //controllerConfig := controllerConfig{ + // serviceLister: serviceInformer.Lister(), + // kubeClientSet: kubeClientSet, + // statefulSetLister: statefulSetInformer.Lister(), + // deploymentLister: deploymentInformer.Lister(), + // recorder: recorder, + //} + controller := &Controller{ podName: podName, namespacesToWatch: namespacesToWatch, @@ -270,6 +301,17 @@ func NewController(podName string, namespacesToWatch set.StringSet, kubeClientSe operatorVersion: operatorVersion, policyBindingListerSynced: policyBindingInformer.Informer().HasSynced, operatorImage: oprImg, + controllers: []*JobController{ + NewJobController( + minioJobinformer, + jobInformer, + namespacesToWatch, + kubeClientSet, + recorder, + queue.NewNamedRateLimitingQueue(MinIOControllerRateLimiter(), "MinioJobs"), + k8sClient, + ), + }, } // Initialize operator HTTP upgrade server handlers @@ -408,10 +450,19 @@ func leaderRun(ctx context.Context, c *Controller, threadiness int, stopCh <-cha if ok := cache.WaitForCacheSync(stopCh, c.statefulSetListerSynced, c.deploymentListerSynced, c.tenantsSynced, c.policyBindingListerSynced); !ok { panic("failed to wait for caches to sync") } + // Wait for the caches to be synced before starting workers + for _, jobController := range c.controllers { + if ok := cache.WaitForCacheSync(stopCh, jobController.minioJobHasSynced, jobController.jobHasSynced); !ok { + panic("failed to wait for caches to sync") + } + } - klog.Info("Starting workers") - // Launch two workers to process Tenant resources + klog.Info("Starting workers and Job workers") + JobController := c.controllers[0] + // fmt.Println(controller.SyncHandler()) + // Launch two workers to process Job resources for i := 0; i < threadiness; i++ { + go wait.Until(JobController.runJobWorker, time.Second, stopCh) go wait.Until(c.runWorker, time.Second, stopCh) } @@ -629,7 +680,7 @@ func (c *Controller) Stop() { // workqueue. func (c *Controller) runWorker() { defer runtime.HandleCrash() - for c.processNextWorkItem() { + for processNextItem(c.workqueue, c.syncHandler) { } } @@ -638,72 +689,8 @@ func (c *Controller) runWorker() { // healthCheckQueue. func (c *Controller) runHealthCheckWorker() { defer runtime.HandleCrash() - for c.processNextHealthCheckItem() { - } -} - -// processNextWorkItem will read a single work item off the workqueue and -// attempt to process it, by calling the syncHandler. -func (c *Controller) processNextWorkItem() bool { - obj, shutdown := c.workqueue.Get() - if shutdown { - return false - } - - // We wrap this block in a func so we can defer c.workqueue.Done. - processItem := func(obj interface{}) error { - // We call Done here so the workqueue knows we have finished - // processing this item. We also must remember to call Forget if we - // do not want this work item being re-queued. For example, we do - // not call Forget if a transient error occurs, instead the item is - // put back on the workqueue and attempted again after a back-off - // period. - defer c.workqueue.Done(obj) - var key string - var ok bool - // We expect strings to come off the workqueue. These are of the - // form namespace/name. We do this as the delayed nature of the - // workqueue means the items in the informer cache may actually be - // more up to date that when the item was initially put onto the - // workqueue. - if key, ok = obj.(string); !ok { - // As the item in the workqueue is actually invalid, we call - // Forget here else we'd go into a loop of attempting to - // process a work item that is invalid. - c.workqueue.Forget(obj) - runtime.HandleError(fmt.Errorf("expected string in workqueue but got %#v", obj)) - return nil - } - klog.V(2).Infof("Key from workqueue: %s", key) - - result, err := c.syncHandler(key) - switch { - case err != nil: - c.workqueue.AddRateLimited(key) - return fmt.Errorf("error syncing '%s': %s", key, err.Error()) - case result.RequeueAfter > 0: - // The result.RequeueAfter request will be lost, if it is returned - // along with a non-nil error. But this is intended as - // We need to drive to stable reconcile loops before queuing due - // to result.RequestAfter - c.workqueue.Forget(obj) - c.workqueue.AddAfter(key, result.RequeueAfter) - case result.Requeue: - c.workqueue.AddRateLimited(key) - default: - // Finally, if no error occurs we Forget this item so it does not - // get queued again until another change happens. - c.workqueue.Forget(obj) - klog.V(4).Infof("Successfully synced '%s'", key) - } - return nil + for processNextItem(c.healthCheckQueue, c.syncHealthCheckHandler) { } - - if err := processItem(obj); err != nil { - runtime.HandleError(err) - return true - } - return true } const slashSeparator = "/" @@ -799,7 +786,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { if _, err2 := c.updateTenantStatus(ctx, tenant, err.Error(), 0); err2 != nil { klog.V(2).Infof(err2.Error()) } - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "MissingCreds", "Tenant is missing root credentials") + c.recorder.Event(tenant, corev1.EventTypeWarning, "MissingCreds", "Tenant is missing root credentials") return WrapResult(Result{}, nil) } return WrapResult(Result{}, err) @@ -891,59 +878,11 @@ func (c *Controller) syncHandler(key string) (Result, error) { return WrapResult(Result{}, err) } - // Handle the Internal Headless Service for Tenant StatefulSet - hlSvc, err := c.serviceLister.Services(tenant.Namespace).Get(tenant.MinIOHLServiceName()) + // Check MinIO Headless Service used for internode communication + err = c.checkMinIOHLSvc(ctx, tenant, nsName) if err != nil { - if k8serrors.IsNotFound(err) { - if tenant, err = c.updateTenantStatus(ctx, tenant, StatusProvisioningHLService, 0); err != nil { - return WrapResult(Result{}, err) - } - klog.V(2).Infof("Creating a new Headless Service for cluster %q", nsName) - // Create the headless service for the tenant - hlSvc = services.NewHeadlessForMinIO(tenant) - _, err = c.kubeClientSet.CoreV1().Services(tenant.Namespace).Create(ctx, hlSvc, cOpts) - if err != nil { - return WrapResult(Result{}, err) - } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "SvcCreated", "Headless Service created") - } else { - return WrapResult(Result{}, err) - } - } else { - existingPorts := hlSvc.Spec.Ports - sftpPortFound := false - for _, port := range existingPorts { - if port.Name == miniov2.MinIOServiceSFTPPortName { - sftpPortFound = true - break - } - } - var newPorts []corev1.ServicePort - if tenant.Spec.Features != nil && tenant.Spec.Features.EnableSFTP != nil && *tenant.Spec.Features.EnableSFTP { - if !sftpPortFound { - newPorts = existingPorts - newPorts = append(newPorts, corev1.ServicePort{Port: miniov2.MinIOSFTPPort, Name: miniov2.MinIOServiceSFTPPortName}) - hlSvc.Spec.Ports = newPorts - _, err := c.kubeClientSet.CoreV1().Services(tenant.Namespace).Update(ctx, hlSvc, metav1.UpdateOptions(cOpts)) - if err != nil { - return WrapResult(Result{}, err) - } - } - } else { - if sftpPortFound { - for _, port := range existingPorts { - if port.Name == miniov2.MinIOServiceSFTPPortName { - continue - } - newPorts = append(newPorts, port) - } - hlSvc.Spec.Ports = newPorts - _, err := c.kubeClientSet.CoreV1().Services(tenant.Namespace).Update(ctx, hlSvc, metav1.UpdateOptions(cOpts)) - if err != nil { - return WrapResult(Result{}, err) - } - } - } + klog.V(2).Infof("error consolidating headless service: %s", err.Error()) + return WrapResult(Result{}, err) } // List all MinIO Tenants in this namespace. @@ -992,7 +931,8 @@ func (c *Controller) syncHandler(key string) (Result, error) { // check if operator-ca-tls has to be updated or re-created in the tenant namespace operatorCATLSExists, err := c.checkOperatorCAForTenant(ctx, tenant) if err != nil { - return WrapResult(Result{}, err) + // Don't return here as we get stuck when recreating the stateful set + klog.Infof("There was an error while updating the certificate %s", err) } // consolidate the status of all pools. this is meant to cover for legacy tenants @@ -1063,7 +1003,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { SkipEnvVars: skipEnvVars, Pool: &pool, PoolStatus: &tenant.Status.Pools[i], - ServiceName: hlSvc.Name, + ServiceName: tenant.MinIOHLServiceName(), HostsTemplate: c.hostsTemplate, OperatorVersion: c.operatorVersion, OperatorCATLS: operatorCATLSExists, @@ -1073,7 +1013,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { if err != nil { return WrapResult(Result{}, err) } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "PoolCreated", fmt.Sprintf("Tenant pool %s created", pool.Name)) + c.recorder.Event(tenant, corev1.EventTypeNormal, "PoolCreated", fmt.Sprintf("Tenant pool %s created", pool.Name)) // Report the pool is properly created tenant.Status.Pools[i].State = miniov2.PoolCreated // mark we are adding a new pool to the next block can act accordingly @@ -1234,7 +1174,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { // Update failed, nothing needs to be changed in the container return WrapResult(Result{}, err) } - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "Inplace update is disabled, falling back to performing only statefulset update.", fmt.Sprintf("Tenant %s", tenant.Name)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "Inplace update is disabled, falling back to performing only statefulset update.", fmt.Sprintf("Tenant %s", tenant.Name)) } if err == nil { if us.CurrentVersion != us.UpdatedVersion { @@ -1273,7 +1213,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { SkipEnvVars: skipEnvVars, Pool: &pool, PoolStatus: &tenant.Status.Pools[i], - ServiceName: hlSvc.Name, + ServiceName: tenant.MinIOHLServiceName(), HostsTemplate: c.hostsTemplate, OperatorVersion: c.operatorVersion, OperatorCATLS: operatorCATLSExists, @@ -1282,7 +1222,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { if _, err = c.kubeClientSet.AppsV1().StatefulSets(tenant.Namespace).Update(ctx, ss, uOpts); err != nil { return WrapResult(Result{}, err) } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "PoolUpdated", fmt.Sprintf("Tenant pool %s updated", pool.Name)) + c.recorder.Event(tenant, corev1.EventTypeNormal, "PoolUpdated", fmt.Sprintf("Tenant pool %s updated", pool.Name)) } } @@ -1323,7 +1263,7 @@ func (c *Controller) syncHandler(key string) (Result, error) { SkipEnvVars: skipEnvVars, Pool: &pool, PoolStatus: &tenant.Status.Pools[i], - ServiceName: hlSvc.Name, + ServiceName: tenant.MinIOHLServiceName(), HostsTemplate: c.hostsTemplate, OperatorVersion: c.operatorVersion, OperatorCATLS: operatorCATLSExists, @@ -1389,22 +1329,22 @@ func (c *Controller) syncHandler(key string) (Result, error) { if !tenant.Status.ProvisionedUsers && len(tenant.Spec.Users) > 0 { if err := c.createUsers(ctx, tenant, tenantConfiguration); err != nil { klog.V(2).Infof("Unable to create MinIO users: %v", err) - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "UsersCreatedFailed", fmt.Sprintf("Users creation failed: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "UsersCreatedFailed", fmt.Sprintf("Users creation failed: %s", err)) // retry after 5sec return WrapResult(Result{RequeueAfter: time.Second * 5}, nil) } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "UsersCreated", "Users created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "UsersCreated", "Users created") } // Ensure we are only creating the bucket if len(tenant.Spec.Buckets) > 0 { if create, err := c.createBuckets(ctx, tenant, tenantConfiguration); err != nil { klog.V(2).Infof("Unable to create MinIO buckets: %v", err) - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "BucketsCreatedFailed", fmt.Sprintf("Buckets creation failed: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "BucketsCreatedFailed", fmt.Sprintf("Buckets creation failed: %s", err)) // retry after 5sec return WrapResult(Result{RequeueAfter: time.Second * 5}, err) } else if create { - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "BucketsCreated", "Buckets created") } } @@ -1500,3 +1440,65 @@ type patchAnnotation struct { Path string `json:"path"` Value string `json:"value"` } + +func processNextItem(workqueue queue.RateLimitingInterface, syncer func(key string) (Result, error)) bool { + obj, shutdown := workqueue.Get() + if shutdown { + return false + } + + // We wrap this block in a func so we can defer c.workqueue.Done. + processItem := func(obj interface{}) error { + // We call Done here so the workqueue knows we have finished + // processing this item. We also must remember to call Forget if we + // do not want this work item being re-queued. For example, we do + // not call Forget if a transient error occurs, instead the item is + // put back on the workqueue and attempted again after a back-off + // period. + defer workqueue.Done(obj) + var key string + var ok bool + // We expect strings to come off the workqueue. These are of the + // form namespace/name. We do this as the delayed nature of the + // workqueue means the items in the informer cache may actually be + // more up to date that when the item was initially put onto the + // workqueue. + if key, ok = obj.(string); !ok { + // As the item in the workqueue is actually invalid, we call + // Forget here else we'd go into a loop of attempting to + // process a work item that is invalid. + workqueue.Forget(obj) + runtime.HandleError(fmt.Errorf("expected string in workqueue but got %#v", obj)) + return nil + } + klog.V(2).Infof("Key from workqueue: %s", key) + + result, err := syncer(key) + switch { + case err != nil: + workqueue.AddRateLimited(key) + return fmt.Errorf("error syncing '%s': %s", key, err.Error()) + case result.RequeueAfter > 0: + // The result.RequeueAfter request will be lost, if it is returned + // along with a non-nil error. But this is intended as + // We need to drive to stable reconcile loops before queuing due + // to result.RequestAfter + workqueue.Forget(obj) + workqueue.AddAfter(key, result.RequeueAfter) + case result.Requeue: + workqueue.AddRateLimited(key) + default: + // Finally, if no error occurs we Forget this item so it does not + // get queued again until another change happens. + workqueue.Forget(obj) + klog.V(4).Infof("Successfully synced '%s'", key) + } + return nil + } + + if err := processItem(obj); err != nil { + runtime.HandleError(err) + return true + } + return true +} diff --git a/pkg/controller/minio-services.go b/pkg/controller/minio-services.go index fe425c94176..1eaf01a16e2 100644 --- a/pkg/controller/minio-services.go +++ b/pkg/controller/minio-services.go @@ -21,7 +21,6 @@ import ( miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" "github.com/minio/operator/pkg/resources/services" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -46,7 +45,7 @@ func (c *Controller) checkMinIOSvc(ctx context.Context, tenant *miniov2.Tenant, if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "SvcCreated", "MinIO Service Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "SvcCreated", "MinIO Service Created") } else { return err } @@ -72,9 +71,9 @@ func (c *Controller) checkMinIOSvc(ctx context.Context, tenant *miniov2.Tenant, // Only when ExposeServices is set an explicit value we do modifications to the service type if tenant.Spec.ExposeServices != nil { if tenant.Spec.ExposeServices.MinIO { - svc.Spec.Type = v1.ServiceTypeLoadBalancer + svc.Spec.Type = corev1.ServiceTypeLoadBalancer } else { - svc.Spec.Type = v1.ServiceTypeClusterIP + svc.Spec.Type = corev1.ServiceTypeClusterIP } } @@ -85,12 +84,12 @@ func (c *Controller) checkMinIOSvc(ctx context.Context, tenant *miniov2.Tenant, if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "Updated", "MinIO Service Updated") + c.recorder.Event(tenant, corev1.EventTypeNormal, "Updated", "MinIO Service Updated") } return err } -func minioSvcMatchesSpecification(svc *v1.Service, expectedSvc *v1.Service) (bool, error) { +func minioSvcMatchesSpecification(svc *corev1.Service, expectedSvc *corev1.Service) (bool, error) { // expected labels match for k, expVal := range expectedSvc.ObjectMeta.Labels { if value, ok := svc.ObjectMeta.Labels[k]; !ok || value != expVal { @@ -125,3 +124,54 @@ func minioSvcMatchesSpecification(svc *v1.Service, expectedSvc *v1.Service) (boo } return true, nil } + +// checkMinIOHLSvc validates the existence of the MinIO headless service and validate its status against what +// the specification states +func (c *Controller) checkMinIOHLSvc(ctx context.Context, tenant *miniov2.Tenant, nsName types.NamespacedName) error { + // Handle the Internal Headless Service for Tenant StatefulSet + hlSvc, err := c.serviceLister.Services(tenant.Namespace).Get(tenant.MinIOHLServiceName()) + if err != nil { + if k8serrors.IsNotFound(err) { + if tenant, err = c.updateTenantStatus(ctx, tenant, StatusProvisioningHLService, 0); err != nil { + return err + } + klog.V(2).Infof("Creating a new Headless Service for cluster %q", nsName) + // Create the headless service for the tenant + hlSvc = services.NewHeadlessForMinIO(tenant) + _, err = c.kubeClientSet.CoreV1().Services(tenant.Namespace).Create(ctx, hlSvc, metav1.CreateOptions{}) + if err != nil { + return err + } + c.recorder.Event(tenant, corev1.EventTypeNormal, "SvcCreated", "Headless Service created") + } else { + return err + } + } + // compare the current version of the service to what we expect + expectedHlSvc := services.NewHeadlessForMinIO(tenant) + // does the current service matches our specification? + minioSvcMatchesSpec, err := minioSvcMatchesSpecification(hlSvc, expectedHlSvc) + + // check the specification of the MinIO ClusterIP service + if !minioSvcMatchesSpec { + if err != nil { + klog.Infof("Headless Services don't match: %s", err) + } + + // impose what we care about + hlSvc.ObjectMeta.Annotations = expectedHlSvc.ObjectMeta.Annotations + hlSvc.ObjectMeta.Labels = expectedHlSvc.ObjectMeta.Labels + hlSvc.Spec.Ports = expectedHlSvc.Spec.Ports + + // update the selector + hlSvc.Spec.Selector = expectedHlSvc.Spec.Selector + + _, err = c.kubeClientSet.CoreV1().Services(tenant.Namespace).Update(ctx, hlSvc, metav1.UpdateOptions{}) + if err != nil { + return err + } + c.recorder.Event(tenant, corev1.EventTypeNormal, "Updated", "Headless Service Updated") + + } + return err +} diff --git a/pkg/controller/minio.go b/pkg/controller/minio.go index eaa7d6a92af..6f182e96d7c 100644 --- a/pkg/controller/minio.go +++ b/pkg/controller/minio.go @@ -92,7 +92,7 @@ func (c *Controller) deleteCSR(ctx context.Context, csrName string) error { } func (c *Controller) recreateMinIOCertsOnTenant(ctx context.Context, tenant *miniov2.Tenant, nsName types.NamespacedName) error { - klog.V(2).Info("Deleting the TLS secret and CSR of expired cert on tenant %s", tenant.Name) + klog.V(2).Infof("Deleting the TLS secret and CSR of expired cert on tenant %s", tenant.Name) // First delete the TLS secret of expired cert on the tenant err := c.kubeClientSet.CoreV1().Secrets(tenant.Namespace).Delete(ctx, tenant.MinIOTLSSecretName(), metav1.DeleteOptions{}) @@ -373,13 +373,13 @@ func (c *Controller) createMinIOCSR(ctx context.Context, tenant *miniov2.Tenant) klog.Errorf("Unexpected error during the creation of the csr/%s: %v", tenant.MinIOCSRName(), err) return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "CSRCreated", "MinIO CSR Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "CSRCreated", "MinIO CSR Created") // fetch certificate from CSR certbytes, err := c.fetchCertificate(ctx, tenant.MinIOCSRName()) if err != nil { klog.Errorf("Unexpected error during the creation of the csr/%s: %v", tenant.MinIOCSRName(), err) - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "CSRFailed", fmt.Sprintf("MinIO CSR Failed to create: %s", err)) + c.recorder.Event(tenant, corev1.EventTypeWarning, "CSRFailed", fmt.Sprintf("MinIO CSR Failed to create: %s", err)) return err } diff --git a/pkg/controller/monitoring.go b/pkg/controller/monitoring.go index f26051acbb3..cd3360d73d6 100644 --- a/pkg/controller/monitoring.go +++ b/pkg/controller/monitoring.go @@ -20,7 +20,7 @@ import ( "log" "time" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -38,8 +38,6 @@ const ( HealthHealingMessage = "Healing" // HealthReduceAvailabilityMessage some drives are offline HealthReduceAvailabilityMessage = "Reduced Availability" - // HealthAboutToLoseQuorumMessage means we are close to losing write capabilities - HealthAboutToLoseQuorumMessage = "About to lose quorum" ) // recurrentTenantStatusMonitor loop that checks every 3 minutes for tenants health @@ -122,6 +120,11 @@ func (c *Controller) updateHealthStatusForTenant(tenant *miniov2.Tenant) error { if err != nil { // show the error and continue klog.Infof("'%s/%s' Failed to get cluster health: %v", tenant.Namespace, tenant.Name, err) + err = c.renewExternalCerts(context.Background(), tenant, err) + if err != nil { + klog.Errorf("There was an error on certificate renewal %s", err) + return err + } return nil } @@ -259,80 +262,6 @@ type HealthResult struct { WriteQuorumDrives int } -// HealthMode type of query we want to perform to MinIO cluster health -type HealthMode string - -const ( - // MaintenanceMode query type for when we want to ask MinIO if we can take down 1 server - MaintenanceMode HealthMode = "MaintenanceMode" - // RegularMode query type for when we want to ask MinIO the current state of healing/health - RegularMode = "RegularMode" -) - -// processNextHealthCheckItem will read a single work item off the workqueue and -// attempt to process it, by calling the syncHandler. -func (c *Controller) processNextHealthCheckItem() bool { - obj, shutdown := c.healthCheckQueue.Get() - if shutdown { - return false - } - - // We wrap this block in a func so we can defer c.healthCheckQueue.Done. - processItem := func(obj interface{}) error { - // We call Done here so the healthCheckQueue knows we have finished - // processing this item. We also must remember to call Forget if we - // do not want this work item being re-queued. For example, we do - // not call Forget if a transient error occurs, instead the item is - // put back on the healthCheckQueue and attempted again after a back-off - // period. - defer c.healthCheckQueue.Done(obj) - var key string - var ok bool - // We expect strings to come off the healthCheckQueue. These are of the - // form namespace/name. We do this as the delayed nature of the - // healthCheckQueue means the items in the informer cache may actually be - // more up to date that when the item was initially put onto the - // healthCheckQueue. - if key, ok = obj.(string); !ok { - // As the item in the healthCheckQueue is actually invalid, we call - // Forget here else we'd go into a loop of attempting to - // process a work item that is invalid. - c.healthCheckQueue.Forget(obj) - runtime.HandleError(fmt.Errorf("expected string in healthCheckQueue but got %#v", obj)) - return nil - } - klog.V(2).Infof("Key from healthCheckQueue: %s", key) - - result, err := c.syncHealthCheckHandler(key) - switch { - case err != nil: - c.workqueue.AddRateLimited(key) - return fmt.Errorf("error checking health check '%s': %s", key, err.Error()) - case result.RequeueAfter > 0: - // The result.RequeueAfter request will be lost, if it is returned - // along with a non-nil error. But this is intended as - // We need to drive to stable reconcile loops before queuing due - // to result.RequestAfter - c.workqueue.Forget(obj) - c.workqueue.AddAfter(key, result.RequeueAfter) - case result.Requeue: - c.workqueue.AddRateLimited(key) - default: - // Finally, if no error occurs we Forget this item so it does not - // get queued again until another change happens. - c.workqueue.Forget(obj) - klog.V(4).Infof("Successfully health checked '%s'", key) - } - return nil - } - - if err := processItem(obj); err != nil { - runtime.HandleError(err) - return true - } - return true -} - // syncHealthCheckHandler acts on work items from the healthCheckQueue func (c *Controller) syncHealthCheckHandler(key string) (Result, error) { // Convert the namespace/name string into a distinct namespace and name diff --git a/pkg/controller/operator.go b/pkg/controller/operator.go index bdf6db38bcb..344d4ff4197 100644 --- a/pkg/controller/operator.go +++ b/pkg/controller/operator.go @@ -24,6 +24,7 @@ import ( "fmt" "net" "net/http" + "strings" "time" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -60,7 +61,7 @@ const ( // DefaultDeploymentName is the default name of the operator deployment DefaultDeploymentName = "minio-operator" // DefaultOperatorImage is the version fo the operator being used - DefaultOperatorImage = "minio/operator:v5.0.10" + DefaultOperatorImage = "minio/operator:v5.0.14" // DefaultOperatorImageEnv is the default image to minio instance DefaultOperatorImageEnv = "MINIO_OPERATOR_IMAGE" ) @@ -172,6 +173,29 @@ func (c *Controller) fetchTransportCACertificates() (pool *x509.CertPool) { rootCAs.AppendCertsFromPEM(val) } } + + // Multi-tenancy support for external certificates + // One secret per tenant to allow for the automatic appending and renewal of certificates upon expiration. + secretsAvailableAtOperatorNS, _ := c.kubeClientSet.CoreV1().Secrets(miniov2.GetNSFromFile()).List(context.Background(), metav1.ListOptions{}) + for _, secret := range secretsAvailableAtOperatorNS.Items { + // Check if secret starts with "operator-ca-tls-" + secretName := OperatorCATLSSecretName + "-" + if strings.HasPrefix(secret.Name, secretName) { + klog.Infof("External secret found: %s", secret.Name) + operatorCATLSCert, err := c.kubeClientSet.CoreV1().Secrets(miniov2.GetNSFromFile()).Get(context.Background(), secret.Name, metav1.GetOptions{}) + if err == nil && operatorCATLSCert != nil { + if val, ok := operatorCATLSCert.Data["ca.crt"]; ok { + klog.Infof("Appending cert from %s secret", secret.Name) + rootCAs.AppendCertsFromPEM(val) + } else { + klog.Errorf("NOT appending %s secret, ok: %t", secret.Name, ok) + } + } else { + klog.Errorf("NOT appending %s secret, err: %s operatorCATLSCert: %s", secret.Name, err, operatorCATLSCert) + } + } + } + return rootCAs } diff --git a/pkg/controller/pools.go b/pkg/controller/pools.go index 4d8f643daa7..1b366f07dc0 100644 --- a/pkg/controller/pools.go +++ b/pkg/controller/pools.go @@ -72,7 +72,10 @@ func poolSSMatchesSpec(expectedStatefulSet, existingStatefulSet *appsv1.Stateful if !equality.Semantic.DeepEqual(expectedMetadata.Labels, existingStatefulSet.ObjectMeta.Labels) { return false, nil } - expectedAnnotations := expectedMetadata.Annotations + expectedAnnotations := map[string]string{} + for k, v := range expectedMetadata.Annotations { + expectedAnnotations[k] = v + } currentAnnotations := existingStatefulSet.ObjectMeta.Annotations delete(expectedAnnotations, corev1.LastAppliedConfigAnnotation) delete(currentAnnotations, corev1.LastAppliedConfigAnnotation) diff --git a/pkg/controller/service-account.go b/pkg/controller/service-account.go index 4ed82691c40..ede5d38b27d 100644 --- a/pkg/controller/service-account.go +++ b/pkg/controller/service-account.go @@ -42,9 +42,9 @@ func (c *Controller) checkAndCreateServiceAccount(ctx context.Context, tenant *m if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "SACreated", "Service Account Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "SACreated", "Service Account Created") } else { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "SAFailed", fmt.Sprintf("Service Account could not be created: %s", err.Error())) + c.recorder.Event(tenant, corev1.EventTypeWarning, "SAFailed", fmt.Sprintf("Service Account could not be created: %s", err.Error())) return err } } @@ -57,9 +57,9 @@ func (c *Controller) checkAndCreateServiceAccount(ctx context.Context, tenant *m if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "RoleCreated", "Role Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "RoleCreated", "Role Created") } else { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "RoleFailed", fmt.Sprintf("Role could not be created: %s", err.Error())) + c.recorder.Event(tenant, corev1.EventTypeWarning, "RoleFailed", fmt.Sprintf("Role could not be created: %s", err.Error())) return err } } @@ -71,9 +71,9 @@ func (c *Controller) checkAndCreateServiceAccount(ctx context.Context, tenant *m if err != nil { return err } - c.RegisterEvent(ctx, tenant, corev1.EventTypeNormal, "BindingCreated", "Role Binding Created") + c.recorder.Event(tenant, corev1.EventTypeNormal, "BindingCreated", "Role Binding Created") } else { - c.RegisterEvent(ctx, tenant, corev1.EventTypeWarning, "BindingFailed", fmt.Sprintf("Role Binding could not be created: %s", err.Error())) + c.recorder.Event(tenant, corev1.EventTypeWarning, "BindingFailed", fmt.Sprintf("Role Binding could not be created: %s", err.Error())) return err } } diff --git a/pkg/controller/sts.go b/pkg/controller/sts.go index 28575aeefbd..72bb70bc6d7 100644 --- a/pkg/controller/sts.go +++ b/pkg/controller/sts.go @@ -10,7 +10,7 @@ import ( "time" "github.com/gorilla/mux" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" "github.com/minio/minio-go/v7/pkg/credentials" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" xhttp "github.com/minio/operator/pkg/internal" @@ -314,7 +314,7 @@ func GetPolicy(ctx context.Context, adminClient *madmin.AdminClient, policyName } // AssumeRole invokes the AssumeRole method in the Minio Tenant -func AssumeRole(ctx context.Context, c *Controller, tenant *miniov2.Tenant, sessionPolicy string, duration int) (*credentials.Value, error) { +func AssumeRole(ctx context.Context, c *Controller, tenant *miniov2.Tenant, region string, sessionPolicy string, duration int) (*credentials.Value, error) { client, accessKey, secretKey, err := getTenantClient(ctx, c, tenant) if err != nil { return nil, err @@ -330,6 +330,7 @@ func AssumeRole(ctx context.Context, c *Controller, tenant *miniov2.Tenant, sess SecretKey: secretKey, Policy: sessionPolicy, DurationSeconds: duration, + Location: region, } stsAssumeRole := &credentials.STSAssumeRole{ diff --git a/pkg/controller/sts_handlers.go b/pkg/controller/sts_handlers.go index 3a0c6d05087..505864ca6c0 100644 --- a/pkg/controller/sts_handlers.go +++ b/pkg/controller/sts_handlers.go @@ -178,6 +178,13 @@ func (c *Controller) AssumeRoleWithWebIdentityHandler(w http.ResponseWriter, r * return } + info, err := adminClient.ServerInfo(ctx) + if err != nil { + writeSTSErrorResponse(w, true, ErrSTSInternalError, fmt.Errorf("Error communicating with tenant '%s': %s", tenant.Name, err)) + return + } + region := info.Region + // Session Policy sessionPolicyStr := r.Form.Get(stsPolicy) var compactedSessionPolicy string @@ -236,8 +243,8 @@ func (c *Controller) AssumeRoleWithWebIdentityHandler(w http.ResponseWriter, r * return } + durationInSeconds := 3600 // Default expiration durationStr := r.Form.Get(stsDurationSeconds) - var durationInSeconds int if durationStr != "" { duration, err := strconv.Atoi(durationStr) if err != nil { @@ -252,7 +259,7 @@ func (c *Controller) AssumeRoleWithWebIdentityHandler(w http.ResponseWriter, r * durationInSeconds = duration } - stsCredentials, err := AssumeRole(ctx, c, &tenant, bfCompact, durationInSeconds) + stsCredentials, err := AssumeRole(ctx, c, &tenant, region, bfCompact, durationInSeconds) if err != nil { writeSTSErrorResponse(w, true, ErrSTSInternalError, err) return @@ -264,6 +271,7 @@ func (c *Controller) AssumeRoleWithWebIdentityHandler(w http.ResponseWriter, r * AccessKey: stsCredentials.AccessKeyID, SecretKey: stsCredentials.SecretAccessKey, SessionToken: stsCredentials.SessionToken, + Expiration: stsCredentials.Expiration, }, }, } diff --git a/pkg/controller/tenants.go b/pkg/controller/tenants.go index 5f7d553e282..d869a167bdc 100644 --- a/pkg/controller/tenants.go +++ b/pkg/controller/tenants.go @@ -19,6 +19,10 @@ package controller import ( "context" "errors" + "strings" + + corev1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -45,6 +49,101 @@ func (c *Controller) getTenantConfiguration(ctx context.Context, tenant *miniov2 return tenantConfiguration, nil } +// renewCert will renew one certificate at a time +func (c *Controller) renewCert(secret corev1.Secret, index int, tenant *miniov2.Tenant) error { + // Check if secret starts with "operator-ca-tls-" + secretName := OperatorCATLSSecretName + "-" + // If the secret does not start with "operator-ca-tls-" then no need to continue + if !strings.HasPrefix(secret.Name, secretName) { + klog.Info("No secret found for multi-tenancy architecture of external certificates") + return nil + } + klog.Infof("%d external secret found: %s", index, secret.Name) + klog.Info("We are going to renew the external certificate for the tenant...") + // Get the new certificate generated by cert-manager + tenantSecretName := tenant.Spec.ExternalCertSecret[0].Name + data, err := c.kubeClientSet.CoreV1().Secrets(tenant.Namespace).Get(context.Background(), tenantSecretName, metav1.GetOptions{}) + if err != nil { + klog.Errorf("Couldn't get the certificate due to error %s", err) + return err + } + if data == nil || len(data.Data) <= 0 { + klog.Errorf("certificate's data can't be empty: %s", data) + return errors.New("empty cert data") + } + CACertificate := data.Data["ca.crt"] + if CACertificate == nil || len(CACertificate) <= 0 { + klog.Errorf("ca.crt certificate data can't be empty: %s", CACertificate) + return errors.New("empty cert ca data") + } + klog.Info("certificate data is not empty, proceed with renewal") + // Delete the secret that starts with operator-ca-tls- because it is expired + err = c.kubeClientSet.CoreV1().Secrets(miniov2.GetNSFromFile()).Delete(context.Background(), secret.Name, metav1.DeleteOptions{}) + if err != nil { + klog.Infof("There was an error when deleting the secret: %s", err) + return err + } + // Create the new secret that contains the new certificate + newSecret := &corev1.Secret{ + Type: "Opaque", + ObjectMeta: metav1.ObjectMeta{ + Name: secret.Name, + Namespace: miniov2.GetNSFromFile(), + }, + Data: map[string][]byte{ + "ca.crt": CACertificate, + }, + } + _, err = c.kubeClientSet.CoreV1().Secrets(miniov2.GetNSFromFile()).Create(context.Background(), newSecret, metav1.CreateOptions{}) + if err != nil { + klog.Errorf("Secret not created %s", err) + return err + } + // Append it + c.fetchTransportCACertificates() + // Reload CA certificates + c.createTransport() + // Rollout the Operator Deployment to use new certificate and trust the tenant. + operatorDeployment, err := c.kubeClientSet.AppsV1().Deployments(miniov2.GetNSFromFile()).Get(context.Background(), miniov2.GetNSFromFile(), metav1.GetOptions{}) + if err != nil || operatorDeployment == nil { + klog.Errorf("Couldn't retrieve the deployment %s", err) + return err + } + operatorDeployment.Spec.Template.ObjectMeta.Name = miniov2.GetNSFromFile() + operatorDeployment, err = c.kubeClientSet.AppsV1().Deployments(miniov2.GetNSFromFile()).Update(context.Background(), operatorDeployment, metav1.UpdateOptions{}) + if err != nil { + klog.Errorf("There was an error on deployment update %s", err) + return err + } + klog.Info("external certificate successfully renewed for the tenant") + return nil +} + +// renewExternalCerts renews external certificates when they expire, ensuring that the Operator trusts its tenants. +func (c *Controller) renewExternalCerts(ctx context.Context, tenant *miniov2.Tenant, err error) error { + if strings.Contains(err.Error(), "failed to verify certificate") { + externalCertSecret := tenant.Spec.ExternalCertSecret + klog.Info("Let's check if there is an external cert for the tenant...") + if externalCertSecret != nil { + // Check that there is a secret that starts with "operator-ca-tls-" to proceed with the renewal + secretsAvailableAtOperatorNS, err := c.kubeClientSet.CoreV1().Secrets(miniov2.GetNSFromFile()).List(context.Background(), metav1.ListOptions{}) + if err != nil { + klog.Info("No external certificates are found under the multi-tenancy architecture to handle.") + return nil + } + klog.Info("there are secret(s) for the operator") + for index, secret := range secretsAvailableAtOperatorNS.Items { + err = c.renewCert(secret, index, tenant) + if err != nil { + klog.Errorf("There was an error while renewing the cert: %s", err) + return err + } + } + } + } + return nil +} + // getTenantCredentials returns a combination of env, credsSecret and Configuration tenant credentials func (c *Controller) getTenantCredentials(ctx context.Context, tenant *miniov2.Tenant) (map[string][]byte, error) { // Configuration for tenant can be passed using 2 different sources, tenant.spec.env and config.env secret diff --git a/pkg/controller/tls.go b/pkg/controller/tls.go index 6bb46b984e7..c29521fe23d 100644 --- a/pkg/controller/tls.go +++ b/pkg/controller/tls.go @@ -158,7 +158,7 @@ func (c *Controller) checkAndCreateCSR(ctx context.Context, deployment metav1.Ob } if err != nil { if k8serrors.IsNotFound(err) { - klog.V(2).Infof("Creating a new Certificate Signing Request for %s Server Certs, cluster %q", serviceName) + klog.V(2).Infof("Creating a new Certificate Signing Request for %s Server Certs.", serviceName) if err = c.createAndStoreCSR(ctx, deployment, serviceName, csrName, secretName); err != nil { return err } diff --git a/pkg/controller/upgrades.go b/pkg/controller/upgrades.go index e3f33f2aada..2f7b304636e 100644 --- a/pkg/controller/upgrades.go +++ b/pkg/controller/upgrades.go @@ -41,6 +41,8 @@ const ( version430 = "v4.3.0" version45 = "v4.5" version500 = "v5.0.0" + // currentVersion will point to the latest released update version + currentVersion = version500 ) // Legacy const @@ -62,7 +64,13 @@ func (c *Controller) checkForUpgrades(ctx context.Context, tenant *miniov2.Tenan version500: c.upgrade500, } - // if the version is not empty, this is not a new tenant, upgrade accordingly + // if tenant has no version we mark it with latest version upgrade released + if tenant.Status.SyncVersion == "" { + tenant.Status.SyncVersion = currentVersion + return c.updateTenantSyncVersion(ctx, tenant, version500) + } + + // if the version is empty, upgrades might not been applied, we apply them all if tenant.Status.SyncVersion != "" { currentSyncVersion, err := version.NewVersion(tenant.Status.SyncVersion) if err != nil { diff --git a/pkg/internal/http.go b/pkg/internal/http.go index 3b4b3513d0e..8d5f93cd5a7 100644 --- a/pkg/internal/http.go +++ b/pkg/internal/http.go @@ -30,27 +30,10 @@ var ( // Standard S3 HTTP response constants const ( - LastModified = "Last-Modified" - Date = "Date" - ETag = "ETag" - ContentType = "Content-Type" - ContentMD5 = "Content-Md5" - ContentEncoding = "Content-Encoding" - Expires = "Expires" - ContentLength = "Content-Length" - ContentLanguage = "Content-Language" - ContentRange = "Content-Range" - Connection = "Connection" - AcceptRanges = "Accept-Ranges" - AmzBucketRegion = "X-Amz-Bucket-Region" - ServerInfo = "Server" - RetryAfter = "Retry-After" - Location = "Location" - CacheControl = "Cache-Control" - ContentDisposition = "Content-Disposition" - Authorization = "Authorization" - Action = "Action" - Range = "Range" + ContentType = "Content-Type" + ContentLength = "Content-Length" + AcceptRanges = "Accept-Ranges" + ServerInfo = "Server" ) // mimeType represents various MIME type used API responses. @@ -59,8 +42,6 @@ type mimeType string const ( // MimeNone Means no response type. MimeNone mimeType = "" - // MimeJSON Means response type is JSON. - MimeJSON mimeType = "application/json" // MimeXML Means response type is XML. MimeXML mimeType = "application/xml" ) diff --git a/pkg/logger/config/config.go b/pkg/logger/config/config.go index ccb30cf28ef..7b3149aef4d 100644 --- a/pkg/logger/config/config.go +++ b/pkg/logger/config/config.go @@ -17,7 +17,7 @@ package config import ( - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" ) // Default keys diff --git a/pkg/resources/configmaps/prometheus.go b/pkg/resources/configmaps/prometheus.go index 9028f3bc43d..df7f8455cc3 100644 --- a/pkg/resources/configmaps/prometheus.go +++ b/pkg/resources/configmaps/prometheus.go @@ -25,7 +25,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" ) type globalConfig struct { @@ -83,14 +82,14 @@ func GetPrometheusConfig(t *miniov2.Tenant, accessKey, secretKey string) *Promet // populate config promConfig := &PrometheusConfig{ Global: globalConfig{ - ScrapeInterval: v2.MinIOPrometheusScrapeInterval, + ScrapeInterval: miniov2.MinIOPrometheusScrapeInterval, EvaluationInterval: 30 * time.Second, }, ScrapeConfigs: []ScrapeConfig{ { JobName: t.PrometheusConfigJobName(), BearerToken: bearerToken, - MetricsPath: v2.MinIOPrometheusPathCluster, + MetricsPath: miniov2.MinIOPrometheusPathCluster, Scheme: minioScheme, TLSConfig: tlsConfig{ CAFile: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", diff --git a/pkg/resources/services/service.go b/pkg/resources/services/service.go index 3212e6b7953..cd6decec876 100644 --- a/pkg/resources/services/service.go +++ b/pkg/resources/services/service.go @@ -89,6 +89,8 @@ func NewClusterIPForConsole(t *miniov2.Tenant) *corev1.Service { } if t.Spec.ServiceMetadata != nil && t.Spec.ServiceMetadata.ConsoleServiceLabels != nil { labels = miniov2.MergeMaps(internalLabels, t.Spec.ServiceMetadata.ConsoleServiceLabels) + } else { + labels = internalLabels } if t.Spec.ServiceMetadata != nil && t.Spec.ServiceMetadata.ConsoleServiceAnnotations != nil { diff --git a/pkg/resources/statefulsets/kes-statefulset.go b/pkg/resources/statefulsets/kes-statefulset.go index 8eb777e8608..49b04091602 100644 --- a/pkg/resources/statefulsets/kes-statefulset.go +++ b/pkg/resources/statefulsets/kes-statefulset.go @@ -17,6 +17,7 @@ package statefulsets import ( "sort" + operatorApi "github.com/minio/operator/api" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -94,7 +95,15 @@ func KESEnvironmentVars(t *miniov2.Tenant) []corev1.EnvVar { // KESServerContainer returns the KES container for a KES StatefulSet. func KESServerContainer(t *miniov2.Tenant) corev1.Container { // Args to start KES with config mounted at miniov2.KESConfigMountPath and require but don't verify mTLS authentication - args := []string{"server", "--config=" + miniov2.KESConfigMountPath + "/server-config.yaml", "--auth=off"} + args := []string{"server", "--config=" + miniov2.KESConfigMountPath + "/server-config.yaml"} + + kesVersion, _ := operatorApi.GetKesConfigVersion(t.Spec.KES.Image) + // Add `--auth` flag only on config versions that are still compatible with it (v1 and v2). + // Starting KES 2023-11-09T17-35-47Z (v3) is no longer supported. + switch kesVersion { + case operatorApi.KesConfigVersion1, operatorApi.KesConfigVersion2: + args = append(args, "--auth=off") + } return corev1.Container{ Name: miniov2.KESContainerName, @@ -109,6 +118,7 @@ func KESServerContainer(t *miniov2.Tenant) corev1.Container { Args: args, Env: KESEnvironmentVars(t), Resources: t.Spec.KES.Resources, + SecurityContext: kesContainerSecurityContext(t), } } @@ -133,6 +143,49 @@ func kesSecurityContext(t *miniov2.Tenant) *corev1.PodSecurityContext { return &securityContext } +// Builds the security context for kes containers +func kesContainerSecurityContext(t *miniov2.Tenant) *corev1.SecurityContext { + // Default values: + // By default, values should be totally empty if not provided + // This is specially needed in OpenShift where Security Context Constraints restrict them + // if let empty then OCP can pick the values from the constraints defined. + containerSecurityContext := corev1.SecurityContext{} + runAsNonRoot := true + var runAsUser int64 = 1000 + var runAsGroup int64 = 1000 + poolSCSet := false + + // Values from pool.SecurityContext ONLY if provided + if t.Spec.KES != nil && t.Spec.KES.SecurityContext != nil { + if t.Spec.KES.SecurityContext.RunAsNonRoot != nil { + runAsNonRoot = *t.Spec.KES.SecurityContext.RunAsNonRoot + poolSCSet = true + } + if t.Spec.KES.SecurityContext.RunAsUser != nil { + runAsUser = *t.Spec.KES.SecurityContext.RunAsUser + poolSCSet = true + } + if t.Spec.KES.SecurityContext.RunAsGroup != nil { + runAsGroup = *t.Spec.KES.SecurityContext.RunAsGroup + poolSCSet = true + } + if poolSCSet { + // Only set values if one of above is set otherwise let it empty + containerSecurityContext = corev1.SecurityContext{ + RunAsNonRoot: &runAsNonRoot, + RunAsUser: &runAsUser, + RunAsGroup: &runAsGroup, + } + } + } + + // Values from kes.ContainerSecurityContext if provided + if t.Spec.KES != nil && t.Spec.KES.ContainerSecurityContext != nil { + containerSecurityContext = *t.Spec.KES.ContainerSecurityContext + } + return &containerSecurityContext +} + // NewForKES creates a new KES StatefulSet for the given Cluster. func NewForKES(t *miniov2.Tenant, serviceName string) *appsv1.StatefulSet { replicas := t.KESReplicas() diff --git a/pkg/resources/statefulsets/minio-statefulset.go b/pkg/resources/statefulsets/minio-statefulset.go index 58722e67f5d..b0ca892cb85 100644 --- a/pkg/resources/statefulsets/minio-statefulset.go +++ b/pkg/resources/statefulsets/minio-statefulset.go @@ -27,7 +27,6 @@ import ( miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -154,6 +153,10 @@ func minioEnvironmentVars(t *miniov2.Tenant, skipEnvVars map[string][]byte, opVe Name: "MINIO_KMS_KES_CA_PATH", Value: miniov2.MinIOCertPath + "/CAs/kes.crt", } + envVarsMap["MINIO_KMS_KES_CAPATH"] = corev1.EnvVar{ + Name: "MINIO_KMS_KES_CAPATH", + Value: miniov2.MinIOCertPath + "/CAs/kes.crt", + } envVarsMap["MINIO_KMS_KES_KEY_NAME"] = corev1.EnvVar{ Name: "MINIO_KMS_KES_KEY_NAME", Value: t.Spec.KES.KeyName, @@ -253,7 +256,7 @@ var TmpCfgVolumeMount = corev1.VolumeMount{ } // Builds the volume mounts for MinIO container. -func volumeMounts(t *miniov2.Tenant, pool *miniov2.Pool, certVolumeSources []v1.VolumeProjection) (mounts []v1.VolumeMount) { +func volumeMounts(t *miniov2.Tenant, pool *miniov2.Pool, certVolumeSources []corev1.VolumeProjection) (mounts []corev1.VolumeMount) { // Default volume name, unless another one was provided name := miniov2.MinIOVolumeName if pool.VolumeClaimTemplate != nil { @@ -290,7 +293,7 @@ func volumeMounts(t *miniov2.Tenant, pool *miniov2.Pool, certVolumeSources []v1. } // Builds the MinIO container for a Tenant. -func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, pool *miniov2.Pool, hostsTemplate string, opVersion string, certVolumeSources []v1.VolumeProjection) v1.Container { +func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, pool *miniov2.Pool, hostsTemplate string, opVersion string, certVolumeSources []corev1.VolumeProjection) corev1.Container { consolePort := miniov2.ConsolePort if t.TLS() { consolePort = miniov2.ConsoleTLSPort @@ -316,7 +319,7 @@ func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, "--sftp", fmt.Sprintf("address=:%d", miniov2.MinIOSFTPPort), "--sftp", "ssh-private-key=" + pkFile, }...) - containerPorts = append(containerPorts, v1.ContainerPort{ + containerPorts = append(containerPorts, corev1.ContainerPort{ ContainerPort: miniov2.MinIOSFTPPort, }) } @@ -380,7 +383,7 @@ func poolTopologySpreadConstraints(z *miniov2.Pool) []corev1.TopologySpreadConst } // Builds the security context for a Pool -func poolSecurityContext(pool *miniov2.Pool, status *miniov2.PoolStatus) *v1.PodSecurityContext { +func poolSecurityContext(pool *miniov2.Pool, status *miniov2.PoolStatus) *corev1.PodSecurityContext { runAsNonRoot := true var runAsUser int64 = 1000 var runAsGroup int64 = 1000 @@ -410,7 +413,7 @@ func poolSecurityContext(pool *miniov2.Pool, status *miniov2.PoolStatus) *v1.Pod } // Builds the security context for containers in a Pool -func poolContainerSecurityContext(pool *miniov2.Pool) *v1.SecurityContext { +func poolContainerSecurityContext(pool *miniov2.Pool) *corev1.SecurityContext { // Default values: // By default, values should be totally empty if not provided // This is specially needed in OpenShift where Security Context Constraints restrict them @@ -497,7 +500,7 @@ func NewPool(args *NewPoolArgs) *appsv1.StatefulSet { podVolumes = append(podVolumes, corev1.Volume{ Name: CfgVol, - VolumeSource: v1.VolumeSource{ + VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }) @@ -878,7 +881,7 @@ func NewPool(args *NewPoolArgs) *appsv1.StatefulSet { return ss } -func getInitContainer(t *miniov2.Tenant, operatorImage string, pool *miniov2.Pool) v1.Container { +func getInitContainer(t *miniov2.Tenant, operatorImage string, pool *miniov2.Pool) corev1.Container { initContainer := corev1.Container{ Name: "validate-arguments", Image: operatorImage, @@ -908,7 +911,7 @@ func getInitContainer(t *miniov2.Tenant, operatorImage string, pool *miniov2.Poo return initContainer } -func getSideCarContainer(t *miniov2.Tenant, operatorImage string, pool *miniov2.Pool) v1.Container { +func getSideCarContainer(t *miniov2.Tenant, operatorImage string, pool *miniov2.Pool) corev1.Container { sidecarContainer := corev1.Container{ Name: "sidecar", Image: operatorImage, diff --git a/pkg/subnet/subnet.go b/pkg/subnet/subnet.go index 193cb44c75d..931508e3ce8 100644 --- a/pkg/subnet/subnet.go +++ b/pkg/subnet/subnet.go @@ -20,7 +20,7 @@ package subnet import ( "errors" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" mc "github.com/minio/mc/cmd" "github.com/minio/operator/pkg/http" diff --git a/pkg/subnet/utils.go b/pkg/subnet/utils.go index 32301fe75f4..e32b9e76aae 100644 --- a/pkg/subnet/utils.go +++ b/pkg/subnet/utils.go @@ -27,7 +27,7 @@ import ( xhttp "github.com/minio/operator/pkg/http" - "github.com/minio/madmin-go/v2" + "github.com/minio/madmin-go/v3" mc "github.com/minio/mc/cmd" "github.com/minio/pkg/env" ) diff --git a/pkg/utils/miniojob/minioJob.go b/pkg/utils/miniojob/minioJob.go new file mode 100644 index 00000000000..c5921d0f6ee --- /dev/null +++ b/pkg/utils/miniojob/minioJob.go @@ -0,0 +1,250 @@ +// This file is part of MinIO Operator +// Copyright (c) 2024 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package miniojob + +import ( + "fmt" + "sort" + "strings" +) + +// ArgType - arg type +type ArgType int + +const ( + // ArgTypeKey - key=value print value + ArgTypeKey ArgType = iota + // ArgTypeFile - key=value print /temp/value.ext + ArgTypeFile + // ArgTypeKeyFile - key=value print key="/temp/value.ext" + ArgTypeKeyFile +) + +// Arg - parse the arg result +type Arg struct { + Command string + FileName string + FileExt string + FileContext string + ArgType ArgType +} + +// FieldsFunc - alias function +type FieldsFunc func(args map[string]string) (Arg, error) + +// Key - key=value|value1,value2,value3 +func Key(key string) FieldsFunc { + return KeyFormat(key, "$0") +} + +// FLAGS - --key=""|value|value1,value2,value3 +func FLAGS(ignoreKeys ...string) FieldsFunc { + return prefixKeyFormat("-", ignoreKeys...) +} + +// ALIAS - myminio +func ALIAS() FieldsFunc { + return Static("myminio") +} + +// Static - some static value +func Static(val string) FieldsFunc { + return func(args map[string]string) (Arg, error) { + return Arg{Command: val}, nil + } +} + +// File - fName is the the key, value is content, ext is the file ext +func File(fName string, ext string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + if val, ok := args[fName]; ok { + if val == "" { + return out, fmt.Errorf("value is empty") + } + out.FileName = fName + out.FileExt = ext + out.FileContext = strings.TrimSpace(val) + out.ArgType = ArgTypeFile + delete(args, fName) + return out, nil + } + return out, fmt.Errorf("file %s not found", fName) + } +} + +// KeyValue - match key and putout the key, like endpoint="https://webhook-1.example.net" +func KeyValue(key string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + val, ok := args[key] + if !ok { + return out, fmt.Errorf("key %s not found", key) + } + out.Command = fmt.Sprintf(`%s="%s"`, key, val) + delete(args, key) + return out, nil + } +} + +// KeyFile - match key and putout the key, like client_cert="[here is content]" +func KeyFile(key string, ext string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + val, ok := args[key] + if !ok { + return out, fmt.Errorf("key %s not found", key) + } + out.FileName = key + out.FileExt = ext + out.FileContext = strings.TrimSpace(val) + out.ArgType = ArgTypeKeyFile + delete(args, key) + return out, nil + } +} + +// Option - ignore the error +func Option(opt FieldsFunc) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, nil + } + out, _ = opt(args) + return out, nil + } +} + +// KeyFormat - match key and get outPut to replace $0 to output the value +// if format not contain $0, will add $0 to the end +func KeyFormat(key string, format string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + if !strings.Contains(format, "$0") { + format = fmt.Sprintf("%s %s", format, "$0") + } + val, ok := args[key] + if !ok { + return out, fmt.Errorf("key %s not found", key) + } + out.Command = strings.ReplaceAll(format, "$0", strings.ReplaceAll(val, ",", " ")) + delete(args, key) + return out, nil + } +} + +// OthersKeyValues - get all the key values +func OthersKeyValues(ignoreFileKeys ...string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + data := []string{} + for key, val := range args { + if val != "" { + data = append(data, fmt.Sprintf(`%s="%s"`, key, val)) + } else { + data = append(data, key) + } + delete(args, key) + } + sort.Slice(data, func(i, j int) bool { + return data[i] < data[j] + }) + return Arg{Command: strings.Join(data, " ")}, nil + } +} + +// OneOf - one of the funcs must be found +// mc admin policy attach OneOf(--user | --group) = mc admin policy attach --user user or mc admin policy attach --group group +func OneOf(funcs ...FieldsFunc) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + for _, fn := range funcs { + if out, err = fn(args); err == nil { + return out, nil + } + } + return out, fmt.Errorf("not found") + } +} + +// Sanitize - no space for the command +// mc mb Sanitize(alias / bucketName) = mc mb alias/bucketName +func Sanitize(funcs ...FieldsFunc) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + commands := []string{} + for _, func1 := range funcs { + if out, err = func1(args); err != nil { + return out, err + } + if out.Command == "" { + return out, fmt.Errorf("command is empty") + } + commands = append(commands, out.Command) + } + return Arg{Command: strings.Join(commands, "")}, nil + } +} + +var prefixKeyFormat = func(pkey string, ignoreKeys ...string) FieldsFunc { + return func(args map[string]string) (out Arg, err error) { + if args == nil { + return out, fmt.Errorf("args is nil") + } + igrnoreKeyMap := make(map[string]bool) + for _, key := range ignoreKeys { + if !strings.HasPrefix(key, pkey) { + key = fmt.Sprintf("%s%s%s", pkey, pkey, key) + } + igrnoreKeyMap[key] = true + } + data := []string{} + for key, val := range args { + if strings.HasPrefix(key, pkey) && !igrnoreKeyMap[key] { + if val == "" { + data = append(data, key) + } else { + for _, singalVal := range strings.Split(val, ",") { + if strings.TrimSpace(singalVal) != "" { + data = append(data, fmt.Sprintf("%s=%s", key, singalVal)) + } + } + } + delete(args, key) + } + } + // avoid flags change the order + sort.Slice(data, func(i, j int) bool { + return data[i] < data[j] + }) + return Arg{Command: strings.Join(data, " ")}, nil + } +} diff --git a/pkg/utils/miniojob/minioJob_test.go b/pkg/utils/miniojob/minioJob_test.go new file mode 100644 index 00000000000..b6fb7a08c4c --- /dev/null +++ b/pkg/utils/miniojob/minioJob_test.go @@ -0,0 +1,337 @@ +// This file is part of MinIO Operator +// Copyright (c) 2024 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package miniojob + +import "testing" + +func TestParser(t *testing.T) { + args := map[string]string{ + "--user": "a1,b2,c3,d4", + "user": "a,b,c,d", + "group": "group1,group2,group3", + "password": "somepassword", + "--with-locks": "", + "--region": "us-west-2", + "policy": ` { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::memes", + "arn:aws:s3:::memes/*" + ] + } + ] + }`, + "name": "mybucketName", + } + testCase := []struct { + command FieldsFunc + args map[string]string + expect Arg + expectError bool + }{ + { + command: FLAGS("--user"), + args: copyArgs(args), + expect: Arg{Command: "--region=us-west-2 --with-locks"}, + expectError: false, + }, + { + command: FLAGS("user"), + args: copyArgs(args), + expect: Arg{Command: "--region=us-west-2 --with-locks"}, + expectError: false, + }, + { + command: Key("password"), + args: copyArgs(args), + expect: Arg{Command: "somepassword"}, + expectError: false, + }, + { + command: KeyFormat("user", "--user $0"), + args: copyArgs(args), + expect: Arg{Command: "--user a b c d"}, + expectError: false, + }, + { + command: KeyFormat("user", "--user"), + args: copyArgs(args), + expect: Arg{Command: "--user a b c d"}, + expectError: false, + }, + { + command: ALIAS(), + args: copyArgs(args), + expect: Arg{Command: "myminio"}, + expectError: false, + }, + { + command: Static("test-static"), + args: copyArgs(args), + expect: Arg{Command: "test-static"}, + expectError: false, + }, + { + command: File("policy", "json"), + args: copyArgs(args), + expect: Arg{ + FileName: "policy", + FileExt: "json", + FileContext: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::memes", + "arn:aws:s3:::memes/*" + ] + } + ] + }`, + }, + expectError: false, + }, + { + command: OneOf(KeyFormat("user", "--user"), KeyFormat("group", "--group")), + args: copyArgs(args), + expect: Arg{Command: "--user a b c d"}, + expectError: false, + }, + { + command: OneOf(KeyFormat("miss_user", "--user"), KeyFormat("group", "--group")), + args: copyArgs(args), + expect: Arg{Command: "--group group1 group2 group3"}, + expectError: false, + }, + { + command: OneOf(KeyFormat("miss_user", "--user"), KeyFormat("miss_group", "--group")), + args: copyArgs(args), + expect: Arg{Command: "--group group1 group2 group3"}, + expectError: true, + }, + { + command: Sanitize(ALIAS(), Static("/"), Key("name")), + args: copyArgs(args), + expect: Arg{Command: "myminio/mybucketName"}, + expectError: false, + }, + } + for _, tc := range testCase { + cmd, err := tc.command(tc.args) + if tc.expectError && err == nil { + t.Fatalf("expectCommand error") + } + if !tc.expectError && err != nil { + t.Fatalf("expectCommand not a error") + } + if !tc.expectError { + if tc.expect.Command != "" && cmd.Command != tc.expect.Command { + t.Fatalf("expectCommand %s, but got %s", tc.expect.Command, cmd.Command) + } + if tc.expect.FileName != "" { + if tc.expect.FileContext != cmd.FileContext { + t.Fatalf("expectCommand %s, but got %s", tc.expect.FileContext, cmd.FileContext) + } + if tc.expect.FileExt != cmd.FileExt { + t.Fatalf("expectCommand %s, but got %s", tc.expect.FileExt, cmd.FileExt) + } + if tc.expect.FileName != cmd.FileName { + t.Fatalf("expectCommand %s, but got %s", tc.expect.FileName, cmd.FileName) + } + } + } + } +} + +func TestAdminPolicyCreate(t *testing.T) { + mcCommand := "admin/policy/create" + funcs := JobOperation[mcCommand] + testCase := []struct { + name string + args map[string]string + expectError bool + expectCommand string + expectFileNumber int + }{ + { + name: "testFull", + args: map[string]string{ + "name": "mypolicy", + "policy": "JsonContent", + }, + expectCommand: "myminio mypolicy /temp/policy.json", + expectFileNumber: 1, + }, + { + name: "testError1", + args: map[string]string{ + "name": "mypolicy", + }, + expectCommand: "", + expectError: true, + }, + { + name: "testError2", + args: map[string]string{ + "policy": "JsonContent", + }, + expectCommand: "", + expectError: true, + }, + } + for _, tc := range testCase { + command, err := GenerateMinIOIntervalJobCommand(mcCommand, 0, nil, "test", tc.args, funcs) + if !tc.expectError { + if err != nil { + t.Fatal(err) + } + if command.Command != tc.expectCommand { + t.Fatalf("[%s] expectCommand %s, but got %s", tc.name, tc.expectCommand, command.Command) + } + } else { + if err == nil { + t.Fatalf("[%s] expectCommand error", tc.name) + } + } + } +} + +func TestMCConfigSet(t *testing.T) { + mcCommand := "admin/config/set" + funcs := JobOperation[mcCommand] + testCase := []struct { + name string + args map[string]string + expectCommand string + expectError bool + expectFileNumber int + }{ + { + name: "testFull", + args: map[string]string{ + "webhookName": "webhook1", + "endpoint": "endpoint1", + "auth_token": "token1", + "client_cert": "cert1", + "client_key": "key1", + }, + expectCommand: "myminio webhook1 endpoint=\"endpoint1\" client_key=\"/temp/client_key.key\" client_cert=\"/temp/client_cert.pem\" auth_token=\"token1\"", + expectFileNumber: 2, + }, + { + name: "testOptionFile", + args: map[string]string{ + "webhookName": "webhook1", + "endpoint": "endpoint1", + "auth_token": "token1", + "client_key": "key1", + }, + expectCommand: "myminio webhook1 endpoint=\"endpoint1\" client_key=\"/temp/client_key.key\" auth_token=\"token1\"", + expectFileNumber: 1, + }, + { + name: "testOptionKeyValue", + args: map[string]string{ + "webhookName": "webhook1", + "endpoint": "endpoint1", + "client_key": "key1", + }, + expectCommand: "myminio webhook1 endpoint=\"endpoint1\" client_key=\"/temp/client_key.key\"", + expectFileNumber: 1, + }, + { + name: "notify_mysql", + args: map[string]string{ + "webhookName": "notify_mysql", + "dsn_string": "username:password@tcp(mysql.example.com:3306)/miniodb", + "table": "minioevents", + "format": "namespace", + }, + expectCommand: "myminio notify_mysql dsn_string=\"username:password@tcp(mysql.example.com:3306)/miniodb\" format=\"namespace\" table=\"minioevents\"", + expectFileNumber: 0, + }, + { + name: "notify_amqp", + args: map[string]string{ + "webhookName": "notify_amqp:primary", + "url": "user:password@amqp://amqp-endpoint.example.net:5672", + }, + expectCommand: "myminio notify_amqp:primary url=\"user:password@amqp://amqp-endpoint.example.net:5672\"", + expectFileNumber: 0, + }, + { + name: "notify_elasticsearch", + args: map[string]string{ + "webhookName": "notify_elasticsearch:primary", + "url": "user:password@https://elasticsearch-endpoint.example.net:9200", + "index": "bucketevents", + "format": "namespace", + }, + expectCommand: "myminio notify_elasticsearch:primary format=\"namespace\" index=\"bucketevents\" url=\"user:password@https://elasticsearch-endpoint.example.net:9200\"", + expectFileNumber: 0, + }, + { + name: "identity_ldap", + args: map[string]string{ + "webhookName": "identity_ldap", + "enabled": "true", + "server_addr": "ad-ldap.example.net/", + "lookup_bind_dn": "cn=miniolookupuser,dc=example,dc=net", + "lookup_bind_dn_password": "userpassword", + "user_dn_search_base_dn": "dc=example,dc=net", + "user_dn_search_filter": "(&(objectCategory=user)(sAMAccountName=%s))", + }, + expectCommand: "myminio identity_ldap enabled=\"true\" lookup_bind_dn=\"cn=miniolookupuser,dc=example,dc=net\" lookup_bind_dn_password=\"userpassword\" server_addr=\"ad-ldap.example.net/\" user_dn_search_base_dn=\"dc=example,dc=net\" user_dn_search_filter=\"(&(objectCategory=user)(sAMAccountName=%s))\"", + }, + } + for _, tc := range testCase { + command, err := GenerateMinIOIntervalJobCommand(mcCommand, 0, nil, "test", tc.args, funcs) + if !tc.expectError { + if err != nil { + t.Fatal(err) + } + if command.Command != tc.expectCommand { + t.Fatalf("[%s] expectCommand %s, but got %s", tc.name, tc.expectCommand, command.Command) + } + if tc.expectFileNumber != len(command.Files) { + t.Fatalf("[%s] expectFileNumber %d, but got %d", tc.name, tc.expectFileNumber, len(command.Files)) + } + } else { + if err == nil { + t.Fatalf("[%s] expectCommand error", tc.name) + } + } + } +} + +func copyArgs(args map[string]string) map[string]string { + newArgs := make(map[string]string) + for key, val := range args { + newArgs[key] = val + } + return newArgs +} diff --git a/pkg/utils/miniojob/types.go b/pkg/utils/miniojob/types.go new file mode 100644 index 00000000000..3913b21ea1f --- /dev/null +++ b/pkg/utils/miniojob/types.go @@ -0,0 +1,387 @@ +// This file is part of MinIO Operator +// Copyright (c) 2024 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package miniojob + +import ( + "context" + "fmt" + "strings" + "sync" + + "github.com/minio/operator/pkg/apis/job.min.io/v1alpha1" + miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" + "github.com/minio/operator/pkg/runtime" + batchjobv1 "k8s.io/api/batch/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + // DefaultMCImage - job mc image + DefaultMCImage = "minio/mc:latest" + // MinioJobName - job name + MinioJobName = "job.min.io/job-name" + // MinioJobCRName - job cr name + MinioJobCRName = "job.min.io/job-cr-name" + // CommandFilePath - command file path + CommandFilePath = "/temp" + // MinioJobPhaseError - error + MinioJobPhaseError = "Error" + // MinioJobPhaseSuccess - Success + MinioJobPhaseSuccess = "Success" + // MinioJobPhaseRunning - running + MinioJobPhaseRunning = "Running" + // MinioJobPhaseFailed - failed + MinioJobPhaseFailed = "Failed" +) + +var operationAlias = map[string]string{ + "make-bucket": "mb", + "admin/policy/add": "admin/policy/create", +} + +// JobOperation - job operation +var JobOperation = map[string][]FieldsFunc{ + "mb": {FLAGS(), Sanitize(ALIAS(), Static("/"), Key("name")), Static("--ignore-existing")}, + "admin/user/add": {ALIAS(), Key("user"), Key("password")}, + "admin/policy/create": {ALIAS(), Key("name"), File("policy", "json")}, + "admin/policy/attach": {ALIAS(), Key("policy"), OneOf(KeyFormat("user", "--user"), KeyFormat("group", "--group"))}, + "admin/config/set": {ALIAS(), Key("webhookName"), Option(KeyValue("endpoint")), Option(KeyFile("client_key", "key")), Option(KeyFile("client_cert", "pem")), OthersKeyValues()}, +} + +// OperationAliasToMC - convert operation to mc operation +func OperationAliasToMC(operation string) (op string, found bool) { + for k, v := range operationAlias { + if k == operation { + return v, true + } + if v == operation { + return v, true + } + } + // operation like admin/policy/attach match nothing. + // but it's a valid operation + if strings.Contains(operation, "/") { + return operation, true + } + // operation like replace match nothing + // it's not a valid operation + return "", false +} + +// MinIOIntervalJobCommandFile - Job run command need a file such as /temp/policy.json +type MinIOIntervalJobCommandFile struct { + Name string + Ext string + Dir string + Content string +} + +// MinIOIntervalJobCommand - Job run command +type MinIOIntervalJobCommand struct { + mutex sync.RWMutex + JobName string + MCOperation string + Command string + DepnedsOn []string + Files []MinIOIntervalJobCommandFile + Succeeded bool + Message string + Created bool +} + +// SetStatus - set job command status +func (jobCommand *MinIOIntervalJobCommand) SetStatus(success bool, message string) { + if jobCommand == nil { + return + } + jobCommand.mutex.Lock() + jobCommand.Succeeded = success + jobCommand.Message = message + jobCommand.mutex.Unlock() +} + +// Success - check job command status +func (jobCommand *MinIOIntervalJobCommand) Success() bool { + if jobCommand == nil { + return false + } + jobCommand.mutex.Lock() + defer jobCommand.mutex.Unlock() + return jobCommand.Succeeded +} + +// CreateJob - create job +func (jobCommand *MinIOIntervalJobCommand) CreateJob(ctx context.Context, k8sClient client.Client, jobCR *v1alpha1.MinIOJob) error { + if jobCommand == nil { + return nil + } + jobCommand.mutex.RLock() + if jobCommand.Created || jobCommand.Succeeded { + jobCommand.mutex.RUnlock() + return nil + } + jobCommand.mutex.RUnlock() + jobCommands := []string{} + commands := []string{"mc"} + commands = append(commands, strings.SplitN(jobCommand.MCOperation, "/", -1)...) + commands = append(commands, strings.SplitN(jobCommand.Command, " ", -1)...) + for _, command := range commands { + trimCommand := strings.TrimSpace(command) + if trimCommand != "" { + jobCommands = append(jobCommands, trimCommand) + } + } + jobCommands = append(jobCommands, "--insecure") + objs := []client.Object{} + mcImage := jobCR.Spec.MCImage + if mcImage == "" { + mcImage = DefaultMCImage + } + job := &batchjobv1.Job{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%s-%s", jobCR.Name, jobCommand.JobName), + Namespace: jobCR.Namespace, + Labels: map[string]string{ + MinioJobName: jobCommand.JobName, + MinioJobCRName: jobCR.Name, + }, + Annotations: map[string]string{ + "job.min.io/operation": jobCommand.MCOperation, + }, + }, + Spec: batchjobv1.JobSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + MinioJobName: jobCommand.JobName, + }, + }, + Spec: corev1.PodSpec{ + ServiceAccountName: jobCR.Spec.ServiceAccountName, + Containers: []corev1.Container{ + { + Name: "mc", + Image: mcImage, + ImagePullPolicy: corev1.PullIfNotPresent, + Env: []corev1.EnvVar{ + { + Name: "MC_HOST_myminio", + Value: fmt.Sprintf("https://$(ACCESS_KEY):$(SECRET_KEY)@minio.%s.svc.cluster.local", jobCR.Namespace), + }, + { + Name: "MC_STS_ENDPOINT_myminio", + Value: fmt.Sprintf("https://sts.%s.svc.cluster.local:4223/sts/%s", miniov2.GetNSFromFile(), jobCR.Namespace), + }, + { + Name: "MC_WEB_IDENTITY_TOKEN_FILE_myminio", + Value: "/var/run/secrets/kubernetes.io/serviceaccount/token", + }, + }, + Command: jobCommands, + }, + }, + }, + }, + }, + } + if jobCR.Spec.FailureStrategy == v1alpha1.StopOnFailure { + job.Spec.Template.Spec.RestartPolicy = corev1.RestartPolicyNever + } else { + job.Spec.Template.Spec.RestartPolicy = corev1.RestartPolicyOnFailure + } + if len(jobCommand.Files) > 0 { + cmName := fmt.Sprintf("%s-%s-cm", jobCR.Name, jobCommand.JobName) + job.Spec.Template.Spec.Containers[0].VolumeMounts = append(job.Spec.Template.Spec.Containers[0].VolumeMounts, corev1.VolumeMount{ + Name: "file-volume", + ReadOnly: true, + MountPath: jobCommand.Files[0].Dir, + }) + job.Spec.Template.Spec.Volumes = append(job.Spec.Template.Spec.Volumes, corev1.Volume{ + Name: "file-volume", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: cmName, + }, + }, + }, + }) + configMap := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: cmName, + Namespace: jobCR.Namespace, + Labels: map[string]string{ + "job.min.io/name": jobCR.Name, + }, + }, + Data: map[string]string{}, + } + for _, file := range jobCommand.Files { + configMap.Data[fmt.Sprintf("%s.%s", file.Name, file.Ext)] = file.Content + } + objs = append(objs, configMap) + } + objs = append(objs, job) + for _, obj := range objs { + _, err := runtime.NewObjectSyncer(ctx, k8sClient, jobCR, func() error { + return nil + }, obj, runtime.SyncTypeCreateOrUpdate).Sync(ctx) + if err != nil { + return err + } + } + jobCommand.mutex.Lock() + jobCommand.Created = true + jobCommand.mutex.Unlock() + return nil +} + +// MinIOIntervalJob - Interval Job +type MinIOIntervalJob struct { + // to see if that change + JobCR *v1alpha1.MinIOJob + Command []*MinIOIntervalJobCommand + CommandMap map[string]*MinIOIntervalJobCommand +} + +// GetMinioJobStatus - get job status +func (intervalJob *MinIOIntervalJob) GetMinioJobStatus(ctx context.Context) v1alpha1.MinIOJobStatus { + status := v1alpha1.MinIOJobStatus{} + failed := false + running := false + message := "" + for _, command := range intervalJob.Command { + command.mutex.RLock() + if command.Succeeded { + status.CommandsStatus = append(status.CommandsStatus, v1alpha1.CommandStatus{ + Name: command.JobName, + Result: "Success", + Message: command.Message, + }) + } else { + failed = true + message = command.Message + // if Success is false and message is empty, it means the job is running + if command.Message == "" { + running = true + status.CommandsStatus = append(status.CommandsStatus, v1alpha1.CommandStatus{ + Name: command.JobName, + Result: "running", + Message: command.Message, + }) + } else { + status.CommandsStatus = append(status.CommandsStatus, v1alpha1.CommandStatus{ + Name: command.JobName, + Result: "failed", + Message: command.Message, + }) + } + } + command.mutex.RUnlock() + } + if running { + status.Phase = MinioJobPhaseRunning + } else { + if failed { + status.Phase = MinioJobPhaseFailed + status.Message = message + } else { + status.Phase = MinioJobPhaseSuccess + } + } + return status +} + +// CreateCommandJob - create command job +func (intervalJob *MinIOIntervalJob) CreateCommandJob(ctx context.Context, k8sClient client.Client) error { + for _, command := range intervalJob.Command { + if len(command.DepnedsOn) == 0 { + err := command.CreateJob(ctx, k8sClient, intervalJob.JobCR) + if err != nil { + return err + } + } else { + allDepsSuccess := true + for _, dep := range command.DepnedsOn { + status, found := intervalJob.CommandMap[dep] + if !found { + return fmt.Errorf("dependent job %s not found", dep) + } + if !status.Success() { + allDepsSuccess = false + break + } + } + if allDepsSuccess { + err := command.CreateJob(ctx, k8sClient, intervalJob.JobCR) + if err != nil { + return err + } + } + } + } + return nil +} + +// GenerateMinIOIntervalJobCommand - generate command +func GenerateMinIOIntervalJobCommand(mcCommand string, commandIndex int, dependsOn []string, jobName string, args map[string]string, argsFuncs []FieldsFunc) (*MinIOIntervalJobCommand, error) { + commands := []string{} + files := []MinIOIntervalJobCommandFile{} + for _, argsFunc := range argsFuncs { + jobArg, err := argsFunc(args) + if err != nil { + return nil, err + } + switch jobArg.ArgType { + case ArgTypeKey: + if jobArg.Command != "" { + commands = append(commands, jobArg.Command) + } + case ArgTypeFile: + files = append(files, MinIOIntervalJobCommandFile{ + Name: jobArg.FileName, + Ext: jobArg.FileExt, + Dir: CommandFilePath, + Content: jobArg.FileContext, + }) + commands = append(commands, fmt.Sprintf("%s/%s.%s", CommandFilePath, jobArg.FileName, jobArg.FileExt)) + case ArgTypeKeyFile: + files = append(files, MinIOIntervalJobCommandFile{ + Name: jobArg.FileName, + Ext: jobArg.FileExt, + Dir: CommandFilePath, + Content: jobArg.FileContext, + }) + commands = append(commands, fmt.Sprintf(`%s="%s/%s.%s"`, jobArg.FileName, CommandFilePath, jobArg.FileName, jobArg.FileExt)) + } + + } + jobCommand := &MinIOIntervalJobCommand{ + JobName: jobName, + MCOperation: mcCommand, + Command: strings.Join(commands, " "), + DepnedsOn: dependsOn, + Files: files, + } + // some commands need to have a empty name + if jobCommand.JobName == "" { + jobCommand.JobName = fmt.Sprintf("command-%d", commandIndex) + } + return jobCommand, nil +} diff --git a/redhat-marketplace/manifests/console-env_v1_configmap.yaml b/redhat-marketplace/manifests/console-env_v1_configmap.yaml index 1c276708cd0..a74206147b2 100644 --- a/redhat-marketplace/manifests/console-env_v1_configmap.yaml +++ b/redhat-marketplace/manifests/console-env_v1_configmap.yaml @@ -8,4 +8,5 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-env diff --git a/redhat-marketplace/manifests/console-sa-secret_v1_secret.yaml b/redhat-marketplace/manifests/console-sa-secret_v1_secret.yaml index 8f7c7e18363..77a6d71d9e6 100644 --- a/redhat-marketplace/manifests/console-sa-secret_v1_secret.yaml +++ b/redhat-marketplace/manifests/console-sa-secret_v1_secret.yaml @@ -6,5 +6,6 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 name: console-sa-secret type: kubernetes.io/service-account-token diff --git a/redhat-marketplace/manifests/console_v1_service.yaml b/redhat-marketplace/manifests/console_v1_service.yaml index 1d2af3ffb8a..544027e0a9c 100644 --- a/redhat-marketplace/manifests/console_v1_service.yaml +++ b/redhat-marketplace/manifests/console_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: console-tls creationTimestamp: null labels: diff --git a/redhat-marketplace/manifests/job.min.io_miniojobs.yaml b/redhat-marketplace/manifests/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..065f917fed5 --- /dev/null +++ b/redhat-marketplace/manifests/job.min.io_miniojobs.yaml @@ -0,0 +1,123 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + operator.min.io/authors: MinIO, Inc. + operator.min.io/license: AGPLv3 + operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 + creationTimestamp: null + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/redhat-marketplace/manifests/minio-operator-rhmp.clusterserviceversion.yaml b/redhat-marketplace/manifests/minio-operator-rhmp.clusterserviceversion.yaml index da0bd26a29b..99261406086 100644 --- a/redhat-marketplace/manifests/minio-operator-rhmp.clusterserviceversion.yaml +++ b/redhat-marketplace/manifests/minio-operator-rhmp.clusterserviceversion.yaml @@ -32,7 +32,7 @@ metadata: "bucketDNS": false, "domains": {} }, - "image": "quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65", + "image": "quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113", "imagePullSecret": {}, "mountPath": "/export", "podManagementPolicy": "Parallel", @@ -80,25 +80,37 @@ metadata: ] capabilities: Full Lifecycle categories: AI/Machine Learning, Big Data, Cloud Provider, Storage - createdAt: "2023-10-12T17:54:23Z" description: |- MinIO is a Kubernetes-native high performance object store with an S3-compatible API. The MinIO Operator supports deploying MinIO Tenants onto any Kubernetes. + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "true" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" k8sMinVersion: "1.18" marketplace.openshift.io/remote-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/pricing?utm_source=openshift_console marketplace.openshift.io/support-workflow: https://marketplace.redhat.com/en-us/operators/minio-operator-rhmp/support?utm_source=openshift_console operatorframework.io/suggested-namespace: minio-operator - operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/builder: operator-sdk-v1.22.2 operators.operatorframework.io/project_layout: unknown repository: https://github.com/minio/operator - containerImage: quay.io/minio/operator:v5.0.10 - name: minio-operator-rhmp.v5.0.10 + containerImage: quay.io/minio/operator:v5.0.14 + name: minio-operator-rhmp.v5.0.14 namespace: minio-operator spec: apiservicedefinitions: {} customresourcedefinitions: owned: + - kind: MinIOJob + name: miniojobs.job.min.io + version: v1alpha1 - kind: PolicyBinding name: policybindings.sts.min.io version: v1alpha1 @@ -380,6 +392,7 @@ spec: - get - update - list + - delete - apiGroups: - "" resources: @@ -501,6 +514,7 @@ spec: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - '*' verbs: @@ -555,6 +569,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app: console app.kubernetes.io/instance: minio-operator-console @@ -564,7 +579,7 @@ spec: - args: - ui - --certs-dir=/tmp/certs - image: quay.io/minio/operator:v5.0.10 + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: console ports: @@ -577,6 +592,8 @@ spec: volumeMounts: - mountPath: /tmp/certs name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp serviceAccountName: console-sa volumes: - name: tls-certificates @@ -597,6 +614,8 @@ spec: path: CAs/ca.crt name: openshift-service-ca.crt optional: true + - emptyDir: {} + name: tmp - label: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -614,6 +633,7 @@ spec: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 labels: app.kubernetes.io/instance: minio-operator app.kubernetes.io/name: operator @@ -638,8 +658,8 @@ spec: - name: MINIO_CONSOLE_TLS_ENABLE value: "on" - name: OPERATOR_STS_ENABLED - value: "off" - image: quay.io/minio/operator:v5.0.10 + value: "on" + image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 imagePullPolicy: IfNotPresent name: minio-operator resources: @@ -757,11 +777,11 @@ spec: name: MinIO Inc url: https://min.io relatedImages: - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: console - - image: minio/operator@sha256:170b154d2c61c5a6f9dfbe4137e78815102a99fb9ab3aa6baf68750647e6261a + - image: quay.io/minio/operator@sha256:db47d598488f10daf6a4d26431ab2b65e24f3dffbae0edb76bc44f63c6daf500 name: minio-operator - - image: quay.io/minio/minio@sha256:7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65 - name: minio-7e697b900f60d68e9edd2e8fc0dccd158e98938d924298612c5bbd294f2a1e65-annotation - version: 5.0.10 - replaces: minio-operator-rhmp.v5.0.9 + - image: quay.io/minio/minio@sha256:ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113 + name: minio-ea2c70cda70860c7d10f04ce1df640d3abb995784cb7aeedef8d4baa53a5a113-annotation + version: 5.0.14 + replaces: minio-operator-rhmp.v5.0.13 diff --git a/redhat-marketplace/manifests/minio.min.io_tenants.yaml b/redhat-marketplace/manifests/minio.min.io_tenants.yaml index d18f067d261..1c9fa3aa98d 100644 --- a/redhat-marketplace/manifests/minio.min.io_tenants.yaml +++ b/redhat-marketplace/manifests/minio.min.io_tenants.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: tenants.minio.min.io spec: @@ -312,18 +313,6 @@ spec: 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: @@ -367,6 +356,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -555,6 +546,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1109,6 +1137,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1159,6 +1195,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1355,6 +1399,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -1386,6 +1443,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -1702,6 +1761,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1770,6 +1839,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1836,6 +1915,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1904,6 +1993,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1953,6 +2052,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2442,6 +2602,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2510,6 +2680,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2576,6 +2756,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2644,6 +2834,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2755,6 +2955,8 @@ spec: additionalProperties: type: string type: object + reclaimStorage: + type: boolean resources: properties: claims: @@ -2983,18 +3185,6 @@ spec: 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: @@ -3038,6 +3228,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3049,6 +3241,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -3087,9 +3284,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -3350,6 +3556,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3400,6 +3614,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3596,6 +3818,19 @@ spec: format: int32 type: integer type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic resources: properties: claims: @@ -3627,6 +3862,8 @@ spec: x-kubernetes-int-or-string: true type: object type: object + restartPolicy: + type: string securityContext: properties: allowPrivilegeEscalation: @@ -3906,18 +4143,6 @@ spec: 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: @@ -3961,6 +4186,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3972,6 +4199,11 @@ spec: items: type: string type: array + allocatedResourceStatuses: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: granular allocatedResources: additionalProperties: anyOf: @@ -4010,9 +4242,18 @@ spec: - type type: object type: array - phase: + currentVolumeAttributesClassName: type: string - resizeStatus: + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object + phase: type: string type: object type: object @@ -4264,18 +4505,6 @@ spec: 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: @@ -4319,6 +4548,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4507,6 +4738,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -4745,8 +5013,6 @@ spec: - name type: object type: array - required: - - containers type: object startup: properties: diff --git a/redhat-marketplace/manifests/operator_v1_service.yaml b/redhat-marketplace/manifests/operator_v1_service.yaml index 011f9599ff8..6b7b8d53ba8 100644 --- a/redhat-marketplace/manifests/operator_v1_service.yaml +++ b/redhat-marketplace/manifests/operator_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null labels: app.kubernetes.io/instance: minio-operator diff --git a/redhat-marketplace/manifests/sts.min.io_policybindings.yaml b/redhat-marketplace/manifests/sts.min.io_policybindings.yaml index fbbf279207d..d74cf747abc 100644 --- a/redhat-marketplace/manifests/sts.min.io_policybindings.yaml +++ b/redhat-marketplace/manifests/sts.min.io_policybindings.yaml @@ -2,10 +2,11 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 + controller-gen.kubebuilder.io/version: v0.13.0 operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 creationTimestamp: null name: policybindings.sts.min.io spec: diff --git a/redhat-marketplace/manifests/sts_v1_service.yaml b/redhat-marketplace/manifests/sts_v1_service.yaml index cdec8486952..34c64e69366 100644 --- a/redhat-marketplace/manifests/sts_v1_service.yaml +++ b/redhat-marketplace/manifests/sts_v1_service.yaml @@ -5,6 +5,7 @@ metadata: operator.min.io/authors: MinIO, Inc. operator.min.io/license: AGPLv3 operator.min.io/support: https://subnet.min.io + operator.min.io/version: v5.0.14 service.beta.openshift.io/serving-cert-secret-name: sts-tls creationTimestamp: null labels: diff --git a/redhat-marketplace/metadata/annotations.yaml b/redhat-marketplace/metadata/annotations.yaml index f3fd77270a2..9d5b0a5a5fd 100644 --- a/redhat-marketplace/metadata/annotations.yaml +++ b/redhat-marketplace/metadata/annotations.yaml @@ -5,6 +5,6 @@ annotations: operators.operatorframework.io.bundle.metadata.v1: metadata/ operators.operatorframework.io.bundle.package.v1: minio-operator-rhmp operators.operatorframework.io.bundle.channels.v1: stable - operators.operatorframework.io.metrics.builder: operator-sdk-v1.32.0 + operators.operatorframework.io.metrics.builder: operator-sdk-v1.22.2 operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 operators.operatorframework.io.metrics.project_layout: unknown diff --git a/release.sh b/release.sh index c2188f89941..ac37b7f407b 100755 --- a/release.sh +++ b/release.sh @@ -14,6 +14,7 @@ KES_RELEASE=$(get_latest_release minio/kes) KES_CURRENT_RELEASE=$(sed -nr 's/.*(minio\/kes\:)([v]?.*)"/\2/p' pkg/apis/minio.min.io/v2/constants.go) files=( + "README.md" "api/consts.go" "docs/tenant_crd.adoc" "docs/policybinding_crd.adoc" @@ -25,14 +26,10 @@ files=( "helm/operator/values.yaml" "helm/tenant/Chart.yaml" "helm/tenant/values.yaml" - "kubectl-minio/README.md" - "kubectl-minio/cmd/helpers/constants.go" - "kubectl-minio/cmd/tenant-upgrade.go" "pkg/apis/minio.min.io/v2/constants.go" "pkg/controller/operator.go" "resources/base/deployment.yaml" "resources/base/console-ui.yaml" - "update-operator-krew.py" "testing/console-tenant+kes.sh" "web-app/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx" "web-app/src/screens/Console/Tenants/TenantDetails/TenantEncryption.tsx") @@ -55,11 +52,22 @@ for file in "${files[@]}"; do sed -i -e "s/${KES_CURRENT_RELEASE}/${KES_RELEASE}/g" "$file" done -echo "Re-indexing helm chart releases for $RELEASE" -./helm-reindex.sh +annotations_files=( + "pkg/apis/job.min.io/v1alpha1/types.go" + "pkg/apis/minio.min.io/v2/types.go" + "pkg/apis/sts.min.io/v1alpha1/types.go" +) + +for file in "${annotations_files[@]}"; do + sed -i -e "s~operator.min.io/version=.*~operator.min.io/version=v${RELEASE}~g" "$file" +done + +# Update annotation in kustomization yaml +sed -i -e "s~operator.min.io/version: .*~operator.min.io/version: v${RELEASE}~g" "resources/kustomization.yaml" # Add all the generated files to git echo "clean -e files" rm -vf $(git ls-files --others | grep -e "-e$" | awk '{print $1}') git add . + diff --git a/resources/base/cluster-role.yaml b/resources/base/cluster-role.yaml index 2a4df1dab66..316607ab051 100644 --- a/resources/base/cluster-role.yaml +++ b/resources/base/cluster-role.yaml @@ -140,6 +140,7 @@ rules: - apiGroups: - minio.min.io - sts.min.io + - job.min.io resources: - "*" verbs: diff --git a/resources/base/console-ui.yaml b/resources/base/console-ui.yaml index 7688b48d67d..1dfe98b98ea 100644 --- a/resources/base/console-ui.yaml +++ b/resources/base/console-ui.yaml @@ -289,13 +289,19 @@ spec: - args: - ui - --certs-dir=/tmp/certs - image: minio/operator:v5.0.10 + image: minio/operator:v5.0.14 imagePullPolicy: IfNotPresent name: console securityContext: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault ports: - containerPort: 9090 name: http @@ -304,6 +310,8 @@ spec: volumeMounts: - mountPath: /tmp/certs name: tls-certificates + - mountPath: /tmp/certs/CAs + name: tmp volumes: - name: tls-certificates projected: @@ -322,6 +330,8 @@ spec: path: CAs/tls.crt - key: tls.key path: tls.key - name: operator-console-tls + name: console-tls optional: true + - name: tmp + emptyDir: { } serviceAccountName: console-sa diff --git a/resources/base/crds/job.min.io_miniojobs.yaml b/resources/base/crds/job.min.io_miniojobs.yaml new file mode 100644 index 00000000000..2b0f025c890 --- /dev/null +++ b/resources/base/crds/job.min.io_miniojobs.yaml @@ -0,0 +1,114 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 + name: miniojobs.job.min.io +spec: + group: job.min.io + names: + kind: MinIOJob + listKind: MinIOJobList + plural: miniojobs + shortNames: + - miniojob + singular: miniojob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tenant.name + name: Tenant + type: string + - jsonPath: .spec.status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + commands: + items: + properties: + args: + additionalProperties: + type: string + type: object + dependsOn: + items: + type: string + type: array + name: + type: string + op: + type: string + required: + - op + type: object + type: array + execution: + default: parallel + enum: + - parallel + - sequential + type: string + failureStrategy: + default: continueOnFailure + enum: + - continueOnFailure + - stopOnFailure + type: string + mcImage: + default: minio/mc:latest + type: string + serviceAccountName: + type: string + tenant: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + required: + - commands + - serviceAccountName + - tenant + type: object + status: + properties: + commands: + items: + properties: + message: + type: string + name: + type: string + result: + type: string + required: + - result + type: object + type: array + message: + type: string + phase: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/resources/base/crds/kustomization.yaml b/resources/base/crds/kustomization.yaml index 8d240e41c29..1387d04ee1b 100644 --- a/resources/base/crds/kustomization.yaml +++ b/resources/base/crds/kustomization.yaml @@ -2,4 +2,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - minio.min.io_tenants.yaml - - sts.min.io_policybindings.yaml \ No newline at end of file + - sts.min.io_policybindings.yaml + - job.min.io_miniojobs.yaml diff --git a/resources/base/crds/minio.min.io_tenants.yaml b/resources/base/crds/minio.min.io_tenants.yaml index b06226fa719..cf9395f4a61 100644 --- a/resources/base/crds/minio.min.io_tenants.yaml +++ b/resources/base/crds/minio.min.io_tenants.yaml @@ -3,8 +3,8 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 name: tenants.minio.min.io spec: group: minio.min.io @@ -310,18 +310,6 @@ spec: 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: @@ -365,6 +353,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -553,6 +543,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: @@ -1107,6 +1134,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1157,6 +1192,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -1715,6 +1758,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1783,6 +1836,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1849,6 +1912,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1917,6 +1990,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -1966,6 +2049,67 @@ spec: required: - name type: object + containerSecurityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object env: items: properties: @@ -2558,6 +2702,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2626,6 +2780,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2692,6 +2856,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2760,6 +2934,16 @@ spec: type: object type: object x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic namespaceSelector: properties: matchExpressions: @@ -2973,6 +3157,9 @@ spec: servers: format: int32 type: integer + x-kubernetes-validations: + - message: servers is immutable + rule: self == oldSelf tolerations: items: properties: @@ -3101,18 +3288,6 @@ spec: 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: @@ -3156,6 +3331,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -3210,6 +3387,17 @@ spec: - type type: object type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object phase: type: string type: object @@ -3217,12 +3405,19 @@ spec: volumesPerServer: format: int32 type: integer + x-kubernetes-validations: + - message: volumesPerServer is immutable + rule: self == oldSelf required: + - name - servers - volumeClaimTemplate - volumesPerServer type: object type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map priorityClassName: type: string prometheusOperator: @@ -3471,6 +3666,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -3521,6 +3724,14 @@ spec: required: - port type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object tcpSocket: properties: host: @@ -4042,18 +4253,6 @@ spec: 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: @@ -4097,6 +4296,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4151,6 +4352,17 @@ spec: - type type: object type: array + currentVolumeAttributesClassName: + type: string + modifyVolumeStatus: + properties: + status: + type: string + targetVolumeAttributesClassName: + type: string + required: + - status + type: object phase: type: string type: object @@ -4403,18 +4615,6 @@ spec: 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: @@ -4458,6 +4658,8 @@ spec: x-kubernetes-map-type: atomic storageClassName: type: string + volumeAttributesClassName: + type: string volumeMode: type: string volumeName: @@ -4646,6 +4848,43 @@ spec: sources: items: properties: + clusterTrustBundle: + properties: + labelSelector: + 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 + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object configMap: properties: items: diff --git a/resources/base/crds/sts.min.io_policybindings.yaml b/resources/base/crds/sts.min.io_policybindings.yaml index b01576f5bda..b605e3da91f 100644 --- a/resources/base/crds/sts.min.io_policybindings.yaml +++ b/resources/base/crds/sts.min.io_policybindings.yaml @@ -3,8 +3,8 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 + operator.min.io/version: v5.0.14 name: policybindings.sts.min.io spec: group: sts.min.io diff --git a/resources/base/deployment.yaml b/resources/base/deployment.yaml index 38dc0179207..59c477fab6d 100644 --- a/resources/base/deployment.yaml +++ b/resources/base/deployment.yaml @@ -23,7 +23,7 @@ spec: serviceAccountName: minio-operator containers: - name: minio-operator - image: minio/operator:v5.0.10 + image: minio/operator:v5.0.14 imagePullPolicy: IfNotPresent args: - controller @@ -36,6 +36,12 @@ spec: runAsUser: 1000 runAsGroup: 1000 runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault env: - name: MINIO_CONSOLE_TLS_ENABLE value: "off" diff --git a/resources/base/namespace.yaml b/resources/base/namespace.yaml index 1002072f374..08ebbed8f09 100644 --- a/resources/base/namespace.yaml +++ b/resources/base/namespace.yaml @@ -2,3 +2,10 @@ apiVersion: v1 kind: Namespace metadata: name: minio-operator + labels: + pod-security.kubernetes.io/enforce: restricted + pod-security.kubernetes.io/enforce-version: latest + pod-security.kubernetes.io/audit: restricted + pod-security.kubernetes.io/audit-version: latest + pod-security.kubernetes.io/warn: restricted + pod-security.kubernetes.io/warn-version: latest diff --git a/resources/kustomization.yaml b/resources/kustomization.yaml index 9ddaa92a528..f0e5e5c6f17 100644 --- a/resources/kustomization.yaml +++ b/resources/kustomization.yaml @@ -5,7 +5,9 @@ commonAnnotations: operator.min.io/authors: "MinIO, Inc." operator.min.io/license: "AGPLv3" operator.min.io/support: "https://subnet.min.io" - + operator.min.io/version: v5.0.14 +commonLabels: + app.kubernetes.io/name: operator resources: - base/namespace.yaml - base/service-account.yaml diff --git a/swagger.yml b/swagger.yml index 4e6f7b63cb4..2cc2cc5dc3c 100644 --- a/swagger.yml +++ b/swagger.yml @@ -1,6 +1,6 @@ swagger: "2.0" info: - title: MinIO Console Server + title: MinIO Operator version: 0.1.0 consumes: - application/json diff --git a/testing/common.sh b/testing/common.sh index f45169c5f3c..2f256592e1f 100644 --- a/testing/common.sh +++ b/testing/common.sh @@ -47,6 +47,7 @@ die() { try() { "$@" || die "cannot $*"; } function setup_kind() { + echo "setup_kind():" if [ "$TEST_FLOOR" = "true" ]; then try kind create cluster --config "${SCRIPT_DIR}/kind-config-floor.yaml" else @@ -67,8 +68,487 @@ function install_cert_manager() { try kubectl wait -n cert-manager --for=condition=ready pod -l app=webhook --timeout=120s } -function install_operator() { +# removes the pool from the provided tenant. +# usage: remove_decommissioned_pool +function remove_decommissioned_pool() { + + TENANT_NAME=$1 + NAMESPACE=$2 + + # While there is a conflict, let's retry + RESULT=1 + while [ "$RESULT" == "1" ]; do + sleep 10 # wait for new tenant spec to be ready + get_tenant_spec "$TENANT_NAME" "$NAMESPACE" + # modify it + yq eval 'del(.spec.pools[0])' ~/tenant.yaml >~/new-tenant.yaml + # replace it + RESULT=$(kubectl_replace ~/new-tenant.yaml) + done + +} + +# waits for n resources to come up. +# usage: wait_for_n_resources +function wait_for_n_resources() { + NUMBER_OF_RESOURCES=$3 + waitdone=0 + totalwait=0 + DEFAULT_WAIT_TIME=300 # 300 SECONDS + if [ -z "$4" ]; then + echo "No requested waiting time hence using default value" + else + echo "Requested specific waiting time" + DEFAULT_WAIT_TIME=$4 + fi + echo "* Waiting for ${NUMBER_OF_RESOURCES} pods to come up; wait_time: ${DEFAULT_WAIT_TIME};" + command_to_wait="kubectl -n $1 get pods --field-selector=status.phase=Running --no-headers --ignore-not-found=true" + if [ "$2" ]; then + command_to_wait="kubectl -n $1 get pods --field-selector=status.phase=Running --no-headers --ignore-not-found=true -l $2" + fi + echo "* Waiting on: $command_to_wait" + + while true; do + # xargs to trim whitespaces from bash variable. + waitdone=$($command_to_wait | wc -l | xargs) + + echo " " + echo " " + echo "##############################" + echo "To show visibility in all pods" + echo "##############################" + kubectl get pods -A + echo " " + echo " " + echo " " + + if [ "$waitdone" -ne 0 ]; then + if [ "$NUMBER_OF_RESOURCES" == "$waitdone" ]; then + break + fi + fi + sleep 5 + totalwait=$((totalwait + 10)) + if [ "$totalwait" -gt "$DEFAULT_WAIT_TIME" ]; then + echo "* Unable to get resource after 10 minutes, exiting." + try false + fi + done +} + +# waits for n tenant pods to come up. +# usage: wait_for_n_tenant_pods +function wait_for_n_tenant_pods() { + NUMBER_OF_RESOURCES=$1 + NAMESPACE=$2 + TENANT_NAME=$3 + echo "wait_for_n_tenant_pods(): * Waiting for ${NUMBER_OF_RESOURCES} '${TENANT_NAME}' tenant pods in ${NAMESPACE} namespace" + wait_for_n_resources "$NAMESPACE" "v1.min.io/tenant=$TENANT_NAME" "$NUMBER_OF_RESOURCES" 600 + echo "Waiting for the tenant pods to be ready (5m timeout)" + try kubectl wait --namespace "$NAMESPACE" \ + --for=condition=ready pod \ + --selector v1.min.io/tenant="$TENANT_NAME" \ + --timeout=600s +} + +# copies the script to the pod. +# usage: copy_script_to_pod
\ No newline at end of file +MinIO Operator
\ No newline at end of file diff --git a/web-app/build/manifest.json b/web-app/build/manifest.json index 28ab43f74e9..56e9f82a90a 100644 --- a/web-app/build/manifest.json +++ b/web-app/build/manifest.json @@ -1,5 +1,5 @@ { - "name": "MinIO Console", + "name": "MinIO Operator", "icons": [ { "src": "favicon.ico", diff --git a/web-app/build/static/css/292.41f82bb6.chunk.css b/web-app/build/static/css/292.41f82bb6.chunk.css deleted file mode 100644 index 8c6789ccbff..00000000000 --- a/web-app/build/static/css/292.41f82bb6.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -@media (prefers-color-scheme:dark){.w-tc-editor{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}}@media (prefers-color-scheme:light){.w-tc-editor{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}}.w-tc-editor[data-color-mode*=dark],[data-color-mode*=dark] .w-tc-editor,[data-color-mode*=dark] .w-tc-editor-var,body[data-color-mode*=dark]{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}.w-tc-editor[data-color-mode*=light],[data-color-mode*=light] .w-tc-editor,[data-color-mode*=light] .w-tc-editor-var,body[data-color-mode*=light]{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}.w-tc-editor{background-color:var(--color-canvas-subtle);color:var(--color-fg-default);font-family:inherit;font-size:12px}.w-tc-editor-preview,.w-tc-editor-text{min-height:16px}.w-tc-editor-preview pre{font-family:inherit;font-size:inherit;margin:0;padding:0;white-space:inherit}.w-tc-editor-preview pre code{font-family:inherit}.w-tc-editor code[class*=language-] .token.cdata,.w-tc-editor code[class*=language-] .token.comment,.w-tc-editor code[class*=language-] .token.doctype,.w-tc-editor code[class*=language-] .token.prolog,.w-tc-editor pre[class*=language-] .token.cdata,.w-tc-editor pre[class*=language-] .token.comment,.w-tc-editor pre[class*=language-] .token.doctype,.w-tc-editor pre[class*=language-] .token.prolog{color:var(--color-prettylights-syntax-comment)}.w-tc-editor code[class*=language-] .token.punctuation,.w-tc-editor pre[class*=language-] .token.punctuation{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.w-tc-editor code[class*=language-] .namespace,.w-tc-editor pre[class*=language-] .namespace{opacity:.7}.w-tc-editor code[class*=language-] .token.boolean,.w-tc-editor code[class*=language-] .token.constant,.w-tc-editor code[class*=language-] .token.deleted,.w-tc-editor code[class*=language-] .token.number,.w-tc-editor code[class*=language-] .token.symbol,.w-tc-editor pre[class*=language-] .token.boolean,.w-tc-editor pre[class*=language-] .token.constant,.w-tc-editor pre[class*=language-] .token.deleted,.w-tc-editor pre[class*=language-] .token.number,.w-tc-editor pre[class*=language-] .token.symbol{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .style .token.string,.w-tc-editor code[class*=language-] .token.builtin,.w-tc-editor code[class*=language-] .token.char,.w-tc-editor code[class*=language-] .token.entity,.w-tc-editor code[class*=language-] .token.inserted,.w-tc-editor code[class*=language-] .token.operator,.w-tc-editor code[class*=language-] .token.property,.w-tc-editor code[class*=language-] .token.selector,.w-tc-editor code[class*=language-] .token.string,.w-tc-editor code[class*=language-] .token.url,.w-tc-editor pre[class*=language-] .style .token.string,.w-tc-editor pre[class*=language-] .token.builtin,.w-tc-editor pre[class*=language-] .token.char,.w-tc-editor pre[class*=language-] .token.entity,.w-tc-editor pre[class*=language-] .token.inserted,.w-tc-editor pre[class*=language-] .token.operator,.w-tc-editor pre[class*=language-] .token.property,.w-tc-editor pre[class*=language-] .token.selector,.w-tc-editor pre[class*=language-] .token.string,.w-tc-editor pre[class*=language-] .token.url{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.atrule,.w-tc-editor code[class*=language-] .token.keyword,.w-tc-editor code[class*=language-] .token.property-access .token.method,.w-tc-editor pre[class*=language-] .token.atrule,.w-tc-editor pre[class*=language-] .token.keyword,.w-tc-editor pre[class*=language-] .token.property-access .token.method{color:var(--color-prettylights-syntax-keyword)}.w-tc-editor code[class*=language-] .token.function,.w-tc-editor pre[class*=language-] .token.function{color:var(--color-prettylights-syntax-string)}.w-tc-editor code[class*=language-] .token.important,.w-tc-editor code[class*=language-] .token.regex,.w-tc-editor code[class*=language-] .token.variable,.w-tc-editor pre[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.regex,.w-tc-editor pre[class*=language-] .token.variable{color:var(--color-prettylights-syntax-string-regexp)}.w-tc-editor code[class*=language-] .token.bold,.w-tc-editor code[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.bold,.w-tc-editor pre[class*=language-] .token.important{color:var(--color-prettylights-syntax-markup-bold)}.w-tc-editor code[class*=language-] .token.tag,.w-tc-editor pre[class*=language-] .token.tag{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .token.attr-name,.w-tc-editor code[class*=language-] .token.attr-value,.w-tc-editor pre[class*=language-] .token.attr-name,.w-tc-editor pre[class*=language-] .token.attr-value{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.class-name,.w-tc-editor code[class*=language-] .token.selector .class,.w-tc-editor pre[class*=language-] .token.class-name,.w-tc-editor pre[class*=language-] .token.selector .class{color:var(--color-prettylights-syntax-entity)} -/*# sourceMappingURL=292.41f82bb6.chunk.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/292.41f82bb6.chunk.css.map b/web-app/build/static/css/292.41f82bb6.chunk.css.map deleted file mode 100644 index 790c5d2cd09..00000000000 --- a/web-app/build/static/css/292.41f82bb6.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/292.41f82bb6.chunk.css","mappings":"AAAA,mCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,oCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,8IAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,kJAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,aAGE,2CAA4C,CAC5C,6BAA8B,CAH9B,mBAAoB,CACpB,cAGF,CACA,uCAEE,eACF,CACA,yBAIE,mBAAoB,CACpB,iBAAkB,CAJlB,QAAS,CACT,SAAU,CACV,mBAGF,CACA,8BACE,mBACF,CACA,8YAQE,8CACF,CACA,6GAEE,gEACF,CACA,6FAEE,UACF,CACA,ufAUE,iDACF,CAaA,o/BAUE,+CACF,CACA,yVAME,8CACF,CACA,uGAEE,6CACF,CACA,iTAME,oDACF,CACA,wMAIE,kDACF,CACA,6FAEE,iDACF,CACA,oNAIE,+CACF,CACA,gOAIE,6CACF","sources":["../node_modules/@uiw/react-textarea-code-editor/esm/style/index.css"],"sourcesContent":["@media (prefers-color-scheme: dark) {\n .w-tc-editor {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n }\n}\n@media (prefers-color-scheme: light) {\n .w-tc-editor {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n }\n}\n.w-tc-editor[data-color-mode*='dark'],\n[data-color-mode*='dark'] .w-tc-editor,\n[data-color-mode*='dark'] .w-tc-editor-var,\nbody[data-color-mode*='dark'] {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n}\n.w-tc-editor[data-color-mode*='light'],\n[data-color-mode*='light'] .w-tc-editor,\n[data-color-mode*='light'] .w-tc-editor-var,\nbody[data-color-mode*='light'] {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n}\n.w-tc-editor {\n font-family: inherit;\n font-size: 12px;\n background-color: var(--color-canvas-subtle);\n color: var(--color-fg-default);\n}\n.w-tc-editor-text,\n.w-tc-editor-preview {\n min-height: 16px;\n}\n.w-tc-editor-preview pre {\n margin: 0;\n padding: 0;\n white-space: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n.w-tc-editor-preview pre code {\n font-family: inherit;\n}\n.w-tc-editor code[class*='language-'] .token.cdata,\n.w-tc-editor pre[class*='language-'] .token.cdata,\n.w-tc-editor code[class*='language-'] .token.comment,\n.w-tc-editor pre[class*='language-'] .token.comment,\n.w-tc-editor code[class*='language-'] .token.doctype,\n.w-tc-editor pre[class*='language-'] .token.doctype,\n.w-tc-editor code[class*='language-'] .token.prolog,\n.w-tc-editor pre[class*='language-'] .token.prolog {\n color: var(--color-prettylights-syntax-comment);\n}\n.w-tc-editor code[class*='language-'] .token.punctuation,\n.w-tc-editor pre[class*='language-'] .token.punctuation {\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\n}\n.w-tc-editor code[class*='language-'] .namespace,\n.w-tc-editor pre[class*='language-'] .namespace {\n opacity: 0.7;\n}\n.w-tc-editor code[class*='language-'] .token.boolean,\n.w-tc-editor pre[class*='language-'] .token.boolean,\n.w-tc-editor code[class*='language-'] .token.constant,\n.w-tc-editor pre[class*='language-'] .token.constant,\n.w-tc-editor code[class*='language-'] .token.deleted,\n.w-tc-editor pre[class*='language-'] .token.deleted,\n.w-tc-editor code[class*='language-'] .token.number,\n.w-tc-editor pre[class*='language-'] .token.number,\n.w-tc-editor code[class*='language-'] .token.symbol,\n.w-tc-editor pre[class*='language-'] .token.symbol {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.builtin,\n.w-tc-editor pre[class*='language-'] .token.builtin,\n.w-tc-editor code[class*='language-'] .token.char,\n.w-tc-editor pre[class*='language-'] .token.char,\n.w-tc-editor code[class*='language-'] .token.inserted,\n.w-tc-editor pre[class*='language-'] .token.inserted,\n.w-tc-editor code[class*='language-'] .token.selector,\n.w-tc-editor pre[class*='language-'] .token.selector,\n.w-tc-editor code[class*='language-'] .token.string,\n.w-tc-editor pre[class*='language-'] .token.string {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .style .token.string,\n.w-tc-editor pre[class*='language-'] .style .token.string,\n.w-tc-editor code[class*='language-'] .token.entity,\n.w-tc-editor pre[class*='language-'] .token.entity,\n.w-tc-editor code[class*='language-'] .token.property,\n.w-tc-editor pre[class*='language-'] .token.property,\n.w-tc-editor code[class*='language-'] .token.operator,\n.w-tc-editor pre[class*='language-'] .token.operator,\n.w-tc-editor code[class*='language-'] .token.url,\n.w-tc-editor pre[class*='language-'] .token.url {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.atrule,\n.w-tc-editor pre[class*='language-'] .token.atrule,\n.w-tc-editor code[class*='language-'] .token.property-access .token.method,\n.w-tc-editor pre[class*='language-'] .token.property-access .token.method,\n.w-tc-editor code[class*='language-'] .token.keyword,\n.w-tc-editor pre[class*='language-'] .token.keyword {\n color: var(--color-prettylights-syntax-keyword);\n}\n.w-tc-editor code[class*='language-'] .token.function,\n.w-tc-editor pre[class*='language-'] .token.function {\n color: var(--color-prettylights-syntax-string);\n}\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important,\n.w-tc-editor code[class*='language-'] .token.regex,\n.w-tc-editor pre[class*='language-'] .token.regex,\n.w-tc-editor code[class*='language-'] .token.variable,\n.w-tc-editor pre[class*='language-'] .token.variable {\n color: var(--color-prettylights-syntax-string-regexp);\n}\n.w-tc-editor code[class*='language-'] .token.bold,\n.w-tc-editor pre[class*='language-'] .token.bold,\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important {\n color: var(--color-prettylights-syntax-markup-bold);\n}\n.w-tc-editor code[class*='language-'] .token.tag,\n.w-tc-editor pre[class*='language-'] .token.tag {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.attr-value,\n.w-tc-editor pre[class*='language-'] .token.attr-value,\n.w-tc-editor code[class*='language-'] .token.attr-name,\n.w-tc-editor pre[class*='language-'] .token.attr-name {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.selector .class,\n.w-tc-editor pre[class*='language-'] .token.selector .class,\n.w-tc-editor code[class*='language-'] .token.class-name,\n.w-tc-editor pre[class*='language-'] .token.class-name {\n color: var(--color-prettylights-syntax-entity);\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/css/367.41f82bb6.chunk.css b/web-app/build/static/css/367.41f82bb6.chunk.css deleted file mode 100644 index 4767549af3b..00000000000 --- a/web-app/build/static/css/367.41f82bb6.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -@media (prefers-color-scheme:dark){.w-tc-editor{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}}@media (prefers-color-scheme:light){.w-tc-editor{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}}.w-tc-editor[data-color-mode*=dark],[data-color-mode*=dark] .w-tc-editor,[data-color-mode*=dark] .w-tc-editor-var,body[data-color-mode*=dark]{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}.w-tc-editor[data-color-mode*=light],[data-color-mode*=light] .w-tc-editor,[data-color-mode*=light] .w-tc-editor-var,body[data-color-mode*=light]{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}.w-tc-editor{background-color:var(--color-canvas-subtle);color:var(--color-fg-default);font-family:inherit;font-size:12px}.w-tc-editor-preview,.w-tc-editor-text{min-height:16px}.w-tc-editor-preview pre{font-family:inherit;font-size:inherit;margin:0;padding:0;white-space:inherit}.w-tc-editor-preview pre code{font-family:inherit}.w-tc-editor code[class*=language-] .token.cdata,.w-tc-editor code[class*=language-] .token.comment,.w-tc-editor code[class*=language-] .token.doctype,.w-tc-editor code[class*=language-] .token.prolog,.w-tc-editor pre[class*=language-] .token.cdata,.w-tc-editor pre[class*=language-] .token.comment,.w-tc-editor pre[class*=language-] .token.doctype,.w-tc-editor pre[class*=language-] .token.prolog{color:var(--color-prettylights-syntax-comment)}.w-tc-editor code[class*=language-] .token.punctuation,.w-tc-editor pre[class*=language-] .token.punctuation{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.w-tc-editor code[class*=language-] .namespace,.w-tc-editor pre[class*=language-] .namespace{opacity:.7}.w-tc-editor code[class*=language-] .token.boolean,.w-tc-editor code[class*=language-] .token.constant,.w-tc-editor code[class*=language-] .token.deleted,.w-tc-editor code[class*=language-] .token.number,.w-tc-editor code[class*=language-] .token.symbol,.w-tc-editor pre[class*=language-] .token.boolean,.w-tc-editor pre[class*=language-] .token.constant,.w-tc-editor pre[class*=language-] .token.deleted,.w-tc-editor pre[class*=language-] .token.number,.w-tc-editor pre[class*=language-] .token.symbol{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .style .token.string,.w-tc-editor code[class*=language-] .token.builtin,.w-tc-editor code[class*=language-] .token.char,.w-tc-editor code[class*=language-] .token.entity,.w-tc-editor code[class*=language-] .token.inserted,.w-tc-editor code[class*=language-] .token.operator,.w-tc-editor code[class*=language-] .token.property,.w-tc-editor code[class*=language-] .token.selector,.w-tc-editor code[class*=language-] .token.string,.w-tc-editor code[class*=language-] .token.url,.w-tc-editor pre[class*=language-] .style .token.string,.w-tc-editor pre[class*=language-] .token.builtin,.w-tc-editor pre[class*=language-] .token.char,.w-tc-editor pre[class*=language-] .token.entity,.w-tc-editor pre[class*=language-] .token.inserted,.w-tc-editor pre[class*=language-] .token.operator,.w-tc-editor pre[class*=language-] .token.property,.w-tc-editor pre[class*=language-] .token.selector,.w-tc-editor pre[class*=language-] .token.string,.w-tc-editor pre[class*=language-] .token.url{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.atrule,.w-tc-editor code[class*=language-] .token.keyword,.w-tc-editor code[class*=language-] .token.property-access .token.method,.w-tc-editor pre[class*=language-] .token.atrule,.w-tc-editor pre[class*=language-] .token.keyword,.w-tc-editor pre[class*=language-] .token.property-access .token.method{color:var(--color-prettylights-syntax-keyword)}.w-tc-editor code[class*=language-] .token.function,.w-tc-editor pre[class*=language-] .token.function{color:var(--color-prettylights-syntax-string)}.w-tc-editor code[class*=language-] .token.important,.w-tc-editor code[class*=language-] .token.regex,.w-tc-editor code[class*=language-] .token.variable,.w-tc-editor pre[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.regex,.w-tc-editor pre[class*=language-] .token.variable{color:var(--color-prettylights-syntax-string-regexp)}.w-tc-editor code[class*=language-] .token.bold,.w-tc-editor code[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.bold,.w-tc-editor pre[class*=language-] .token.important{color:var(--color-prettylights-syntax-markup-bold)}.w-tc-editor code[class*=language-] .token.tag,.w-tc-editor pre[class*=language-] .token.tag{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .token.attr-name,.w-tc-editor code[class*=language-] .token.attr-value,.w-tc-editor pre[class*=language-] .token.attr-name,.w-tc-editor pre[class*=language-] .token.attr-value{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.class-name,.w-tc-editor code[class*=language-] .token.selector .class,.w-tc-editor pre[class*=language-] .token.class-name,.w-tc-editor pre[class*=language-] .token.selector .class{color:var(--color-prettylights-syntax-entity)} -/*# sourceMappingURL=367.41f82bb6.chunk.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/367.41f82bb6.chunk.css.map b/web-app/build/static/css/367.41f82bb6.chunk.css.map deleted file mode 100644 index aa0d5cba110..00000000000 --- a/web-app/build/static/css/367.41f82bb6.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/367.41f82bb6.chunk.css","mappings":"AAAA,mCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,oCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,8IAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,kJAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,aAGE,2CAA4C,CAC5C,6BAA8B,CAH9B,mBAAoB,CACpB,cAGF,CACA,uCAEE,eACF,CACA,yBAIE,mBAAoB,CACpB,iBAAkB,CAJlB,QAAS,CACT,SAAU,CACV,mBAGF,CACA,8BACE,mBACF,CACA,8YAQE,8CACF,CACA,6GAEE,gEACF,CACA,6FAEE,UACF,CACA,ufAUE,iDACF,CAaA,o/BAUE,+CACF,CACA,yVAME,8CACF,CACA,uGAEE,6CACF,CACA,iTAME,oDACF,CACA,wMAIE,kDACF,CACA,6FAEE,iDACF,CACA,oNAIE,+CACF,CACA,gOAIE,6CACF","sources":["../node_modules/@uiw/react-textarea-code-editor/esm/style/index.css"],"sourcesContent":["@media (prefers-color-scheme: dark) {\n .w-tc-editor {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n }\n}\n@media (prefers-color-scheme: light) {\n .w-tc-editor {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n }\n}\n.w-tc-editor[data-color-mode*='dark'],\n[data-color-mode*='dark'] .w-tc-editor,\n[data-color-mode*='dark'] .w-tc-editor-var,\nbody[data-color-mode*='dark'] {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n}\n.w-tc-editor[data-color-mode*='light'],\n[data-color-mode*='light'] .w-tc-editor,\n[data-color-mode*='light'] .w-tc-editor-var,\nbody[data-color-mode*='light'] {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n}\n.w-tc-editor {\n font-family: inherit;\n font-size: 12px;\n background-color: var(--color-canvas-subtle);\n color: var(--color-fg-default);\n}\n.w-tc-editor-text,\n.w-tc-editor-preview {\n min-height: 16px;\n}\n.w-tc-editor-preview pre {\n margin: 0;\n padding: 0;\n white-space: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n.w-tc-editor-preview pre code {\n font-family: inherit;\n}\n.w-tc-editor code[class*='language-'] .token.cdata,\n.w-tc-editor pre[class*='language-'] .token.cdata,\n.w-tc-editor code[class*='language-'] .token.comment,\n.w-tc-editor pre[class*='language-'] .token.comment,\n.w-tc-editor code[class*='language-'] .token.doctype,\n.w-tc-editor pre[class*='language-'] .token.doctype,\n.w-tc-editor code[class*='language-'] .token.prolog,\n.w-tc-editor pre[class*='language-'] .token.prolog {\n color: var(--color-prettylights-syntax-comment);\n}\n.w-tc-editor code[class*='language-'] .token.punctuation,\n.w-tc-editor pre[class*='language-'] .token.punctuation {\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\n}\n.w-tc-editor code[class*='language-'] .namespace,\n.w-tc-editor pre[class*='language-'] .namespace {\n opacity: 0.7;\n}\n.w-tc-editor code[class*='language-'] .token.boolean,\n.w-tc-editor pre[class*='language-'] .token.boolean,\n.w-tc-editor code[class*='language-'] .token.constant,\n.w-tc-editor pre[class*='language-'] .token.constant,\n.w-tc-editor code[class*='language-'] .token.deleted,\n.w-tc-editor pre[class*='language-'] .token.deleted,\n.w-tc-editor code[class*='language-'] .token.number,\n.w-tc-editor pre[class*='language-'] .token.number,\n.w-tc-editor code[class*='language-'] .token.symbol,\n.w-tc-editor pre[class*='language-'] .token.symbol {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.builtin,\n.w-tc-editor pre[class*='language-'] .token.builtin,\n.w-tc-editor code[class*='language-'] .token.char,\n.w-tc-editor pre[class*='language-'] .token.char,\n.w-tc-editor code[class*='language-'] .token.inserted,\n.w-tc-editor pre[class*='language-'] .token.inserted,\n.w-tc-editor code[class*='language-'] .token.selector,\n.w-tc-editor pre[class*='language-'] .token.selector,\n.w-tc-editor code[class*='language-'] .token.string,\n.w-tc-editor pre[class*='language-'] .token.string {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .style .token.string,\n.w-tc-editor pre[class*='language-'] .style .token.string,\n.w-tc-editor code[class*='language-'] .token.entity,\n.w-tc-editor pre[class*='language-'] .token.entity,\n.w-tc-editor code[class*='language-'] .token.property,\n.w-tc-editor pre[class*='language-'] .token.property,\n.w-tc-editor code[class*='language-'] .token.operator,\n.w-tc-editor pre[class*='language-'] .token.operator,\n.w-tc-editor code[class*='language-'] .token.url,\n.w-tc-editor pre[class*='language-'] .token.url {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.atrule,\n.w-tc-editor pre[class*='language-'] .token.atrule,\n.w-tc-editor code[class*='language-'] .token.property-access .token.method,\n.w-tc-editor pre[class*='language-'] .token.property-access .token.method,\n.w-tc-editor code[class*='language-'] .token.keyword,\n.w-tc-editor pre[class*='language-'] .token.keyword {\n color: var(--color-prettylights-syntax-keyword);\n}\n.w-tc-editor code[class*='language-'] .token.function,\n.w-tc-editor pre[class*='language-'] .token.function {\n color: var(--color-prettylights-syntax-string);\n}\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important,\n.w-tc-editor code[class*='language-'] .token.regex,\n.w-tc-editor pre[class*='language-'] .token.regex,\n.w-tc-editor code[class*='language-'] .token.variable,\n.w-tc-editor pre[class*='language-'] .token.variable {\n color: var(--color-prettylights-syntax-string-regexp);\n}\n.w-tc-editor code[class*='language-'] .token.bold,\n.w-tc-editor pre[class*='language-'] .token.bold,\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important {\n color: var(--color-prettylights-syntax-markup-bold);\n}\n.w-tc-editor code[class*='language-'] .token.tag,\n.w-tc-editor pre[class*='language-'] .token.tag {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.attr-value,\n.w-tc-editor pre[class*='language-'] .token.attr-value,\n.w-tc-editor code[class*='language-'] .token.attr-name,\n.w-tc-editor pre[class*='language-'] .token.attr-name {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.selector .class,\n.w-tc-editor pre[class*='language-'] .token.selector .class,\n.w-tc-editor code[class*='language-'] .token.class-name,\n.w-tc-editor pre[class*='language-'] .token.class-name {\n color: var(--color-prettylights-syntax-entity);\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/css/881.41f82bb6.chunk.css b/web-app/build/static/css/881.41f82bb6.chunk.css deleted file mode 100644 index fa4e6df1d1b..00000000000 --- a/web-app/build/static/css/881.41f82bb6.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -@media (prefers-color-scheme:dark){.w-tc-editor{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}}@media (prefers-color-scheme:light){.w-tc-editor{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}}.w-tc-editor[data-color-mode*=dark],[data-color-mode*=dark] .w-tc-editor,[data-color-mode*=dark] .w-tc-editor-var,body[data-color-mode*=dark]{--color-fg-default:#c9d1d9;--color-canvas-subtle:#161b22;--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#c9d1d9}.w-tc-editor[data-color-mode*=light],[data-color-mode*=light] .w-tc-editor,[data-color-mode*=light] .w-tc-editor-var,body[data-color-mode*=light]{--color-fg-default:#24292f;--color-canvas-subtle:#f6f8fa;--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-bold:#24292f}.w-tc-editor{background-color:var(--color-canvas-subtle);color:var(--color-fg-default);font-family:inherit;font-size:12px}.w-tc-editor-preview,.w-tc-editor-text{min-height:16px}.w-tc-editor-preview pre{font-family:inherit;font-size:inherit;margin:0;padding:0;white-space:inherit}.w-tc-editor-preview pre code{font-family:inherit}.w-tc-editor code[class*=language-] .token.cdata,.w-tc-editor code[class*=language-] .token.comment,.w-tc-editor code[class*=language-] .token.doctype,.w-tc-editor code[class*=language-] .token.prolog,.w-tc-editor pre[class*=language-] .token.cdata,.w-tc-editor pre[class*=language-] .token.comment,.w-tc-editor pre[class*=language-] .token.doctype,.w-tc-editor pre[class*=language-] .token.prolog{color:var(--color-prettylights-syntax-comment)}.w-tc-editor code[class*=language-] .token.punctuation,.w-tc-editor pre[class*=language-] .token.punctuation{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.w-tc-editor code[class*=language-] .namespace,.w-tc-editor pre[class*=language-] .namespace{opacity:.7}.w-tc-editor code[class*=language-] .token.boolean,.w-tc-editor code[class*=language-] .token.constant,.w-tc-editor code[class*=language-] .token.deleted,.w-tc-editor code[class*=language-] .token.number,.w-tc-editor code[class*=language-] .token.symbol,.w-tc-editor pre[class*=language-] .token.boolean,.w-tc-editor pre[class*=language-] .token.constant,.w-tc-editor pre[class*=language-] .token.deleted,.w-tc-editor pre[class*=language-] .token.number,.w-tc-editor pre[class*=language-] .token.symbol{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .style .token.string,.w-tc-editor code[class*=language-] .token.builtin,.w-tc-editor code[class*=language-] .token.char,.w-tc-editor code[class*=language-] .token.entity,.w-tc-editor code[class*=language-] .token.inserted,.w-tc-editor code[class*=language-] .token.operator,.w-tc-editor code[class*=language-] .token.property,.w-tc-editor code[class*=language-] .token.selector,.w-tc-editor code[class*=language-] .token.string,.w-tc-editor code[class*=language-] .token.url,.w-tc-editor pre[class*=language-] .style .token.string,.w-tc-editor pre[class*=language-] .token.builtin,.w-tc-editor pre[class*=language-] .token.char,.w-tc-editor pre[class*=language-] .token.entity,.w-tc-editor pre[class*=language-] .token.inserted,.w-tc-editor pre[class*=language-] .token.operator,.w-tc-editor pre[class*=language-] .token.property,.w-tc-editor pre[class*=language-] .token.selector,.w-tc-editor pre[class*=language-] .token.string,.w-tc-editor pre[class*=language-] .token.url{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.atrule,.w-tc-editor code[class*=language-] .token.keyword,.w-tc-editor code[class*=language-] .token.property-access .token.method,.w-tc-editor pre[class*=language-] .token.atrule,.w-tc-editor pre[class*=language-] .token.keyword,.w-tc-editor pre[class*=language-] .token.property-access .token.method{color:var(--color-prettylights-syntax-keyword)}.w-tc-editor code[class*=language-] .token.function,.w-tc-editor pre[class*=language-] .token.function{color:var(--color-prettylights-syntax-string)}.w-tc-editor code[class*=language-] .token.important,.w-tc-editor code[class*=language-] .token.regex,.w-tc-editor code[class*=language-] .token.variable,.w-tc-editor pre[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.regex,.w-tc-editor pre[class*=language-] .token.variable{color:var(--color-prettylights-syntax-string-regexp)}.w-tc-editor code[class*=language-] .token.bold,.w-tc-editor code[class*=language-] .token.important,.w-tc-editor pre[class*=language-] .token.bold,.w-tc-editor pre[class*=language-] .token.important{color:var(--color-prettylights-syntax-markup-bold)}.w-tc-editor code[class*=language-] .token.tag,.w-tc-editor pre[class*=language-] .token.tag{color:var(--color-prettylights-syntax-entity-tag)}.w-tc-editor code[class*=language-] .token.attr-name,.w-tc-editor code[class*=language-] .token.attr-value,.w-tc-editor pre[class*=language-] .token.attr-name,.w-tc-editor pre[class*=language-] .token.attr-value{color:var(--color-prettylights-syntax-constant)}.w-tc-editor code[class*=language-] .token.class-name,.w-tc-editor code[class*=language-] .token.selector .class,.w-tc-editor pre[class*=language-] .token.class-name,.w-tc-editor pre[class*=language-] .token.selector .class{color:var(--color-prettylights-syntax-entity)} -/*# sourceMappingURL=881.41f82bb6.chunk.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/881.41f82bb6.chunk.css.map b/web-app/build/static/css/881.41f82bb6.chunk.css.map deleted file mode 100644 index 47b9e1673c7..00000000000 --- a/web-app/build/static/css/881.41f82bb6.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/881.41f82bb6.chunk.css","mappings":"AAAA,mCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,oCACE,aACE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACF,CACA,8IAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,kJAIE,0BAA2B,CAC3B,6BAA8B,CAC9B,2CAA4C,CAC5C,8CAA+C,CAC/C,0CAA2C,CAC3C,6DAA8D,CAC9D,4CAA6C,CAC7C,0CAA2C,CAC3C,2CAA4C,CAC5C,+CACF,CACA,aAGE,2CAA4C,CAC5C,6BAA8B,CAH9B,mBAAoB,CACpB,cAGF,CACA,uCAEE,eACF,CACA,yBAIE,mBAAoB,CACpB,iBAAkB,CAJlB,QAAS,CACT,SAAU,CACV,mBAGF,CACA,8BACE,mBACF,CACA,8YAQE,8CACF,CACA,6GAEE,gEACF,CACA,6FAEE,UACF,CACA,ufAUE,iDACF,CAaA,o/BAUE,+CACF,CACA,yVAME,8CACF,CACA,uGAEE,6CACF,CACA,iTAME,oDACF,CACA,wMAIE,kDACF,CACA,6FAEE,iDACF,CACA,oNAIE,+CACF,CACA,gOAIE,6CACF","sources":["../node_modules/@uiw/react-textarea-code-editor/esm/style/index.css"],"sourcesContent":["@media (prefers-color-scheme: dark) {\n .w-tc-editor {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n }\n}\n@media (prefers-color-scheme: light) {\n .w-tc-editor {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n }\n}\n.w-tc-editor[data-color-mode*='dark'],\n[data-color-mode*='dark'] .w-tc-editor,\n[data-color-mode*='dark'] .w-tc-editor-var,\nbody[data-color-mode*='dark'] {\n --color-fg-default: #c9d1d9;\n --color-canvas-subtle: #161b22;\n --color-prettylights-syntax-comment: #8b949e;\n --color-prettylights-syntax-entity-tag: #7ee787;\n --color-prettylights-syntax-entity: #d2a8ff;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;\n --color-prettylights-syntax-constant: #79c0ff;\n --color-prettylights-syntax-string: #a5d6ff;\n --color-prettylights-syntax-keyword: #ff7b72;\n --color-prettylights-syntax-markup-bold: #c9d1d9;\n}\n.w-tc-editor[data-color-mode*='light'],\n[data-color-mode*='light'] .w-tc-editor,\n[data-color-mode*='light'] .w-tc-editor-var,\nbody[data-color-mode*='light'] {\n --color-fg-default: #24292f;\n --color-canvas-subtle: #f6f8fa;\n --color-prettylights-syntax-comment: #6e7781;\n --color-prettylights-syntax-entity-tag: #116329;\n --color-prettylights-syntax-entity: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-markup-bold: #24292f;\n}\n.w-tc-editor {\n font-family: inherit;\n font-size: 12px;\n background-color: var(--color-canvas-subtle);\n color: var(--color-fg-default);\n}\n.w-tc-editor-text,\n.w-tc-editor-preview {\n min-height: 16px;\n}\n.w-tc-editor-preview pre {\n margin: 0;\n padding: 0;\n white-space: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n.w-tc-editor-preview pre code {\n font-family: inherit;\n}\n.w-tc-editor code[class*='language-'] .token.cdata,\n.w-tc-editor pre[class*='language-'] .token.cdata,\n.w-tc-editor code[class*='language-'] .token.comment,\n.w-tc-editor pre[class*='language-'] .token.comment,\n.w-tc-editor code[class*='language-'] .token.doctype,\n.w-tc-editor pre[class*='language-'] .token.doctype,\n.w-tc-editor code[class*='language-'] .token.prolog,\n.w-tc-editor pre[class*='language-'] .token.prolog {\n color: var(--color-prettylights-syntax-comment);\n}\n.w-tc-editor code[class*='language-'] .token.punctuation,\n.w-tc-editor pre[class*='language-'] .token.punctuation {\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\n}\n.w-tc-editor code[class*='language-'] .namespace,\n.w-tc-editor pre[class*='language-'] .namespace {\n opacity: 0.7;\n}\n.w-tc-editor code[class*='language-'] .token.boolean,\n.w-tc-editor pre[class*='language-'] .token.boolean,\n.w-tc-editor code[class*='language-'] .token.constant,\n.w-tc-editor pre[class*='language-'] .token.constant,\n.w-tc-editor code[class*='language-'] .token.deleted,\n.w-tc-editor pre[class*='language-'] .token.deleted,\n.w-tc-editor code[class*='language-'] .token.number,\n.w-tc-editor pre[class*='language-'] .token.number,\n.w-tc-editor code[class*='language-'] .token.symbol,\n.w-tc-editor pre[class*='language-'] .token.symbol {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.builtin,\n.w-tc-editor pre[class*='language-'] .token.builtin,\n.w-tc-editor code[class*='language-'] .token.char,\n.w-tc-editor pre[class*='language-'] .token.char,\n.w-tc-editor code[class*='language-'] .token.inserted,\n.w-tc-editor pre[class*='language-'] .token.inserted,\n.w-tc-editor code[class*='language-'] .token.selector,\n.w-tc-editor pre[class*='language-'] .token.selector,\n.w-tc-editor code[class*='language-'] .token.string,\n.w-tc-editor pre[class*='language-'] .token.string {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .style .token.string,\n.w-tc-editor pre[class*='language-'] .style .token.string,\n.w-tc-editor code[class*='language-'] .token.entity,\n.w-tc-editor pre[class*='language-'] .token.entity,\n.w-tc-editor code[class*='language-'] .token.property,\n.w-tc-editor pre[class*='language-'] .token.property,\n.w-tc-editor code[class*='language-'] .token.operator,\n.w-tc-editor pre[class*='language-'] .token.operator,\n.w-tc-editor code[class*='language-'] .token.url,\n.w-tc-editor pre[class*='language-'] .token.url {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.atrule,\n.w-tc-editor pre[class*='language-'] .token.atrule,\n.w-tc-editor code[class*='language-'] .token.property-access .token.method,\n.w-tc-editor pre[class*='language-'] .token.property-access .token.method,\n.w-tc-editor code[class*='language-'] .token.keyword,\n.w-tc-editor pre[class*='language-'] .token.keyword {\n color: var(--color-prettylights-syntax-keyword);\n}\n.w-tc-editor code[class*='language-'] .token.function,\n.w-tc-editor pre[class*='language-'] .token.function {\n color: var(--color-prettylights-syntax-string);\n}\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important,\n.w-tc-editor code[class*='language-'] .token.regex,\n.w-tc-editor pre[class*='language-'] .token.regex,\n.w-tc-editor code[class*='language-'] .token.variable,\n.w-tc-editor pre[class*='language-'] .token.variable {\n color: var(--color-prettylights-syntax-string-regexp);\n}\n.w-tc-editor code[class*='language-'] .token.bold,\n.w-tc-editor pre[class*='language-'] .token.bold,\n.w-tc-editor code[class*='language-'] .token.important,\n.w-tc-editor pre[class*='language-'] .token.important {\n color: var(--color-prettylights-syntax-markup-bold);\n}\n.w-tc-editor code[class*='language-'] .token.tag,\n.w-tc-editor pre[class*='language-'] .token.tag {\n color: var(--color-prettylights-syntax-entity-tag);\n}\n.w-tc-editor code[class*='language-'] .token.attr-value,\n.w-tc-editor pre[class*='language-'] .token.attr-value,\n.w-tc-editor code[class*='language-'] .token.attr-name,\n.w-tc-editor pre[class*='language-'] .token.attr-name {\n color: var(--color-prettylights-syntax-constant);\n}\n.w-tc-editor code[class*='language-'] .token.selector .class,\n.w-tc-editor pre[class*='language-'] .token.selector .class,\n.w-tc-editor code[class*='language-'] .token.class-name,\n.w-tc-editor pre[class*='language-'] .token.class-name {\n color: var(--color-prettylights-syntax-entity);\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/css/main.110caa22.css b/web-app/build/static/css/main.110caa22.css new file mode 100644 index 00000000000..892c61abf80 --- /dev/null +++ b/web-app/build/static/css/main.110caa22.css @@ -0,0 +1,2 @@ +body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}input.removeArrows::-webkit-inner-spin-button,input.removeArrows::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input.removeArrows[type=number]{-moz-appearance:textfield}.ReactVirtualized__Table__headerRow{font-weight:700;text-transform:uppercase}.ReactVirtualized__Table__headerRow,.ReactVirtualized__Table__row{align-items:center;display:flex;flex-direction:row}.ReactVirtualized__Table__headerTruncatedText{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn,.ReactVirtualized__Table__rowColumn{margin-right:10px;min-width:0}.ReactVirtualized__Table__rowColumn{text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn:first-of-type,.ReactVirtualized__Table__rowColumn:first-of-type{margin-left:10px}.ReactVirtualized__Table__sortableHeaderColumn{cursor:pointer}.ReactVirtualized__Table__sortableHeaderIconContainer{align-items:center;display:flex}.ReactVirtualized__Table__sortableHeaderIcon{fill:currentColor;flex:0 0 24px;height:1em;width:1em} +/*# sourceMappingURL=main.110caa22.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/main.110caa22.css.map b/web-app/build/static/css/main.110caa22.css.map new file mode 100644 index 00000000000..91d4d2e84ca --- /dev/null +++ b/web-app/build/static/css/main.110caa22.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.110caa22.css","mappings":"AAAA,KAGE,kCAAmC,CACnC,iCAAkC,CAFlC,4BAAgC,CADhC,QAIF,CAEA,KACE,uEAEF,CAGA,4FAEE,uBAAwB,CACxB,QACF,CAGA,gCACE,yBACF,CCEA,oCACE,eAAgB,CAChB,wBAIF,CACA,kEAFE,kBAAmB,CAFnB,YAAa,CACb,kBAOF,CAEA,8CACE,oBAAqB,CACrB,cAAe,CAGf,eAAgB,CADhB,sBAAuB,CADvB,kBAGF,CAEA,2EAEE,iBAAkB,CAClB,WACF,CACA,oCACE,sBAAuB,CACvB,kBACF,CAEA,uGAEE,gBACF,CACA,+CACE,cACF,CAEA,sDAEE,kBAAmB,CADnB,YAEF,CACA,6CAIE,iBAAkB,CAHlB,aAAc,CACd,UAAW,CACX,SAEF","sources":["index.css","../node_modules/react-virtualized/source/styles.css"],"sourcesContent":["body {\n margin: 0;\n font-family: \"Inter\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\n/* Chrome, Safari, Edge, Opera */\ninput.removeArrows::-webkit-outer-spin-button,\ninput.removeArrows::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\ninput.removeArrows[type=\"number\"] {\n -moz-appearance: textfield;\n}\n","/* Collection default theme */\n\n.ReactVirtualized__Collection {\n}\n\n.ReactVirtualized__Collection__innerScrollContainer {\n}\n\n/* Grid default theme */\n\n.ReactVirtualized__Grid {\n}\n\n.ReactVirtualized__Grid__innerScrollContainer {\n}\n\n/* Table default theme */\n\n.ReactVirtualized__Table {\n}\n\n.ReactVirtualized__Table__Grid {\n}\n\n.ReactVirtualized__Table__headerRow {\n font-weight: 700;\n text-transform: uppercase;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ReactVirtualized__Table__row {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.ReactVirtualized__Table__headerTruncatedText {\n display: inline-block;\n max-width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ReactVirtualized__Table__headerColumn,\n.ReactVirtualized__Table__rowColumn {\n margin-right: 10px;\n min-width: 0px;\n}\n.ReactVirtualized__Table__rowColumn {\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ReactVirtualized__Table__headerColumn:first-of-type,\n.ReactVirtualized__Table__rowColumn:first-of-type {\n margin-left: 10px;\n}\n.ReactVirtualized__Table__sortableHeaderColumn {\n cursor: pointer;\n}\n\n.ReactVirtualized__Table__sortableHeaderIconContainer {\n display: flex;\n align-items: center;\n}\n.ReactVirtualized__Table__sortableHeaderIcon {\n flex: 0 0 24px;\n height: 1em;\n width: 1em;\n fill: currentColor;\n}\n\n/* List default theme */\n\n.ReactVirtualized__List {\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/css/main.49948cf4.css b/web-app/build/static/css/main.49948cf4.css deleted file mode 100644 index 2359daf5952..00000000000 --- a/web-app/build/static/css/main.49948cf4.css +++ /dev/null @@ -1,2 +0,0 @@ -.ReactVirtualized__Table__headerRow{font-weight:700;text-transform:uppercase}.ReactVirtualized__Table__headerRow,.ReactVirtualized__Table__row{align-items:center;display:flex;flex-direction:row}.ReactVirtualized__Table__headerTruncatedText{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn,.ReactVirtualized__Table__rowColumn{margin-right:10px;min-width:0}.ReactVirtualized__Table__rowColumn{text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn:first-of-type,.ReactVirtualized__Table__rowColumn:first-of-type{margin-left:10px}.ReactVirtualized__Table__sortableHeaderColumn{cursor:pointer}.ReactVirtualized__Table__sortableHeaderIconContainer{align-items:center;display:flex}.ReactVirtualized__Table__sortableHeaderIcon{fill:currentColor;flex:0 0 24px;height:1em;width:1em}.react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top}.react-grid-item img{pointer-events:none;-webkit-user-select:none;user-select:none}.react-grid-item.cssTransforms{transition-property:transform}.react-grid-item.resizing{will-change:width,height;z-index:1}.react-grid-item.react-draggable-dragging{transition:none;will-change:transform;z-index:3}.react-grid-item.dropping{visibility:hidden}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;-webkit-user-select:none;-o-user-select:none;user-select:none;z-index:2}.react-grid-item>.react-resizable-handle{height:20px;position:absolute;width:20px}.react-grid-item>.react-resizable-handle:after{border-bottom:2px solid rgba(0,0,0,.4);border-right:2px solid rgba(0,0,0,.4);bottom:3px;content:"";height:5px;position:absolute;right:3px;width:5px}.react-resizable-hide>.react-resizable-handle{display:none}.react-grid-item>.react-resizable-handle.react-resizable-handle-sw{bottom:0;cursor:sw-resize;left:0;transform:rotate(90deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-se{bottom:0;cursor:se-resize;right:0}.react-grid-item>.react-resizable-handle.react-resizable-handle-nw{cursor:nw-resize;left:0;top:0;transform:rotate(180deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-ne{cursor:ne-resize;right:0;top:0;transform:rotate(270deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-e,.react-grid-item>.react-resizable-handle.react-resizable-handle-w{cursor:ew-resize;margin-top:-10px;top:50%}.react-grid-item>.react-resizable-handle.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-n,.react-grid-item>.react-resizable-handle.react-resizable-handle-s{cursor:ns-resize;left:50%;margin-left:-10px}.react-grid-item>.react-resizable-handle.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}.react-resizable{position:relative}.react-resizable-handle{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgd2lkdGg9IjYiIGhlaWdodD0iNiI+PHBhdGggZD0iTTYgNkgwVjQuMmg0LjJWMEg2djZaIiBvcGFjaXR5PSIuMzAyIi8+PC9zdmc+);background-origin:content-box;background-position:100% 100%;background-repeat:no-repeat;box-sizing:border-box;height:20px;padding:0 3px 3px 0;position:absolute;width:20px}.react-resizable-handle-sw{bottom:0;cursor:sw-resize;left:0;transform:rotate(90deg)}.react-resizable-handle-se{bottom:0;cursor:se-resize;right:0}.react-resizable-handle-nw{cursor:nw-resize;left:0;top:0;transform:rotate(180deg)}.react-resizable-handle-ne{cursor:ne-resize;right:0;top:0;transform:rotate(270deg)}.react-resizable-handle-e,.react-resizable-handle-w{cursor:ew-resize;margin-top:-10px;top:50%}.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-resizable-handle-n,.react-resizable-handle-s{cursor:ns-resize;left:50%;margin-left:-10px}.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}input.removeArrows::-webkit-inner-spin-button,input.removeArrows::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input.removeArrows[type=number]{-moz-appearance:textfield} -/*# sourceMappingURL=main.49948cf4.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/main.49948cf4.css.map b/web-app/build/static/css/main.49948cf4.css.map deleted file mode 100644 index 0f2df7dfa43..00000000000 --- a/web-app/build/static/css/main.49948cf4.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/main.49948cf4.css","mappings":"AAwBA,oCACE,eAAgB,CAChB,wBAIF,CACA,kEAFE,kBAAmB,CAFnB,YAAa,CACb,kBAOF,CAEA,8CACE,oBAAqB,CACrB,cAAe,CAGf,eAAgB,CADhB,sBAAuB,CADvB,kBAGF,CAEA,2EAEE,iBAAkB,CAClB,WACF,CACA,oCACE,sBAAuB,CACvB,kBACF,CAEA,uGAEE,gBACF,CACA,+CACE,cACF,CAEA,sDAEE,kBAAmB,CADnB,YAEF,CACA,6CAIE,iBAAkB,CAHlB,aAAc,CACd,UAAW,CACX,SAEF,CCxEA,mBACE,iBAAkB,CAClB,0BACF,CACA,iBACE,uBAA0B,CAC1B,4BACF,CACA,qBACE,mBAAoB,CACpB,wBAAiB,CAAjB,gBACF,CACA,+BACE,6BACF,CACA,0BAEE,wBAA0B,CAD1B,SAEF,CAEA,0CACE,eAAgB,CAEhB,qBAAsB,CADtB,SAEF,CAEA,0BACE,iBACF,CAEA,wCACE,cAAe,CACf,UAAY,CACZ,uBAA0B,CAE1B,wBAAyB,CAGzB,mBAAoB,CACpB,gBAAiB,CALjB,SAMF,CAEA,yCAGE,WAAY,CAFZ,iBAAkB,CAClB,UAEF,CAEA,+CAQE,sCAA2C,CAD3C,qCAA0C,CAH1C,UAAW,CAHX,UAAW,CAKX,UAAW,CAJX,iBAAkB,CAClB,SAAU,CAEV,SAIF,CAEA,8CACE,YACF,CAEA,mEACE,QAAS,CAET,gBAAiB,CADjB,MAAO,CAEP,uBACF,CACA,mEACE,QAAS,CAET,gBAAiB,CADjB,OAEF,CACA,mEAGE,gBAAiB,CADjB,MAAO,CADP,KAAM,CAGN,wBACF,CACA,mEAGE,gBAAiB,CADjB,OAAQ,CADR,KAAM,CAGN,wBACF,CACA,oIAIE,gBAAiB,CADjB,gBAAiB,CADjB,OAGF,CACA,kEACE,MAAO,CACP,wBACF,CACA,kEACE,OAAQ,CACR,wBACF,CACA,oIAIE,gBAAiB,CAFjB,QAAS,CACT,iBAEF,CACA,kEACE,KAAM,CACN,wBACF,CACA,kEACE,QAAS,CACT,uBACF,CCjHA,iBACE,iBACF,CACA,wBAOE,wPAAuY,CAFvY,6BAA8B,CAG9B,6BAAiC,CAJjC,2BAA4B,CAE5B,qBAAsB,CAHtB,WAAY,CAMZ,mBAAoB,CARpB,iBAAkB,CAClB,UAQF,CACA,2BACE,QAAS,CAET,gBAAiB,CADjB,MAAO,CAEP,uBACF,CACA,2BACE,QAAS,CAET,gBAAiB,CADjB,OAEF,CACA,2BAGE,gBAAiB,CADjB,MAAO,CADP,KAAM,CAGN,wBACF,CACA,2BAGE,gBAAiB,CADjB,OAAQ,CADR,KAAM,CAGN,wBACF,CACA,oDAIE,gBAAiB,CADjB,gBAAiB,CADjB,OAGF,CACA,0BACE,MAAO,CACP,wBACF,CACA,0BACE,OAAQ,CACR,wBACF,CACA,oDAIE,gBAAiB,CAFjB,QAAS,CACT,iBAEF,CACA,0BACE,KAAM,CACN,wBACF,CACA,0BACE,QAAS,CACT,uBACF,CChEA,KAGE,kCAAmC,CACnC,iCAAkC,CAFlC,4BAAgC,CADhC,QAIF,CAEA,KACE,uEAEF,CAGA,4FAEE,uBAAwB,CACxB,QACF,CAGA,gCACE,yBACF","sources":["../node_modules/react-virtualized/source/styles.css","../node_modules/react-grid-layout/css/styles.css","../node_modules/react-resizable/css/styles.css","index.css"],"sourcesContent":["/* Collection default theme */\n\n.ReactVirtualized__Collection {\n}\n\n.ReactVirtualized__Collection__innerScrollContainer {\n}\n\n/* Grid default theme */\n\n.ReactVirtualized__Grid {\n}\n\n.ReactVirtualized__Grid__innerScrollContainer {\n}\n\n/* Table default theme */\n\n.ReactVirtualized__Table {\n}\n\n.ReactVirtualized__Table__Grid {\n}\n\n.ReactVirtualized__Table__headerRow {\n font-weight: 700;\n text-transform: uppercase;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ReactVirtualized__Table__row {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.ReactVirtualized__Table__headerTruncatedText {\n display: inline-block;\n max-width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ReactVirtualized__Table__headerColumn,\n.ReactVirtualized__Table__rowColumn {\n margin-right: 10px;\n min-width: 0px;\n}\n.ReactVirtualized__Table__rowColumn {\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ReactVirtualized__Table__headerColumn:first-of-type,\n.ReactVirtualized__Table__rowColumn:first-of-type {\n margin-left: 10px;\n}\n.ReactVirtualized__Table__sortableHeaderColumn {\n cursor: pointer;\n}\n\n.ReactVirtualized__Table__sortableHeaderIconContainer {\n display: flex;\n align-items: center;\n}\n.ReactVirtualized__Table__sortableHeaderIcon {\n flex: 0 0 24px;\n height: 1em;\n width: 1em;\n fill: currentColor;\n}\n\n/* List default theme */\n\n.ReactVirtualized__List {\n}\n",".react-grid-layout {\n position: relative;\n transition: height 200ms ease;\n}\n.react-grid-item {\n transition: all 200ms ease;\n transition-property: left, top;\n}\n.react-grid-item img {\n pointer-events: none;\n user-select: none; \n}\n.react-grid-item.cssTransforms {\n transition-property: transform;\n}\n.react-grid-item.resizing {\n z-index: 1;\n will-change: width, height;\n}\n\n.react-grid-item.react-draggable-dragging {\n transition: none;\n z-index: 3;\n will-change: transform;\n}\n\n.react-grid-item.dropping {\n visibility: hidden;\n}\n\n.react-grid-item.react-grid-placeholder {\n background: red;\n opacity: 0.2;\n transition-duration: 100ms;\n z-index: 2;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n user-select: none;\n}\n\n.react-grid-item > .react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n}\n\n.react-grid-item > .react-resizable-handle::after {\n content: \"\";\n position: absolute;\n right: 3px;\n bottom: 3px;\n width: 5px;\n height: 5px;\n border-right: 2px solid rgba(0, 0, 0, 0.4);\n border-bottom: 2px solid rgba(0, 0, 0, 0.4);\n}\n\n.react-resizable-hide > .react-resizable-handle {\n display: none;\n}\n\n.react-grid-item > .react-resizable-handle.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}\n",".react-resizable {\n position: relative;\n}\n.react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n background-repeat: no-repeat;\n background-origin: content-box;\n box-sizing: border-box;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+');\n background-position: bottom right;\n padding: 0 3px 3px 0;\n}\n.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-resizable-handle-w,\n.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-resizable-handle-n,\n.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}","body {\n margin: 0;\n font-family: \"Inter\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\n/* Chrome, Safari, Edge, Opera */\ninput.removeArrows::-webkit-outer-spin-button,\ninput.removeArrows::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\ninput.removeArrows[type=\"number\"] {\n -moz-appearance: textfield;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/112.1e62425a.chunk.js b/web-app/build/static/js/112.1e62425a.chunk.js new file mode 100644 index 00000000000..f4e3a080431 --- /dev/null +++ b/web-app/build/static/js/112.1e62425a.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[112],{9505:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(2791),s=t(1207);const o=(e,n)=>{const[t,o]=(0,a.useState)(!1);return[t,(t,a,r,c)=>{o(!0),s.Z.invoke(t,a,r,c).then((n=>{o(!1),e(n)})).catch((e=>{o(!1),n(e)}))}]}},2112:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});var a=t(2791),s=t(9945),o=t(9505),r=t(3508),c=t(7995),i=t(1320),l=t(184);const p=e=>{let{deleteOpen:n,selectedPVC:t,closeDeleteModalAndRefresh:p}=e;const d=(0,i.TL)(),[m,h]=(0,a.useState)(""),[u,C]=(0,o.Z)((()=>p(!0)),(e=>d((0,c.Ih)(e))));return(0,l.jsx)(r.Z,{title:"Delete PVC",confirmText:"Delete",isOpen:n,titleIcon:(0,l.jsx)(s.NvT,{}),isLoading:u,onConfirm:()=>{m===t.name?C("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pvc/").concat(t.name)):d((0,c.Ih)({errorMessage:"PVC name is incorrect",detailedError:""}))},onClose:()=>p(!1),confirmButtonProps:{disabled:m!==t.name||u},confirmationContent:(0,l.jsxs)(a.Fragment,{children:["To continue please type ",(0,l.jsx)("b",{children:t.name})," in the box.",(0,l.jsx)(s.rjZ,{item:!0,xs:12,sx:{marginTop:15},children:(0,l.jsx)(s.Wzg,{id:"retype-PVC",name:"retype-PVC",onChange:e=>{h(e.target.value)},label:"",value:m})})]})})}}}]); +//# sourceMappingURL=112.1e62425a.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/112.1e62425a.chunk.js.map b/web-app/build/static/js/112.1e62425a.chunk.js.map new file mode 100644 index 00000000000..d6f4daec619 --- /dev/null +++ b/web-app/build/static/js/112.1e62425a.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/112.1e62425a.chunk.js","mappings":"0IAQA,MAuBA,EAvBeA,CACbC,EACAC,KAEA,MAAOC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAkB,GAgBpD,MAAO,CAACF,EAdQG,CAACC,EAAgBC,EAAaC,EAAYC,KACxDN,GAAa,GACbO,EAAAA,EACGC,OAAOL,EAAQC,EAAKC,EAAMC,GAC1BG,MAAMC,IACLV,GAAa,GACbH,EAAUa,EAAI,IAEfC,OAAOC,IACNZ,GAAa,GACbF,EAAQc,EAAI,GACZ,EAGqB,C,wHCK7B,MA+DA,EA/DkBC,IAIC,IAJA,WACjBC,EAAU,YACVC,EAAW,2BACXC,GACWH,EACX,MAAMI,GAAWC,EAAAA,EAAAA,OACVC,EAAWC,IAAgBnB,EAAAA,EAAAA,UAAS,KAOpCoB,EAAeC,IAAmB1B,EAAAA,EAAAA,IALpB2B,IAAMP,GAA2B,KAClCJ,GAClBK,GAASO,EAAAA,EAAAA,IAAqBZ,MAqBhC,OACEa,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,aACLC,YAAa,SACbC,OAAQf,EACRgB,WAAWL,EAAAA,EAAAA,KAACM,EAAAA,IAAiB,IAC7BhC,UAAWsB,EACXW,UAvBoBC,KAClBd,IAAcJ,EAAYmB,KAS9BZ,EACE,SAAS,sBAADa,OACcpB,EAAYqB,UAAS,aAAAD,OAAYpB,EAAYsB,OAAM,SAAAF,OAAQpB,EAAYmB,OAV7FjB,GACEO,EAAAA,EAAAA,IAAqB,CACnBc,aAAc,wBACdC,cAAe,KAQpB,EAWCC,QA5BYA,IAAMxB,GAA2B,GA6B7CyB,mBAAoB,CAClBC,SAAUvB,IAAcJ,EAAYmB,MAAQb,GAE9CsB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,CAAC,4BACgBrB,EAAAA,EAAAA,KAAA,KAAAqB,SAAI/B,EAAYmB,OAAS,gBACjDT,EAAAA,EAAAA,KAACsB,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAIC,GAAI,CAAEC,UAAW,IAAKL,UACvCrB,EAAAA,EAAAA,KAAC2B,EAAAA,IAAQ,CACPC,GAAG,aACHnB,KAAK,aACLoB,SAAWC,IACTnC,EAAamC,EAAMC,OAAOC,MAAM,EAElCC,MAAM,GACND,MAAOtC,UAKf,C","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Tenants/TenantDetails/DeletePVC.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { Grid, InputBox } from \"mds\";\n\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { IStoragePVCs } from \"../../Storage/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IDeletePVC {\n deleteOpen: boolean;\n selectedPVC: IStoragePVCs;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeletePVC = ({\n deleteOpen,\n selectedPVC,\n closeDeleteModalAndRefresh,\n}: IDeletePVC) => {\n const dispatch = useAppDispatch();\n const [retypePVC, setRetypePVC] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePVC !== selectedPVC.name) {\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"PVC name is incorrect\",\n detailedError: \"\",\n }),\n );\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPVC.namespace}/tenants/${selectedPVC.tenant}/pvc/${selectedPVC.name}`,\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePVC !== selectedPVC.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPVC.name} in the box.\n \n ) => {\n setRetypePVC(event.target.value);\n }}\n label=\"\"\n value={retypePVC}\n />\n \n \n }\n />\n );\n};\n\nexport default DeletePVC;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","deleteOpen","selectedPVC","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypePVC","setRetypePVC","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","tenant","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","Grid","item","xs","sx","marginTop","InputBox","id","onChange","event","target","value","label"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/112.36b0c5ce.chunk.js b/web-app/build/static/js/112.36b0c5ce.chunk.js deleted file mode 100644 index 6b4073093c3..00000000000 --- a/web-app/build/static/js/112.36b0c5ce.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[112],{9505:function(e,n,t){var a=t(29439),c=t(72791),o=t(81207);n.Z=function(e,n){var t=(0,c.useState)(!1),i=(0,a.Z)(t,2),r=i[0],s=i[1];return[r,function(t,a,c,i){s(!0),o.Z.invoke(t,a,c,i).then((function(n){s(!1),e(n)})).catch((function(e){s(!1),n(e)}))}]}},32112:function(e,n,t){t.r(n);var a=t(29439),c=t(72791),o=t(51691),i=t(21435),r=t(61889),s=t(9505),u=t(40306),l=t(75952),f=t(87995),p=t(41320),d=t(80184);n.default=function(e){var n=e.deleteOpen,t=e.selectedPVC,h=e.closeDeleteModalAndRefresh,m=(0,p.TL)(),C=(0,c.useState)(""),v=(0,a.Z)(C,2),Z=v[0],x=v[1],b=(0,s.Z)((function(){return h(!0)}),(function(e){return m((0,f.Ih)(e))})),P=(0,a.Z)(b,2),j=P[0],k=P[1];return(0,d.jsx)(u.Z,{title:"Delete PVC",confirmText:"Delete",isOpen:n,titleIcon:(0,d.jsx)(l.NvT,{}),isLoading:j,onConfirm:function(){Z===t.name?k("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pvc/").concat(t.name)):m((0,f.Ih)({errorMessage:"PVC name is incorrect",detailedError:""}))},onClose:function(){return h(!1)},confirmButtonProps:{disabled:Z!==t.name||j},confirmationContent:(0,d.jsxs)(o.Z,{children:["To continue please type ",(0,d.jsx)("b",{children:t.name})," in the box.",(0,d.jsx)(r.ZP,{item:!0,xs:12,children:(0,d.jsx)(i.Z,{id:"retype-PVC",name:"retype-PVC",onChange:function(e){x(e.target.value)},label:"",value:Z})})]})})}}}]); -//# sourceMappingURL=112.36b0c5ce.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/112.36b0c5ce.chunk.js.map b/web-app/build/static/js/112.36b0c5ce.chunk.js.map deleted file mode 100644 index bdd5ee4363b..00000000000 --- a/web-app/build/static/js/112.36b0c5ce.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/112.36b0c5ce.chunk.js","mappings":"4IA+BA,IAvBe,SACbA,EACAC,GAEA,IAAAC,GAAkCC,EAAAA,EAAAA,WAAkB,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnDI,EAASF,EAAA,GAAEG,EAAYH,EAAA,GAgB9B,MAAO,CAACE,EAdQ,SAACE,EAAgBC,EAAaC,EAAYC,GACxDJ,GAAa,GACbK,EAAAA,EACGC,OAAOL,EAAQC,EAAKC,EAAMC,GAC1BG,MAAK,SAACC,GACLR,GAAa,GACbP,EAAUe,EACZ,IACCC,OAAM,SAACC,GACNV,GAAa,GACbN,EAAQgB,EACV,GACJ,EAGF,C,2JCqEA,UA/DkB,SAAHC,GAII,IAHjBC,EAAUD,EAAVC,WACAC,EAAWF,EAAXE,YACAC,EAA0BH,EAA1BG,2BAEMC,GAAWC,EAAAA,EAAAA,MACjBrB,GAAkCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAvCsB,EAASpB,EAAA,GAAEqB,EAAYrB,EAAA,GAO9BsB,GAAyCC,EAAAA,EAAAA,IALpB,WAAH,OAASN,GAA2B,EAAM,IACzC,SAACJ,GAAyB,OAC3CK,GAASM,EAAAA,EAAAA,IAAqBX,GAAM,IAGmCY,GAAAxB,EAAAA,EAAAA,GAAAqB,EAAA,GAAlEI,EAAaD,EAAA,GAAEE,EAAeF,EAAA,GAkBrC,OACEG,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,aACLC,YAAa,SACbC,OAAQjB,EACRkB,WAAWL,EAAAA,EAAAA,KAACM,EAAAA,IAAiB,IAC7BhC,UAAWwB,EACXS,UAvBoB,WAClBf,IAAcJ,EAAYoB,KAS9BT,EACE,SAAS,sBAADU,OACcrB,EAAYsB,UAAS,aAAAD,OAAYrB,EAAYuB,OAAM,SAAAF,OAAQrB,EAAYoB,OAV7FlB,GACEM,EAAAA,EAAAA,IAAqB,CACnBgB,aAAc,wBACdC,cAAe,KASvB,EAUIC,QA5BY,WAAH,OAASzB,GAA2B,EAAO,EA6BpD0B,mBAAoB,CAClBC,SAAUxB,IAAcJ,EAAYoB,MAAQV,GAE9CmB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,EAAiB,CAAAC,SAAA,CAAC,4BACOpB,EAAAA,EAAAA,KAAA,KAAAoB,SAAIhC,EAAYoB,OAAS,gBACjDR,EAAAA,EAAAA,KAACqB,EAAAA,GAAI,CAACC,MAAI,EAACC,GAAI,GAAGH,UAChBpB,EAAAA,EAAAA,KAACwB,EAAAA,EAAe,CACdC,GAAG,aACHjB,KAAK,aACLkB,SAAU,SAACC,GACTlC,EAAakC,EAAMC,OAAOC,MAC5B,EACAC,MAAM,GACND,MAAOrC,UAOrB,C","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Tenants/TenantDetails/DeletePVC.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { DialogContentText } from \"@mui/material\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@mui/material/Grid\";\n\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { IStoragePVCs } from \"../../Storage/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IDeletePVC {\n deleteOpen: boolean;\n selectedPVC: IStoragePVCs;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeletePVC = ({\n deleteOpen,\n selectedPVC,\n closeDeleteModalAndRefresh,\n}: IDeletePVC) => {\n const dispatch = useAppDispatch();\n const [retypePVC, setRetypePVC] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePVC !== selectedPVC.name) {\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"PVC name is incorrect\",\n detailedError: \"\",\n }),\n );\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPVC.namespace}/tenants/${selectedPVC.tenant}/pvc/${selectedPVC.name}`,\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePVC !== selectedPVC.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPVC.name} in the box.\n \n ) => {\n setRetypePVC(event.target.value);\n }}\n label=\"\"\n value={retypePVC}\n />\n \n \n }\n />\n );\n};\n\nexport default DeletePVC;\n"],"names":["onSuccess","onError","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","method","url","data","headers","api","invoke","then","res","catch","err","_ref","deleteOpen","selectedPVC","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypePVC","setRetypePVC","_useApi","useApi","setErrorSnackMessage","_useApi2","deleteLoading","invokeDeleteApi","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","name","concat","namespace","tenant","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","DialogContentText","children","Grid","item","xs","InputBoxWrapper","id","onChange","event","target","value","label"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/140.2b6604a2.chunk.js b/web-app/build/static/js/140.2b6604a2.chunk.js deleted file mode 100644 index db1bd173976..00000000000 --- a/web-app/build/static/js/140.2b6604a2.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[140],{65140:function(e,n,a){a.r(n);var t=a(29439),c=a(1413),r=a(72791),o=a(57689),i=a(11087),s=a(11135),l=a(25787),u=a(64554),d=a(13400),p=a(23814),h=a(77608),m=a(75952),f=a(47974),x=a(80184);n.default=(0,l.Z)((function(e){return(0,s.Z)((0,c.Z)({breadcrumLink:{textDecoration:"none",color:"black"},iframeStyle:{border:0,position:"absolute",height:"calc(100vh - 77px)",width:"100%"},divContainer:{position:"absolute",left:0,top:80,height:"calc(100vh - 81px)",width:"100%",borderTop:"1px solid #dedede"},loader:{width:100,margin:"auto",marginTop:80}},p.Bz))}))((function(e){var n=e.classes,a=(0,o.s0)(),c=(0,o.UO)(),s=(0,r.useState)(!0),l=(0,t.Z)(s,2),p=l[0],v=l[1],j=c.tenantName||"",b=c.tenantNamespace||"",g=r.useRef(null);return(0,x.jsxs)(r.Fragment,{children:[(0,x.jsx)(u.Z,{children:(0,x.jsx)(f.Z,{label:(0,x.jsxs)(r.Fragment,{children:[(0,x.jsx)(i.rU,{to:"/tenants",className:n.breadcrumLink,children:"Tenants"})," > ",(0,x.jsx)(i.rU,{to:"/namespaces/".concat(b,"/tenants/").concat(j),className:n.breadcrumLink,children:j})," > Management"]}),actions:(0,x.jsxs)(r.Fragment,{children:[(0,x.jsx)(d.Z,{color:"primary","aria-label":"Refresh List",component:"span",onClick:function(){if(null!==g&&null!==g.current&&null!==g.current.contentDocument){var e=g.current.contentDocument.location.toString(),n="&";if(e.indexOf("?")<0&&(n="?"),e.indexOf("cp=y")<0){var a="".concat(e).concat(n,"cp=y");g.current.contentDocument.location.replace(a)}else g.current.contentDocument.location.reload()}},size:"large",children:(0,x.jsx)(m.DuK,{})}),(0,x.jsx)(d.Z,{color:"primary","aria-label":"Refresh List",component:"span",onClick:function(){a("/namespaces/".concat(b,"/tenants/").concat(j))},size:"large",children:(0,x.jsx)(h.Z,{})})]})})}),(0,x.jsxs)("div",{className:n.divContainer,children:[p&&(0,x.jsx)("div",{className:n.loader,children:(0,x.jsx)(m.aNw,{})}),(0,x.jsx)("iframe",{ref:g,className:n.iframeStyle,title:"metrics",src:"/api/hop/".concat(b,"/").concat(j,"/?cp=y"),onLoad:function(e){v(!1)}})]})]})}))},77608:function(e,n,a){var t=a(64836);n.Z=void 0;var c=t(a(45649)),r=a(80184),o=(0,c.default)((0,r.jsx)("path",{d:"M10.09 15.59 11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"ExitToApp");n.Z=o}}]); -//# sourceMappingURL=140.2b6604a2.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/140.2b6604a2.chunk.js.map b/web-app/build/static/js/140.2b6604a2.chunk.js.map deleted file mode 100644 index f38d37bc9d0..00000000000 --- a/web-app/build/static/js/140.2b6604a2.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/140.2b6604a2.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/hop/Hop.tsx","../node_modules/@mui/icons-material/ExitToApp.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Box, IconButton } from \"@mui/material\";\nimport { containerForHeader } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport ExitToAppIcon from \"@mui/icons-material/ExitToApp\";\nimport { Loader, RefreshIcon } from \"mds\";\nimport PageHeaderWrapper from \"../../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\ninterface IHopSimple {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n iframeStyle: {\n border: 0,\n position: \"absolute\",\n height: \"calc(100vh - 77px)\",\n width: \"100%\",\n },\n divContainer: {\n position: \"absolute\",\n left: 0,\n top: 80,\n height: \"calc(100vh - 81px)\",\n width: \"100%\",\n borderTop: \"1px solid #dedede\",\n },\n loader: {\n width: 100,\n margin: \"auto\",\n marginTop: 80,\n },\n\n ...containerForHeader,\n });\n\nconst Hop = ({ classes }: IHopSimple) => {\n const navigate = useNavigate();\n const params = useParams();\n\n const [loading, setLoading] = useState(true);\n\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n const consoleFrame = React.useRef(null);\n\n return (\n \n \n \n \n Tenants\n \n {` > `}\n \n {tenantName}\n \n {` > Management`}\n \n }\n actions={\n \n {\n if (\n consoleFrame !== null &&\n consoleFrame.current !== null &&\n consoleFrame.current.contentDocument !== null\n ) {\n const loc =\n consoleFrame.current.contentDocument.location.toString();\n\n let add = \"&\";\n\n if (loc.indexOf(\"?\") < 0) {\n add = `?`;\n }\n\n if (loc.indexOf(\"cp=y\") < 0) {\n const next = `${loc}${add}cp=y`;\n consoleFrame.current.contentDocument.location.replace(\n next,\n );\n } else {\n consoleFrame.current.contentDocument.location.reload();\n }\n }\n }}\n size=\"large\"\n >\n \n \n {\n navigate(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}`,\n );\n }}\n size=\"large\"\n >\n \n \n \n }\n />\n \n
\n {loading && (\n
\n \n
\n )}\n {\n setLoading(false);\n }}\n />\n
\n \n );\n};\n\nexport default withStyles(styles)(Hop);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M10.09 15.59 11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'ExitToApp');\nexports.default = _default;"],"names":["withStyles","theme","createStyles","_objectSpread","breadcrumLink","textDecoration","color","iframeStyle","border","position","height","width","divContainer","left","top","borderTop","loader","margin","marginTop","containerForHeader","_ref","classes","navigate","useNavigate","params","useParams","_useState","useState","_useState2","_slicedToArray","loading","setLoading","tenantName","tenantNamespace","consoleFrame","React","_jsxs","Fragment","children","_jsx","Box","PageHeaderWrapper","label","Link","to","className","concat","actions","IconButton","component","onClick","current","contentDocument","loc","location","toString","add","indexOf","next","replace","reload","size","RefreshIcon","ExitToAppIcon","Loader","ref","title","src","onLoad","val","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/140.49921fb9.chunk.js b/web-app/build/static/js/140.49921fb9.chunk.js new file mode 100644 index 00000000000..5736f54539d --- /dev/null +++ b/web-app/build/static/js/140.49921fb9.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[140],{5140:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});var c=t(2791),a=t(9945),o=t(7689),s=t(1087),r=t(6181),l=t.n(r),i=t(6444),u=t(9435),d=t(184);const h=i.ZP.div((e=>{let{theme:n}=e;return{position:"absolute",left:0,top:80,height:"calc(100vh - 81px)",width:"100%",borderTop:"1px solid ".concat(l()(n,"borderColor","#E2E2E2")),"& .loader":{width:100,margin:"auto",marginTop:80},"& .iframeStyle":{border:0,position:"absolute",height:"calc(100vh - 77px)",width:"100%"}}})),p=()=>{const e=(0,o.s0)(),n=(0,o.UO)(),[t,r]=(0,c.useState)(!0),l=n.tenantName||"",i=n.tenantNamespace||"",p=c.useRef(null);return(0,d.jsxs)(c.Fragment,{children:[(0,d.jsx)(u.Z,{label:(0,d.jsxs)(c.Fragment,{children:[(0,d.jsx)(s.rU,{to:"/tenants",children:"Tenants"})," > ",(0,d.jsx)(s.rU,{to:"/namespaces/".concat(i,"/tenants/").concat(l),children:l})," > Management"]}),actions:(0,d.jsxs)(c.Fragment,{children:[(0,d.jsx)(a.hU,{onClick:()=>{if(null!==p&&null!==p.current&&null!==p.current.contentDocument){const e=p.current.contentDocument.location.toString();let n="&";if(e.indexOf("?")<0&&(n="?"),e.indexOf("cp=y")<0){const t="".concat(e).concat(n,"cp=y");p.current.contentDocument.location.replace(t)}else p.current.contentDocument.location.reload()}},size:"large",children:(0,d.jsx)(a.DuK,{})}),(0,d.jsx)(a.hU,{onClick:()=>{e("/namespaces/".concat(i,"/tenants/").concat(l))},size:"large",children:(0,d.jsx)(a.wXn,{})})]})}),(0,d.jsxs)(h,{children:[t&&(0,d.jsx)(a.xuv,{className:"loader",children:(0,d.jsx)(a.aNw,{})}),(0,d.jsx)("iframe",{ref:p,className:"iframeStyle",title:"metrics",src:"/api/hop/".concat(i,"/").concat(l,"/?cp=y"),onLoad:e=>{r(!1)}})]})]})}}}]); +//# sourceMappingURL=140.49921fb9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/140.49921fb9.chunk.js.map b/web-app/build/static/js/140.49921fb9.chunk.js.map new file mode 100644 index 00000000000..4edadc601f5 --- /dev/null +++ b/web-app/build/static/js/140.49921fb9.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/140.49921fb9.chunk.js","mappings":"2NAuBA,MAAMA,EAAeC,EAAAA,GAAOC,KAAIC,IAAA,IAAC,MAAEC,GAAOD,EAAA,MAAM,CAC9CE,SAAU,WACVC,KAAM,EACNC,IAAK,GACLC,OAAQ,qBACRC,MAAO,OACPC,UAAU,aAADC,OAAeC,IAAIR,EAAO,cAAe,YAClD,YAAa,CACXK,MAAO,IACPI,OAAQ,OACRC,UAAW,IAEb,iBAAkB,CAChBC,OAAQ,EACRV,SAAU,WACVG,OAAQ,qBACRC,MAAO,QAEV,IAwFD,EAtFYO,KACV,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAASC,EAAAA,EAAAA,OAERC,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,GAE1CC,EAAaL,EAAOK,YAAc,GAClCC,EAAkBN,EAAOM,iBAAmB,GAC5CC,EAAeC,EAAAA,OAAgC,MAErD,OACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,EAAiB,CAChBC,OACEL,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACG,EAAAA,GAAI,CAACC,GAAI,WAAWL,SAAC,YAAc,OAEpCC,EAAAA,EAAAA,KAACG,EAAAA,GAAI,CAACC,GAAE,eAAAxB,OAAiBc,EAAe,aAAAd,OAAYa,GAAaM,SAC9DN,IACI,mBAIXY,SACER,EAAAA,EAAAA,MAACD,EAAAA,SAAc,CAAAG,SAAA,EACbC,EAAAA,EAAAA,KAACM,EAAAA,GAAU,CACTC,QAASA,KACP,GACmB,OAAjBZ,GACyB,OAAzBA,EAAaa,SAC4B,OAAzCb,EAAaa,QAAQC,gBACrB,CACA,MAAMC,EACJf,EAAaa,QAAQC,gBAAgBE,SAASC,WAEhD,IAAIC,EAAM,IAMV,GAJIH,EAAII,QAAQ,KAAO,IACrBD,EAAG,KAGDH,EAAII,QAAQ,QAAU,EAAG,CAC3B,MAAMC,EAAI,GAAAnC,OAAM8B,GAAG9B,OAAGiC,EAAG,QACzBlB,EAAaa,QAAQC,gBAAgBE,SAASK,QAAQD,EACxD,MACEpB,EAAaa,QAAQC,gBAAgBE,SAASM,QAElD,GAEFC,KAAK,QAAOnB,UAEZC,EAAAA,EAAAA,KAACmB,EAAAA,IAAW,OAEdnB,EAAAA,EAAAA,KAACM,EAAAA,GAAU,CACTC,QAASA,KACPrB,EAAS,eAADN,OACSc,EAAe,aAAAd,OAAYa,GAC3C,EAEHyB,KAAK,QAAOnB,UAEZC,EAAAA,EAAAA,KAACoB,EAAAA,IAAS,YAKlBvB,EAAAA,EAAAA,MAAC5B,EAAY,CAAA8B,SAAA,CACVT,IACCU,EAAAA,EAAAA,KAACqB,EAAAA,IAAG,CAACC,UAAW,SAASvB,UACvBC,EAAAA,EAAAA,KAACuB,EAAAA,IAAM,OAGXvB,EAAAA,EAAAA,KAAA,UACEwB,IAAK7B,EACL2B,UAAW,cACXG,MAAO,UACPC,IAAG,YAAA9C,OAAcc,EAAe,KAAAd,OAAIa,EAAU,UAC9CkC,OAASC,IACPrC,GAAW,EAAM,SAId,C","sources":["screens/Console/Tenants/TenantDetails/hop/Hop.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { Box, IconButton, Loader, LoginIcon, RefreshIcon } from \"mds\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport PageHeaderWrapper from \"../../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst HopContainer = styled.div(({ theme }) => ({\n position: \"absolute\",\n left: 0,\n top: 80,\n height: \"calc(100vh - 81px)\",\n width: \"100%\",\n borderTop: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& .loader\": {\n width: 100,\n margin: \"auto\",\n marginTop: 80,\n },\n \"& .iframeStyle\": {\n border: 0,\n position: \"absolute\",\n height: \"calc(100vh - 77px)\",\n width: \"100%\",\n },\n}));\n\nconst Hop = () => {\n const navigate = useNavigate();\n const params = useParams();\n\n const [loading, setLoading] = useState(true);\n\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n const consoleFrame = React.useRef(null);\n\n return (\n \n \n Tenants\n {` > `}\n \n {tenantName}\n \n {` > Management`}\n \n }\n actions={\n \n {\n if (\n consoleFrame !== null &&\n consoleFrame.current !== null &&\n consoleFrame.current.contentDocument !== null\n ) {\n const loc =\n consoleFrame.current.contentDocument.location.toString();\n\n let add = \"&\";\n\n if (loc.indexOf(\"?\") < 0) {\n add = `?`;\n }\n\n if (loc.indexOf(\"cp=y\") < 0) {\n const next = `${loc}${add}cp=y`;\n consoleFrame.current.contentDocument.location.replace(next);\n } else {\n consoleFrame.current.contentDocument.location.reload();\n }\n }\n }}\n size=\"large\"\n >\n \n \n {\n navigate(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}`,\n );\n }}\n size=\"large\"\n >\n \n \n \n }\n />\n \n {loading && (\n \n \n \n )}\n {\n setLoading(false);\n }}\n />\n \n \n );\n};\n\nexport default Hop;\n"],"names":["HopContainer","styled","div","_ref","theme","position","left","top","height","width","borderTop","concat","get","margin","marginTop","border","Hop","navigate","useNavigate","params","useParams","loading","setLoading","useState","tenantName","tenantNamespace","consoleFrame","React","_jsxs","Fragment","children","_jsx","PageHeaderWrapper","label","Link","to","actions","IconButton","onClick","current","contentDocument","loc","location","toString","add","indexOf","next","replace","reload","size","RefreshIcon","LoginIcon","Box","className","Loader","ref","title","src","onLoad","val"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/145.96ed8557.chunk.js b/web-app/build/static/js/145.96ed8557.chunk.js new file mode 100644 index 00000000000..2fa87a3958e --- /dev/null +++ b/web-app/build/static/js/145.96ed8557.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[145],{9145:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});var i=t(2791),s=t(9945),o=t(9434),a=t(1320),c=t(6444),l=t(9779),r=t(1087),x=t(6181),d=t.n(x),m=t(5248),u=t(7454),f=t(184);const h=c.ZP.div((e=>{let{theme:n}=e;return{"& .licenseInfoValue":{textTransform:"none",fontSize:14,fontWeight:"bold"},"&.licenseContainer":{position:"relative",padding:"20px 52px 0px 28px",background:d()(n,"signalColors.info","#2781B0"),boxShadow:"0px 3px 7px #00000014","& h2":{color:d()(n,"bgColor","#fff"),marginBottom:67},"& a":{textDecoration:"none"},"& h3":{color:d()(n,"bgColor","#fff"),marginBottom:"30px",fontWeight:"bold"},"& h6":{color:"#FFFFFF !important"}},"& .licenseInfo":{color:d()(n,"bgColor","#fff"),position:"relative"},"& .licenseInfoTitle":{textTransform:"none",color:d()(n,"mutedText","#87888d"),fontSize:11},"& .verifiedIcon":{width:96,position:"absolute",right:0,bottom:29},"& .noUnderLine":{textDecoration:"none"}}})),v=e=>{var n,t;let{tenant:o,loadingActivateProduct:a,loadingLicenseInfo:c,licenseInfo:x,activateProduct:d}=e;const v=null!==o&&void 0!==o&&o.subnet_license?l.ou.fromISO(null===(n=o.subnet_license)||void 0===n?void 0:n.expires_at):l.ou.now();return(0,f.jsx)(h,{className:o&&o.subnet_license?"licenseContainer":"",children:o&&o.subnet_license?(0,f.jsx)(i.Fragment,{children:(0,f.jsxs)(s.rjZ,{container:!0,className:"licenseInfo",children:[(0,f.jsxs)(s.rjZ,{item:!0,xs:6,children:[(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"License"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:"Commercial License"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Organization"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:o.subnet_license.organization}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Registered Capacity"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:(0,m.ae)((1099511627776*((null===(t=o.subnet_license)||void 0===t?void 0:t.storage_capacity)||0)).toString(10))}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Expiry Date"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:v.toFormat("yyyy-MM-dd")})]}),(0,f.jsxs)(s.rjZ,{item:!0,xs:6,children:[(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Subscription Plan"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:o.subnet_license.plan}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Requestor"}),(0,f.jsx)(s.xuv,{sx:{marginBottom:12},className:"licenseInfoValue",children:o.subnet_license.email})]}),(0,f.jsx)("img",{className:"verifiedIcon",src:"/verified.svg",alt:"verified"})]})}):!c&&(0,f.jsxs)(s.xuv,{withBorders:!0,sx:{display:"flex",alignItems:"center",justifyContent:"center"},children:[!x&&(0,f.jsx)(r.rU,{to:"/license",onClick:e=>{e.stopPropagation()},className:"noUnderLine",children:(0,f.jsx)(u.Z,{tooltip:"Activate Product",children:(0,f.jsx)(s.zxk,{id:"activate-product",label:"Activate Product",onClick:()=>!1,variant:"callAction"})})}),x&&o&&(0,f.jsx)(u.Z,{tooltip:"Attach License",children:(0,f.jsx)(s.zxk,{id:"attach-license",disabled:a,label:"Attach License",onClick:()=>d(o.namespace,o.name),variant:"callAction"})})]})})};var g=t(1207),p=t(7995),j=t(7238);const b=()=>{const e=(0,a.TL)(),n=(0,o.v9)((e=>e.tenants.loadingTenant)),t=(0,o.v9)((e=>e.tenants.tenantInfo)),[c,l]=(0,i.useState)(),[r,x]=(0,i.useState)(!0),[d,m]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{r&&g.Z.invoke("GET","/api/v1/subscription/info").then((e=>{l(e),x(!1)})).catch((e=>{x(!1)}))}),[r]),(0,f.jsxs)(i.Fragment,{children:[(0,f.jsx)(s.NZf,{separator:!0,sx:{marginBottom:15},children:"License"}),n?(0,f.jsx)(s.xuv,{sx:{textAlign:"center"},children:(0,f.jsx)(s.aNw,{})}):(0,f.jsx)(i.Fragment,{children:t&&(0,f.jsx)(s.rjZ,{container:!0,children:(0,f.jsx)(s.rjZ,{item:!0,xs:12,children:(0,f.jsx)(v,{tenant:t,loadingLicenseInfo:r,loadingActivateProduct:d,licenseInfo:c,activateProduct:(n,t)=>{d||(m(!0),g.Z.invoke("POST","/api/v1/subscription/namespaces/".concat(n,"/tenants/").concat(t,"/activate"),{}).then((()=>{m(!1),e((0,j.V2)(!0)),x(!0)})).catch((n=>{m(!1),e((0,p.Ih)(n))})))}})})})})]})}}}]); +//# sourceMappingURL=145.96ed8557.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/145.96ed8557.chunk.js.map b/web-app/build/static/js/145.96ed8557.chunk.js.map new file mode 100644 index 00000000000..84c2b32a87d --- /dev/null +++ b/web-app/build/static/js/145.96ed8557.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/145.96ed8557.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/SubnetLicenseTenant.tsx","screens/Console/Tenants/TenantDetails/TenantLicense.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Button, Grid } from \"mds\";\nimport styled from \"styled-components\";\nimport { DateTime } from \"luxon\";\nimport { Link } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { SubnetInfo } from \"../../License/types\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\n\ninterface ISubnetLicenseTenant {\n tenant: Tenant | null;\n loadingActivateProduct: any;\n loadingLicenseInfo: boolean;\n licenseInfo: SubnetInfo | undefined;\n activateProduct: any;\n}\n\nconst LicenseContainer = styled.div(({ theme }) => ({\n \"& .licenseInfoValue\": {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n \"&.licenseContainer\": {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: get(theme, \"signalColors.info\", \"#2781B0\"),\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n \"& .licenseInfo\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n position: \"relative\",\n },\n \"& .licenseInfoTitle\": {\n textTransform: \"none\",\n color: get(theme, \"mutedText\", \"#87888d\"),\n fontSize: 11,\n },\n \"& .verifiedIcon\": {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n \"& .noUnderLine\": {\n textDecoration: \"none\",\n },\n}));\n\nconst SubnetLicenseTenant = ({\n tenant,\n loadingActivateProduct,\n loadingLicenseInfo,\n licenseInfo,\n activateProduct,\n}: ISubnetLicenseTenant) => {\n const expiryTime = tenant?.subnet_license\n ? DateTime.fromISO(tenant.subnet_license?.expires_at!)\n : DateTime.now();\n\n return (\n \n {tenant && tenant.subnet_license ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {tenant.subnet_license.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (\n (tenant.subnet_license?.storage_capacity || 0) *\n 1099511627776\n ) // 1 Terabyte = 1099511627776 Bytes\n .toString(10),\n )}\n \n \n Expiry Date\n \n \n {expiryTime.toFormat(\"yyyy-MM-dd\")}\n \n \n \n \n Subscription Plan\n \n \n {tenant.subnet_license.plan}\n \n \n Requestor\n \n \n {tenant.subnet_license.email}\n \n \n \n \n \n ) : (\n !loadingLicenseInfo && (\n \n {!licenseInfo && (\n {\n e.stopPropagation();\n }}\n className={\"noUnderLine\"}\n >\n \n false}\n variant={\"callAction\"}\n />\n \n \n )}\n {licenseInfo && tenant && (\n \n activateProduct(tenant.namespace, tenant.name)}\n variant={\"callAction\"}\n />\n \n )}\n \n )\n )}\n \n );\n};\n\nexport default SubnetLicenseTenant;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Loader, SectionTitle, Box, Grid } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { SubnetInfo } from \"../../License/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport SubnetLicenseTenant from \"./SubnetLicenseTenant\";\nimport api from \"../../../../common/api\";\n\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { setTenantDetailsLoad } from \"../tenantsSlice\";\n\nconst TenantLicense = () => {\n const dispatch = useAppDispatch();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] =\n useState(false);\n\n const activateProduct = (namespace: string, tenant: string) => {\n if (loadingActivateProduct) {\n return;\n }\n setLoadingActivateProduct(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/subscription/namespaces/${namespace}/tenants/${tenant}/activate`,\n {},\n )\n .then(() => {\n setLoadingActivateProduct(false);\n dispatch(setTenantDetailsLoad(true));\n setLoadingLicenseInfo(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingActivateProduct(false);\n dispatch(setErrorSnackMessage(err));\n });\n };\n\n useEffect(() => {\n if (loadingLicenseInfo) {\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: SubnetInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingLicenseInfo(false);\n });\n }\n }, [loadingLicenseInfo]);\n\n return (\n \n \n License\n \n {loadingTenant ? (\n \n \n \n ) : (\n \n {tenant && (\n \n \n \n \n \n )}\n \n )}\n \n );\n};\n\nexport default TenantLicense;\n"],"names":["LicenseContainer","styled","div","_ref","theme","textTransform","fontSize","fontWeight","position","padding","background","get","boxShadow","color","marginBottom","textDecoration","width","right","bottom","_ref2","_tenant$subnet_licens","_tenant$subnet_licens2","tenant","loadingActivateProduct","loadingLicenseInfo","licenseInfo","activateProduct","expiryTime","subnet_license","DateTime","fromISO","expires_at","now","_jsx","className","children","Fragment","_jsxs","Grid","container","item","xs","Box","sx","organization","niceBytes","storage_capacity","toString","toFormat","plan","email","src","alt","withBorders","display","alignItems","justifyContent","Link","to","onClick","e","stopPropagation","TooltipWrapper","tooltip","Button","id","label","variant","disabled","namespace","name","TenantLicense","dispatch","useAppDispatch","loadingTenant","useSelector","state","tenants","tenantInfo","setLicenseInfo","useState","setLoadingLicenseInfo","setLoadingActivateProduct","useEffect","api","invoke","then","res","catch","err","SectionTitle","separator","textAlign","Loader","SubnetLicenseTenant","concat","setTenantDetailsLoad","setErrorSnackMessage"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/145.bbbee7ec.chunk.js b/web-app/build/static/js/145.bbbee7ec.chunk.js deleted file mode 100644 index 94a3b3a3ebf..00000000000 --- a/web-app/build/static/js/145.bbbee7ec.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[145],{59145:function(e,n,t){t.r(n),t.d(n,{default:function(){return k}});var i=t(29439),o=t(1413),a=t(72791),s=t(78687),c=t(11135),l=t(25787),r=t(61889),u=t(23814),d=t(41320),f=t(20890),p=t(45248),m=t(99779),x=t(11087),v=t(35527),h=t(75952),b=t(27454),g=t(80184),Z=(0,l.Z)((function(e){return(0,c.Z)((0,o.Z)({paperContainer:{padding:"15px",display:"flex",alignItems:"center",justifyContent:"center"},licenseInfoValue:{textTransform:"none",fontSize:14,fontWeight:"bold"},licenseContainer:{position:"relative",padding:"20px 52px 0px 28px",background:"#032F51",boxShadow:"0px 3px 7px #00000014","& h2":{color:"#FFF",marginBottom:67},"& a":{textDecoration:"none"},"& h3":{color:"#FFFFFF",marginBottom:"30px",fontWeight:"bold"},"& h6":{color:"#FFFFFF !important"}},licenseInfo:{color:"#FFFFFF",position:"relative"},licenseInfoTitle:{textTransform:"none",color:"#BFBFBF",fontSize:11},verifiedIcon:{width:96,position:"absolute",right:0,bottom:29},noUnderLine:{textDecoration:"none"}},u.Bz))}))((function(e){var n,t,i=e.classes,o=e.tenant,s=e.loadingActivateProduct,c=e.loadingLicenseInfo,l=e.licenseInfo,u=e.activateProduct,d=null!==o&&void 0!==o&&o.subnet_license?m.ou.fromISO(null===(n=o.subnet_license)||void 0===n?void 0:n.expires_at):m.ou.now();return(0,g.jsx)(v.Z,{className:o&&o.subnet_license?i.licenseContainer:"",children:o&&o.subnet_license?(0,g.jsx)(a.Fragment,{children:(0,g.jsxs)(r.ZP,{container:!0,className:i.licenseInfo,children:[(0,g.jsxs)(r.ZP,{item:!0,xs:6,children:[(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"License"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:"Commercial License"}),(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"Organization"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:o.subnet_license.organization}),(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"Registered Capacity"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:(0,p.ae)((1099511627776*((null===(t=o.subnet_license)||void 0===t?void 0:t.storage_capacity)||0)).toString(10))}),(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"Expiry Date"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:d.toFormat("yyyy-MM-dd")})]}),(0,g.jsxs)(r.ZP,{item:!0,xs:6,children:[(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"Subscription Plan"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:o.subnet_license.plan}),(0,g.jsx)(f.Z,{variant:"button",display:"block",gutterBottom:!0,className:i.licenseInfoTitle,children:"Requestor"}),(0,g.jsx)(f.Z,{variant:"overline",display:"block",gutterBottom:!0,className:i.licenseInfoValue,children:o.subnet_license.email})]}),(0,g.jsx)("img",{className:i.verifiedIcon,src:"/verified.svg",alt:"verified"})]})}):!c&&(0,g.jsxs)(r.ZP,{className:i.paperContainer,children:[!l&&(0,g.jsx)(x.rU,{to:"/license",onClick:function(e){e.stopPropagation()},className:i.noUnderLine,children:(0,g.jsx)(b.Z,{tooltip:"Activate Product",children:(0,g.jsx)(h.zxk,{id:"activate-product",label:"Activate Product",onClick:function(){return!1},variant:"callAction"})})}),l&&o&&(0,g.jsx)(b.Z,{tooltip:"Attach License",children:(0,g.jsx)(h.zxk,{id:"attach-license",disabled:s,label:"Attach License",onClick:function(){return u(o.namespace,o.name)},variant:"callAction"})})]})})})),j=t(81207),F=t(87995),I=t(17238),k=(0,l.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({},u.oZ),{},{loaderAlign:{textAlign:"center"}},u.Bz))}))((function(e){var n=e.classes,t=(0,d.TL)(),o=(0,s.v9)((function(e){return e.tenants.loadingTenant})),c=(0,s.v9)((function(e){return e.tenants.tenantInfo})),l=(0,a.useState)(),u=(0,i.Z)(l,2),f=u[0],p=u[1],m=(0,a.useState)(!0),x=(0,i.Z)(m,2),v=x[0],b=x[1],k=(0,a.useState)(!1),y=(0,i.Z)(k,2),N=y[0],B=y[1];return(0,a.useEffect)((function(){v&&j.Z.invoke("GET","/api/v1/subscription/info").then((function(e){p(e),b(!1)})).catch((function(e){b(!1)}))}),[v]),(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("h1",{className:n.sectionTitle,children:"License"}),o?(0,g.jsx)("div",{className:n.loaderAlign,children:(0,g.jsx)(h.aNw,{})}):(0,g.jsx)(a.Fragment,{children:c&&(0,g.jsx)(r.ZP,{container:!0,children:(0,g.jsx)(r.ZP,{item:!0,xs:12,children:(0,g.jsx)(Z,{tenant:c,loadingLicenseInfo:v,loadingActivateProduct:N,licenseInfo:f,activateProduct:function(e,n){N||(B(!0),j.Z.invoke("POST","/api/v1/subscription/namespaces/".concat(e,"/tenants/").concat(n,"/activate"),{}).then((function(){B(!1),t((0,I.V2)(!0)),b(!0)})).catch((function(e){B(!1),t((0,F.Ih)(e))})))}})})})})]})}))}}]); -//# sourceMappingURL=145.bbbee7ec.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/145.bbbee7ec.chunk.js.map b/web-app/build/static/js/145.bbbee7ec.chunk.js.map deleted file mode 100644 index a80b2737880..00000000000 --- a/web-app/build/static/js/145.bbbee7ec.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/145.bbbee7ec.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/SubnetLicenseTenant.tsx","screens/Console/Tenants/TenantDetails/TenantLicense.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { Typography } from \"@mui/material\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { DateTime } from \"luxon\";\nimport { Link } from \"react-router-dom\";\nimport Paper from \"@mui/material/Paper\";\nimport { Button } from \"mds\";\nimport { SubnetInfo } from \"../../License/types\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport { Tenant } from \"../../../../api/operatorApi\";\n\ninterface ISubnetLicenseTenant {\n classes: any;\n tenant: Tenant | null;\n loadingActivateProduct: any;\n loadingLicenseInfo: boolean;\n licenseInfo: SubnetInfo | undefined;\n activateProduct: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperContainer: {\n padding: \"15px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n licenseContainer: {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: \"#FFFFFF\",\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n licenseInfo: { color: \"#FFFFFF\", position: \"relative\" },\n licenseInfoTitle: {\n textTransform: \"none\",\n color: \"#BFBFBF\",\n fontSize: 11,\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n noUnderLine: {\n textDecoration: \"none\",\n },\n ...containerForHeader,\n });\n\nconst SubnetLicenseTenant = ({\n classes,\n tenant,\n loadingActivateProduct,\n loadingLicenseInfo,\n licenseInfo,\n activateProduct,\n}: ISubnetLicenseTenant) => {\n const expiryTime = tenant?.subnet_license\n ? DateTime.fromISO(tenant.subnet_license?.expires_at!)\n : DateTime.now();\n\n return (\n \n {tenant && tenant.subnet_license ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {tenant.subnet_license.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (\n (tenant.subnet_license?.storage_capacity || 0) *\n 1099511627776\n ) // 1 Terabyte = 1099511627776 Bytes\n .toString(10),\n )}\n \n \n Expiry Date\n \n \n {expiryTime.toFormat(\"yyyy-MM-dd\")}\n \n \n \n \n Subscription Plan\n \n \n {tenant.subnet_license.plan}\n \n \n Requestor\n \n \n {tenant.subnet_license.email}\n \n \n \n \n \n ) : (\n !loadingLicenseInfo && (\n \n {!licenseInfo && (\n {\n e.stopPropagation();\n }}\n className={classes.noUnderLine}\n >\n \n false}\n variant={\"callAction\"}\n />\n \n \n )}\n {licenseInfo && tenant && (\n \n activateProduct(tenant.namespace, tenant.name)}\n variant={\"callAction\"}\n />\n \n )}\n \n )\n )}\n \n );\n};\n\nexport default withStyles(styles)(SubnetLicenseTenant);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { SubnetInfo } from \"../../License/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport SubnetLicenseTenant from \"./SubnetLicenseTenant\";\nimport api from \"../../../../common/api\";\nimport { Loader } from \"mds\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { setTenantDetailsLoad } from \"../tenantsSlice\";\n\ninterface ITenantLicense {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n loaderAlign: {\n textAlign: \"center\",\n },\n ...containerForHeader,\n });\n\nconst TenantLicense = ({ classes }: ITenantLicense) => {\n const dispatch = useAppDispatch();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] =\n useState(false);\n\n const activateProduct = (namespace: string, tenant: string) => {\n if (loadingActivateProduct) {\n return;\n }\n setLoadingActivateProduct(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/subscription/namespaces/${namespace}/tenants/${tenant}/activate`,\n {},\n )\n .then(() => {\n setLoadingActivateProduct(false);\n dispatch(setTenantDetailsLoad(true));\n setLoadingLicenseInfo(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingActivateProduct(false);\n dispatch(setErrorSnackMessage(err));\n });\n };\n\n useEffect(() => {\n if (loadingLicenseInfo) {\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: SubnetInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingLicenseInfo(false);\n });\n }\n }, [loadingLicenseInfo]);\n\n return (\n \n

License

\n {loadingTenant ? (\n
\n \n
\n ) : (\n \n {tenant && (\n \n \n \n \n \n )}\n \n )}\n
\n );\n};\n\nexport default withStyles(styles)(TenantLicense);\n"],"names":["withStyles","theme","createStyles","_objectSpread","paperContainer","padding","display","alignItems","justifyContent","licenseInfoValue","textTransform","fontSize","fontWeight","licenseContainer","position","background","boxShadow","color","marginBottom","textDecoration","licenseInfo","licenseInfoTitle","verifiedIcon","width","right","bottom","noUnderLine","containerForHeader","_ref","_tenant$subnet_licens","_tenant$subnet_licens2","classes","tenant","loadingActivateProduct","loadingLicenseInfo","activateProduct","expiryTime","subnet_license","DateTime","fromISO","expires_at","now","_jsx","Paper","className","children","React","_jsxs","Grid","container","item","xs","Typography","variant","gutterBottom","organization","niceBytes","storage_capacity","toString","toFormat","plan","email","src","alt","Link","to","onClick","e","stopPropagation","TooltipWrapper","tooltip","Button","id","label","disabled","namespace","name","tenantDetailsStyles","loaderAlign","textAlign","dispatch","useAppDispatch","loadingTenant","useSelector","state","tenants","tenantInfo","_useState","useState","_useState2","_slicedToArray","setLicenseInfo","_useState3","_useState4","setLoadingLicenseInfo","_useState5","_useState6","setLoadingActivateProduct","useEffect","api","invoke","then","res","catch","err","Fragment","sectionTitle","Loader","SubnetLicenseTenant","concat","setTenantDetailsLoad","setErrorSnackMessage"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/162.58762974.chunk.js b/web-app/build/static/js/162.58762974.chunk.js new file mode 100644 index 00000000000..906ccef304a --- /dev/null +++ b/web-app/build/static/js/162.58762974.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[162],{4162:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ae});var a=n(2791),r=n(6181),i=n.n(r),s=n(9945),l=n(9434),o=n(7689),c=n(5884),d=n(6078),u=n(6773),m=n(1320),p=n(6444),g=n(4741),x=n(968),h=n(7),v=n(184);const y=p.ZP.div((()=>({"& .configSectionItem":{marginRight:15,marginBottom:15},"& .containerItem":{marginRight:15},"& .responsiveSectionItem":{"&.doubleElement":{display:"flex","& div":{flexGrow:1}},"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}},"& .wrapperContainer":{display:"flex",alignItems:"center"},"& .envVarRow":{display:"flex",alignItems:"center",justifyContent:"flex-start","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},"& .fileItem":{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}},"& .rowActions":{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},"& .overlayAction":{marginLeft:10,marginBottom:15}}))),f=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.configure.exposeMinIO)),n=(0,l.v9)((e=>e.createTenant.fields.configure.exposeConsole)),r=(0,l.v9)((e=>e.createTenant.fields.configure.exposeSFTP)),i=(0,l.v9)((e=>e.createTenant.fields.configure.setDomains)),o=(0,l.v9)((e=>e.createTenant.fields.configure.consoleDomain)),c=(0,l.v9)((e=>e.createTenant.fields.configure.minioDomains)),d=(0,l.v9)((e=>e.createTenant.fields.configure.tenantCustom)),p=(0,l.v9)((e=>e.createTenant.fields.configure.envVars)),f=(0,l.v9)((e=>e.createTenant.fields.configure.tenantSecurityContext)),j=(0,l.v9)((e=>e.createTenant.fields.configure.customRuntime)),C=(0,l.v9)((e=>e.createTenant.fields.configure.runtimeClassName)),[b,_]=(0,a.useState)({}),S=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"configure",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{let t=[];if(d&&(t=[{fieldKey:"tenant_securityContext_runAsUser",required:!0,value:f.runAsUser,customValidation:""===f.runAsUser||parseInt(f.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"tenant_securityContext_runAsGroup",required:!0,value:f.runAsGroup,customValidation:""===f.runAsGroup||parseInt(f.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"tenant_securityContext_fsGroup",required:!0,value:f.fsGroup,customValidation:""===f.fsGroup||parseInt(f.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]),i){const e=c.map(((e,t)=>({fieldKey:"minio-domain-".concat(t.toString()),required:!1,value:e,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/,customPatternMessage:"MinIO domain is not in the form of http|https://subdomain.domain"})));t=[...t,...e,{fieldKey:"console_domain",required:!1,value:o,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/,customPatternMessage:"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2"}]}const n=(0,x.R)(t);e((0,u.NO)({pageName:"configure",valid:0===Object.keys(n).length})),_(n)}),[e,d,f,i,o,c]);const k=e=>{_((0,g.h)(b,e))};return(0,v.jsx)(y,{children:(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Configure"}),(0,v.jsx)("span",{className:"muted",children:"Basic configurations for tenant management"})]}),(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)("h4",{style:{margin:"10px 0px 0px"},children:"Services"}),(0,v.jsx)("span",{className:"muted",children:"Whether the tenant's services should request an external IP via LoadBalancer service type."})]}),(0,v.jsx)(s.rsf,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:t,onChange:e=>{const t=e.target.checked;S("exposeMinIO",t)},label:"Expose MinIO Service"}),(0,v.jsx)(s.rsf,{value:"expose_console",id:"expose_console",name:"expose_console",checked:n,onChange:e=>{const t=e.target.checked;S("exposeConsole",t)},label:"Expose Console Service"}),(0,v.jsx)(s.rsf,{value:"expose_sftp",id:"expose_sftp",name:"expose_sftp",checked:r,onChange:e=>{const t=e.target.checked;S("exposeSFTP",t)},label:"Expose SFTP Service"}),(0,v.jsx)(s.rsf,{value:"custom_domains",id:"custom_domains",name:"custom_domains",checked:i,onChange:e=>{const t=e.target.checked;S("setDomains",t)},label:"Set Custom Domains"}),i&&(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,v.jsxs)("fieldset",{children:[(0,v.jsx)("legend",{children:"Custom Domains for MinIO"}),(0,v.jsxs)(s.rjZ,{item:!0,xs:12,className:"configSectionItem",children:[(0,v.jsx)(s.xuv,{className:"inputItem",children:(0,v.jsx)(s.Wzg,{id:"console_domain",name:"console_domain",onChange:e=>{S("consoleDomain",e.target.value),k("tenant_securityContext_runAsUser")},label:"Console Domain",value:o,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",error:b.console_domain||""})}),(0,v.jsxs)(s.xuv,{children:[(0,v.jsx)("h4",{children:"MinIO Domains"}),(0,v.jsx)(s.xuv,{className:"responsiveSectionItem",children:c.map(((t,n)=>(0,v.jsxs)(s.xuv,{className:"containerItem wrapperContainer",children:[(0,v.jsx)(s.Wzg,{id:"minio-domain-".concat(n.toString()),name:"minio-domain-".concat(n.toString()),onChange:e=>{((e,t)=>{const n=[...c];n[t]=e,S("minioDomains",n)})(e.target.value,n)},label:"MinIO Domain ".concat(n+1),value:t,placeholder:"Eg. http://subdomain.domain",error:b["minio-domain-".concat(n.toString())]||""}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>e((0,u.x_)()),disabled:n!==c.length-1,children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>e((0,u.JL)(n)),disabled:c.length<=1,children:(0,v.jsx)(s.HFL,{})})})]},"minio-domain-key-".concat(n.toString()))))})]})]})]})}),(0,v.jsx)(s.rsf,{value:"tenantConfig",id:"tenant_configuration",name:"tenant_configuration",checked:d,onChange:e=>{const t=e.target.checked;S("tenantCustom",t)},label:"Security Context"}),d&&(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,v.jsxs)("fieldset",{children:[(0,v.jsx)("legend",{children:"Security Context for MinIO"}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"configSectionItem",children:(0,v.jsxs)(s.xuv,{className:"responsiveSectionItem doubleElement",children:[(0,v.jsx)(s.xuv,{className:"containerItem",children:(0,v.jsx)(s.Wzg,{type:"number",id:"tenant_securityContext_runAsUser",name:"tenant_securityContext_runAsUser",onChange:e=>{S("tenantSecurityContext",{...f,runAsUser:e.target.value}),k("tenant_securityContext_runAsUser")},label:"Run As User",value:f.runAsUser,required:!0,error:b.tenant_securityContext_runAsUser||"",min:"0"})}),(0,v.jsx)(s.xuv,{className:"containerItem",children:(0,v.jsx)(s.Wzg,{type:"number",id:"tenant_securityContext_runAsGroup",name:"tenant_securityContext_runAsGroup",onChange:e=>{S("tenantSecurityContext",{...f,runAsGroup:e.target.value}),k("tenant_securityContext_runAsGroup")},label:"Run As Group",value:f.runAsGroup,required:!0,error:b.tenant_securityContext_runAsGroup||"",min:"0"})})]})}),(0,v.jsx)("br",{}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"configSectionItem",children:(0,v.jsxs)(s.xuv,{className:"responsiveSectionItem doubleElement",children:[(0,v.jsx)(s.xuv,{className:"containerItem",children:(0,v.jsx)(s.Wzg,{type:"number",id:"tenant_securityContext_fsGroup",name:"tenant_securityContext_fsGroup",onChange:e=>{S("tenantSecurityContext",{...f,fsGroup:e.target.value}),k("tenant_securityContext_fsGroup")},label:"FsGroup",value:f.fsGroup,required:!0,error:b.tenant_securityContext_fsGroup||"",min:"0"})}),(0,v.jsx)(s.xuv,{className:"containerItem",children:(0,v.jsx)(s.PhF,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:f.fsGroupChangePolicy,onChange:e=>{S("tenantSecurityContext",{...f,fsGroupChangePolicy:e})},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,v.jsx)("br",{}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"configSectionItem",children:(0,v.jsx)(s.rsf,{value:"tenantSecurityContextRunAsNonRoot",id:"tenant_securityContext_runAsNonRoot",name:"tenant_securityContext_runAsNonRoot",checked:f.runAsNonRoot,onChange:e=>{const t=e.target.checked;S("tenantSecurityContext",{...f,runAsNonRoot:t})},label:"Do not run as Root"})})]})}),(0,v.jsx)(s.rsf,{value:"customRuntime",id:"tenant_custom_runtime",name:"tenant_custom_runtime",checked:j,onChange:e=>{const t=e.target.checked;S("customRuntime",t)},label:"Custom Runtime Configurations"}),j&&(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,v.jsxs)("fieldset",{children:[(0,v.jsx)("legend",{children:"Custom Runtime Configurations"}),(0,v.jsx)(s.Wzg,{id:"tenant_runtime_runtimeClassName",name:"tenant_runtime_runtimeClassName",onChange:e=>{S("runtimeClassName",e.target.value),k("tenant_runtime_runtimeClassName")},label:"Runtime Class Name",value:C,error:b.tenant_runtime_runtimeClassName||""})]})}),(0,v.jsx)("hr",{}),(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Additional Environment Variables"}),(0,v.jsx)("span",{className:"muted",children:"Define additional environment variables to be used by your MinIO pods"})]}),(0,v.jsx)(s.rjZ,{container:!0,children:p.map(((t,n)=>(0,v.jsxs)(s.rjZ,{item:!0,xs:12,className:"formFieldRow envVarRow",children:[(0,v.jsx)(s.rjZ,{item:!0,xs:5,className:"fileItem",children:(0,v.jsx)(s.Wzg,{id:"env_var_key",name:"env_var_key",label:"Key",value:t.key,onChange:t=>{const a=[...p];e((0,u.Ct)(a.map(((e,a)=>a===n?{key:t.target.value,value:e.value}:e))))},index:n},"env_var_key_".concat(n.toString()))}),(0,v.jsx)(s.rjZ,{item:!0,xs:5,className:"fileItem",children:(0,v.jsx)(s.Wzg,{id:"env_var_value",name:"env_var_value",label:"Value",value:t.value,onChange:t=>{const a=[...p];e((0,u.Ct)(a.map(((e,a)=>a===n?{key:e.key,value:t.target.value}:e))))},index:n},"env_var_value_".concat(n.toString()))}),(0,v.jsxs)(s.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{const t=[...p];t.push({key:"",value:""}),e((0,u.Ct)(t))},disabled:n!==p.length-1,children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{const t=p.filter(((e,t)=>t!==n));e((0,u.Ct)(t))},disabled:p.length<=1,children:(0,v.jsx)(s.HFL,{})})})]})]},"tenant-envVar-".concat(n.toString()))))})]})})},j=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADURL)),r=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADSkipTLS)),i=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADServerInsecure)),o=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADGroupSearchBaseDN)),c=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADGroupSearchFilter)),d=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADUserDNs)),p=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADGroupDNs)),h=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADLookupBindDN)),y=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADLookupBindPassword)),f=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADUserDNSearchBaseDN)),j=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADUserDNSearchFilter)),C=(0,l.v9)((e=>e.createTenant.fields.identityProvider.ADServerStartTLS)),[b,_]=(0,a.useState)({}),S=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"identityProvider",field:t,value:n}))}),[e]),k=e=>{_((0,g.h)(b,e))};return(0,a.useEffect)((()=>{let a=[];"AD"===t&&(a=[...a,{fieldKey:"AD_URL",required:!0,value:n},{fieldKey:"ad_lookupBindDN",required:!0,value:h}]);const r=(0,x.R)(a);e((0,u.NO)({pageName:"identityProvider",valid:0===Object.keys(r).length})),_(r)}),[h,t,n,o,c,d,p,e]),(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,sx:{"& .adUserDnRows":{display:"flex"},"& .buttonTray":{display:"flex",gap:10,alignItems:"center",marginLeft:10,marginBottom:10}},children:[(0,v.jsx)(s.Wzg,{id:"AD_URL",name:"AD_URL",onChange:e=>{S("ADURL",e.target.value),k("AD_URL")},label:"LDAP Server Address",value:n,placeholder:"ldap-server:636",error:b.AD_URL||"",required:!0}),(0,v.jsx)(s.rsf,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:r,onChange:e=>{const t=e.target.checked;S("ADSkipTLS",t)},label:"Skip TLS Verification"}),(0,v.jsx)(s.rsf,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:i,onChange:e=>{const t=e.target.checked;S("ADServerInsecure",t)},label:"Server Insecure"}),i?(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)("span",{className:"error",children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,v.jsx)("br",{})]}):null,(0,v.jsx)(s.rsf,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:C,onChange:e=>{const t=e.target.checked;S("ADServerStartTLS",t)},label:"Start TLS connection to AD/LDAP server"}),(0,v.jsx)(s.Wzg,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:e=>{S("ADLookupBindDN",e.target.value),k("ad_lookupBindDN")},label:"Lookup Bind DN",value:h,placeholder:"cn=admin,dc=min,dc=io",error:b.ad_lookupBindDN||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:e=>{S("ADLookupBindPassword",e.target.value)},label:"Lookup Bind Password",value:y,placeholder:"admin"}),(0,v.jsx)(s.Wzg,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:e=>{S("ADUserDNSearchBaseDN",e.target.value)},label:"User DN Search Base DN",value:f,placeholder:"dc=min,dc=io"}),(0,v.jsx)(s.Wzg,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:e=>{S("ADUserDNSearchFilter",e.target.value)},label:"User DN Search Filter",value:j,placeholder:"(sAMAcountName=%s)"}),(0,v.jsx)(s.Wzg,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:e=>{S("ADGroupSearchBaseDN",e.target.value)},label:"Group Search Base DN",value:o,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"}),(0,v.jsx)(s.Wzg,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:e=>{S("ADGroupSearchFilter",e.target.value)},label:"Group Search Filter",value:c,placeholder:"(&(objectclass=groupOfNames)(member=%s))"}),(0,v.jsxs)("fieldset",{className:"inputItem",style:{marginTop:10},children:[(0,v.jsx)("legend",{children:"List of user DNs (Distinguished Names) to be Tenant Administrators"}),d.map(((t,n)=>(0,v.jsx)(a.Fragment,{children:(0,v.jsxs)(s.xuv,{className:"adUserDnRows",children:[(0,v.jsx)(s.Wzg,{id:"ad-userdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(n.toString()),value:d[n],onChange:t=>{e((0,u.hK)({index:n,userDN:t.target.value})),k("ad-userdn-".concat(n.toString()))},index:n,error:b["ad-userdn-".concat(n.toString())]||""},"csv-ad-userdn-".concat(n.toString())),(0,v.jsxs)(s.xuv,{className:"buttonTray",children:[(0,v.jsx)(s.ua7,{tooltip:"Add User","aria-label":"add",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.Y$)())},children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.ua7,{tooltip:"Remove","aria-label":"add",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{d.length>1&&e((0,u.GU)(n))},children:(0,v.jsx)(s.HFL,{})})})]})]})},"identityField-".concat(n.toString()))))]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"List of group DNs (Distinguished Names) to be Tenant Administrators"}),p.map(((t,n)=>(0,v.jsx)(a.Fragment,{children:(0,v.jsxs)(s.xuv,{className:"adUserDnRows",children:[(0,v.jsx)(s.Wzg,{id:"ad-groupdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-groupdn-".concat(n.toString()),value:p[n],onChange:t=>{e((0,u.in)({index:n,userDN:t.target.value})),k("ad-groupdn-".concat(n.toString()))},index:n,error:b["ad-groupdn-".concat(n.toString())]||""},"csv-ad-groupdn-".concat(n.toString())),(0,v.jsxs)(s.xuv,{className:"buttonTray",children:[(0,v.jsx)(s.ua7,{tooltip:"Add Group","aria-label":"add",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.Fe)())},children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.ua7,{tooltip:"Remove","aria-label":"add",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{p.length>1&&e((0,u.Hu)(n))},children:(0,v.jsx)(s.HFL,{})})})]})]})},"identityField-".concat(n.toString()))))]})]})},C=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.v9)((e=>e.createTenant.fields.identityProvider.openIDConfigurationURL)),r=(0,l.v9)((e=>e.createTenant.fields.identityProvider.openIDClientID)),i=(0,l.v9)((e=>e.createTenant.fields.identityProvider.openIDSecretID)),o=(0,l.v9)((e=>e.createTenant.fields.identityProvider.openIDClaimName)),c=(0,l.v9)((e=>e.createTenant.fields.identityProvider.openIDScopes)),[d,p]=(0,a.useState)({}),h=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"identityProvider",field:t,value:n}))}),[e]),y=e=>{p((0,g.h)(d,e))};return(0,a.useEffect)((()=>{let a=[];"OpenID"===t&&(a=[...a,{fieldKey:"openID_CONFIGURATION_URL",required:!0,value:n},{fieldKey:"openID_clientID",required:!0,value:r},{fieldKey:"openID_secretID",required:!0,value:i},{fieldKey:"openID_claimName",required:!1,value:o}]);const s=(0,x.R)(a);e((0,u.NO)({pageName:"identityProvider",valid:0===Object.keys(s).length})),p(s)}),[t,r,i,n,o,e]),(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsx)(s.Wzg,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:e=>{h("openIDConfigurationURL",e.target.value),y("openID_CONFIGURATION_URL")},label:"Configuration URL",value:n,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:d.openID_CONFIGURATION_URL||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"openID_clientID",name:"openID_clientID",onChange:e=>{h("openIDClientID",e.target.value),y("openID_clientID")},label:"Client ID",value:r,error:d.openID_clientID||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"openID_secretID",name:"openID_secretID",onChange:e=>{h("openIDSecretID",e.target.value),y("openID_secretID")},label:"Secret ID",value:i,error:d.openID_secretID||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"openID_claimName",name:"openID_claimName",onChange:e=>{h("openIDClaimName",e.target.value),y("openID_claimName")},label:"Claim Name",value:o,placeholder:"policy",error:d.openID_claimName||""}),(0,v.jsx)(s.Wzg,{id:"openID_scopes",name:"openID_scopes",onChange:e=>{h("openIDScopes",e.target.value),y("openID_scopes")},label:"Scopes",value:c})]})},b=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.v9)((e=>e.createTenant.fields.identityProvider.accessKeys)),r=(0,l.v9)((e=>e.createTenant.fields.identityProvider.secretKeys)),[i,o]=(0,a.useState)({}),c=e=>{o((0,g.h)(i,e))};return(0,a.useEffect)((()=>{let a=[];if("Built-in"===t){a=[...a];for(var i=0;i(0,v.jsx)(a.Fragment,{children:(0,v.jsxs)(s.xuv,{sx:{gridTemplateColumns:"auto auto 50px 50px",display:"grid",gap:10,marginBottom:10},children:[(0,v.jsx)(s.Wzg,{id:"accesskey-".concat(l.toString()),label:"",placeholder:"Access Key",name:"accesskey-".concat(l.toString()),value:n[l],onChange:t=>{e((0,u.ys)({index:l,accessKey:t.target.value})),c("accesskey-".concat(l.toString()))},index:l,error:i["accesskey-".concat(l.toString())]||""},"csv-accesskey-".concat(l.toString())),(0,v.jsx)(s.Wzg,{id:"secretkey-".concat(l.toString()),label:"",placeholder:"Secret Key",name:"secretkey-".concat(l.toString()),value:r[l],onChange:t=>{e((0,u.OL)({index:l,secretKey:t.target.value})),c("secretkey-".concat(l.toString()))},index:l,error:i["secretkey-".concat(l.toString())]||""},"csv-secretkey-".concat(l.toString())),(0,v.jsxs)(s.xuv,{sx:{display:"flex",alignItems:"center",gap:10,height:38},children:[(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.x$)())},disabled:l!==n.length-1,children:(0,v.jsx)(s.dtP,{})}),(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.iA)(l))},disabled:n.length<=1,children:(0,v.jsx)(s.HFL,{})}),(0,v.jsx)(s.ua7,{tooltip:"Randomize Credentials","aria-label":"add",children:(0,v.jsx)(s.hU,{onClick:()=>{e((0,u.ys)({index:l,accessKey:(0,g.z)(16)})),e((0,u.OL)({index:l,secretKey:(0,g.z)(16)}))},size:"small",children:(0,v.jsx)(s.jH6,{})})})]})]})},"identityField-".concat(l.toString()))))]})},_=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.identityProvider.idpSelection));return(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Identity Provider"}),(0,v.jsx)("span",{className:"muted",children:"Access to the tenant can be controlled via an external Identity Manager."})]}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,sx:{padding:10},children:(0,v.jsx)(s.Eep,{currentValue:t,id:"idp-options",name:"idp-options",label:"Protocol",onChange:t=>{e((0,u.BH)(t.target.value))},selectorOptions:[{label:"Built-in",value:"Built-in",icon:(0,v.jsx)(s.oyc,{})},{label:"Open ID",value:"OpenID",icon:(0,v.jsx)(s.gyG,{})},{label:"LDAP / Active Directory",value:"AD",icon:(0,v.jsx)(s.vcZ,{})}]})}),"Built-in"===t&&(0,v.jsx)(b,{}),"OpenID"===t&&(0,v.jsx)(C,{}),"AD"===t&&(0,v.jsx)(j,{})]})};var S=n(8070);const k=p.ZP.div((e=>{let{theme:t}=e;return{display:"flex",alignItems:"center",justifyContent:"flex-start",padding:8,borderBottom:"1px solid ".concat(i()(t,"borderColor","#E2E2E2")),"& .fileItem":{display:"flex","& .inputItem:not(:last-of-type)":{marginBottom:0},["@media (max-width: ".concat(s.Egj.md,"px)")]:{flexFlow:"column","& .inputItem:not(:last-of-type)":{marginBottom:10}}},"& .rowActions":{display:"flex",justifyContent:"flex-end",alignItems:"center",gap:10,"@media (max-width: 900px)":{flex:1}}}})),T=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.security.enableTLS)),n=(0,l.v9)((e=>e.createTenant.fields.security.enableAutoCert)),r=(0,l.v9)((e=>e.createTenant.fields.security.enableCustomCerts)),i=(0,l.v9)((e=>e.createTenant.certificates.minioServerCertificates)),o=(0,l.v9)((e=>e.createTenant.certificates.minioClientCertificates)),c=(0,l.v9)((e=>e.createTenant.certificates.minioCAsCertificates)),d=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"security",field:t,value:n}))}),[e]);return(0,a.useEffect)((()=>{e(t?n||r?(0,u.NO)({pageName:"security",valid:!0}):(0,u.NO)({pageName:"security",valid:!1}):(0,u.NO)({pageName:"security",valid:!0}))}),[t,n,r,e]),(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsx)(s.xuv,{className:"inputItem",children:(0,v.jsx)(h.Z,{children:"Security"})}),(0,v.jsx)(s.rsf,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:t,onChange:e=>{const t=e.target.checked;d("enableTLS",t)},label:"TLS",description:"Securing all the traffic using TLS. This is required for Encryption Configuration"}),t&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.rsf,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:n,onChange:e=>{const t=e.target.checked;d("enableAutoCert",t)},label:"AutoCert",description:"The internode certificates will be generated and managed by MinIO Operator"}),(0,v.jsx)(s.rsf,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:r,onChange:e=>{const t=e.target.checked;d("enableCustomCerts",t)},label:"Custom Certificates",description:"Certificates used to terminated TLS at MinIO"}),r&&(0,v.jsxs)(a.Fragment,{children:[!n&&(0,v.jsx)(S.Z,{}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"MinIO Server Certificates"}),i.map(((t,n)=>(0,v.jsxs)(k,{children:[(0,v.jsxs)(s.rjZ,{item:!0,xs:10,className:"fileItem",children:[(0,v.jsx)(s.F5R,{onChange:(n,a,r)=>{r&&e((0,u.aN)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(n,a,r)=>{r&&e((0,u.aN)({id:t.id,key:"key",fileName:a,value:r}))},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:t.key,returnEncodedData:!0})]}),(0,v.jsxs)(s.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.Mg)())},disabled:n!==i.length-1,children:(0,v.jsx)(s.dtP,{})}),(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.XX)(t.id))},disabled:i.length<=1,children:(0,v.jsx)(s.HFL,{})})]})]},"minio-certs-".concat(t.id))))]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"MinIO Client Certificates"}),o.map(((t,n)=>(0,v.jsxs)(k,{children:[(0,v.jsxs)(s.rjZ,{item:!0,xs:10,className:"fileItem",children:[(0,v.jsx)(s.F5R,{onChange:(n,a,r)=>{r&&e((0,u.fE)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(n,a,r)=>{r&&e((0,u.fE)({id:t.id,key:"key",fileName:a,value:r}))},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:t.key,returnEncodedData:!0})]}),(0,v.jsxs)(s.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.ee)())},disabled:n!==o.length-1,children:(0,v.jsx)(s.dtP,{})}),(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.o_)(t.id))},disabled:o.length<=1,children:(0,v.jsx)(s.HFL,{})})]})]},"minio-certs-".concat(t.id))))]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"MinIO CA Certificates"}),c.map(((t,n)=>(0,v.jsxs)(k,{children:[(0,v.jsx)(s.rjZ,{item:!0,xs:6,className:"fileItem",children:(0,v.jsx)(s.F5R,{onChange:(n,a,r)=>{r&&e((0,u.Eq)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0})}),(0,v.jsx)(s.rjZ,{item:!0,xs:6,children:(0,v.jsxs)("div",{className:"rowActions",children:[(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.fK)())},disabled:n!==c.length-1,children:(0,v.jsx)(s.dtP,{})}),(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.IG)(t.id))},disabled:c.length<=1,children:(0,v.jsx)(s.HFL,{})})]})})]},"minio-CA-certs-".concat(t.id))))]})]})]})]})},N=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultEndpoint)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultEngine)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultNamespace)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultPrefix)),c=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultAppRoleEngine)),d=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultId)),p=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultSecret)),h=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultRetry)),y=(0,l.v9)((e=>e.createTenant.fields.encryption.vaultPing)),[f,j]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"vault_endpoint",required:!0,value:n},{fieldKey:"vault_id",required:!0,value:d},{fieldKey:"vault_secret",required:!0,value:p},{fieldKey:"vault_ping",required:!1,value:y,customValidation:parseInt(y)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:h,customValidation:parseInt(h)<0,customValidationMessage:"Value needs to be 0 or greater"}]);const r=(0,x.R)(a);e((0,u.NO)({pageName:"encryption",valid:0===Object.keys(r).length})),j(r)}),[t,n,r,d,p,y,h,e]);const C=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]),b=e=>{j((0,g.h)(f,e))};return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"vault_endpoint",name:"vault_endpoint",onChange:e=>{C("vaultEndpoint",e.target.value),b("vault_endpoint")},label:"Endpoint",tooltip:"Endpoint is the Hashicorp Vault endpoint",value:n,error:f.vault_endpoint||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"vault_engine",name:"vault_engine",onChange:e=>{C("vaultEngine",e.target.value),b("vault_engine")},label:"Engine",tooltip:"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'",value:r}),(0,v.jsx)(s.Wzg,{id:"vault_namespace",name:"vault_namespace",onChange:e=>{C("vaultNamespace",e.target.value)},label:"Namespace",tooltip:"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.",value:i}),(0,v.jsx)(s.Wzg,{id:"vault_prefix",name:"vault_prefix",onChange:e=>{C("vaultPrefix",e.target.value)},label:"Prefix",tooltip:"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level",value:o}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"App Role"}),(0,v.jsx)(s.Wzg,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:e=>{C("vaultAppRoleEngine",e.target.value)},label:"Engine",tooltip:"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'",value:c}),(0,v.jsx)(s.Wzg,{id:"vault_id",name:"vault_id",onChange:e=>{C("vaultId",e.target.value),b("vault_id")},label:"AppRole ID",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:d,error:f.vault_id||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"vault_secret",name:"vault_secret",onChange:e=>{C("vaultSecret",e.target.value),b("vault_secret")},label:"AppRole Secret",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:p,error:f.vault_secret||"",required:!0}),(0,v.jsx)(s.Wzg,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:e=>{C("vaultRetry",e.target.value),b("vault_retry")},label:"Retry (Seconds)",value:h,error:f.vault_retry||""})]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Status"}),(0,v.jsx)(s.Wzg,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:e=>{C("vaultPing",e.target.value),b("vault_ping")},label:"Ping (Seconds)",value:y,error:f.vault_ping||""})]})]})},I=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.azureEndpoint)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.azureTenantID)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.azureClientID)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.azureClientSecret)),[c,d]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"azure_endpoint",required:!0,value:n},{fieldKey:"azure_tenant_id",required:!0,value:r},{fieldKey:"azure_client_id",required:!0,value:i},{fieldKey:"azure_client_secret",required:!0,value:o}]);const s=(0,x.R)(a);e((0,u.NO)({pageName:"encryption",valid:0===Object.keys(s).length})),d(s)}),[t,n,r,i,o,e]);const p=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]),h=e=>{d((0,g.h)(c,e))};return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"azure_endpoint",name:"azure_endpoint",onChange:e=>{p("azureEndpoint",e.target.value),h("azure_endpoint")},label:"Endpoint",tooltip:"Endpoint is the Azure KeyVault endpoint",value:n,error:c.azure_endpoint||""}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Credentials"}),(0,v.jsx)(s.Wzg,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:e=>{p("azureTenantID",e.target.value),h("azure_tenant_id")},label:"Tenant ID",tooltip:"TenantID is the ID of the Azure KeyVault tenant",value:r,error:c.azure_tenant_id||""}),(0,v.jsx)(s.Wzg,{id:"azure_client_id",name:"azure_client_id",onChange:e=>{p("azureClientID",e.target.value),h("azure_client_id")},label:"Client ID",tooltip:"ClientID is the ID of the client accessing Azure KeyVault",value:i,error:c.azure_client_id||""}),(0,v.jsx)(s.Wzg,{id:"azure_client_secret",name:"azure_client_secret",onChange:e=>{p("azureClientSecret",e.target.value),h("azure_client_secret")},label:"Client Secret",tooltip:"ClientSecret is the client secret accessing the Azure KeyVault",value:o,error:c.azure_client_secret||""})]})]})},A=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpProjectID)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpEndpoint)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpClientEmail)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpClientID)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpPrivateKeyID)),c=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpPrivateKey)),d=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]);return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"gcp_project_id",name:"gcp_project_id",onChange:e=>{d("gcpProjectID",e.target.value)},label:"Project ID",tooltip:"ProjectID is the GCP project ID.",value:t}),(0,v.jsx)(s.Wzg,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:e=>{d("gcpEndpoint",e.target.value)},label:"Endpoint",tooltip:"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443",value:n}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Credentials"}),(0,v.jsx)(s.Wzg,{id:"gcp_client_email",name:"gcp_client_email",onChange:e=>{d("gcpClientEmail",e.target.value)},label:"Client Email",tooltip:"Is the Client email of the GCP service account used to access the SecretManager",value:r}),(0,v.jsx)(s.Wzg,{id:"gcp_client_id",name:"gcp_client_id",onChange:e=>{d("gcpClientID",e.target.value)},label:"Client ID",tooltip:"Is the Client ID of the GCP service account used to access the SecretManager",value:i}),(0,v.jsx)(s.Wzg,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:e=>{d("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",tooltip:"Is the private key ID of the GCP service account used to access the SecretManager",value:o}),(0,v.jsx)(s.Wzg,{id:"gcp_private_key",name:"gcp_private_key",onChange:e=>{d("gcpPrivateKey",e.target.value)},label:"Private Key",tooltip:"Is the private key of the GCP service account used to access the SecretManager",value:c})]})]})},D=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.gemaltoEndpoint)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.gemaltoToken)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.gemaltoDomain)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.gemaltoRetry)),[c,d]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"gemalto_endpoint",required:!0,value:n},{fieldKey:"gemalto_token",required:!0,value:r},{fieldKey:"gemalto_domain",required:!0,value:i},{fieldKey:"gemalto_retry",required:!1,value:o,customValidation:parseInt(o)<0,customValidationMessage:"Value needs to be 0 or greater"}]);const s=(0,x.R)(a);e((0,u.NO)({pageName:"encryption",valid:0===Object.keys(s).length})),d(s)}),[t,n,r,i,o,e]);const p=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]),h=e=>{d((0,g.h)(c,e))};return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:e=>{p("gemaltoEndpoint",e.target.value),h("gemalto_endpoint")},label:"Endpoint",tooltip:"Endpoint is the endpoint to the KeySecure server",value:n,error:c.gemalto_endpoint||"",required:!0}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Credentials"}),(0,v.jsx)(s.Wzg,{id:"gemalto_token",name:"gemalto_token",onChange:e=>{p("gemaltoToken",e.target.value),h("gemalto_token")},label:"Token",tooltip:"Token is the refresh authentication token to access the KeySecure server",value:r,error:c.gemalto_token||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"gemalto_domain",name:"gemalto_domain",onChange:e=>{p("gemaltoDomain",e.target.value),h("gemalto_domain")},label:"Domain",tooltip:"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain",value:i,error:c.gemalto_domain||"",required:!0}),(0,v.jsx)(s.Wzg,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:e=>{p("gemaltoRetry",e.target.value),h("gemalto_retry")},label:"Retry (seconds)",value:o,error:c.gemalto_retry||""})]})]})},w=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.awsEndpoint)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.awsRegion)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.awsKMSKey)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.awsAccessKey)),c=(0,l.v9)((e=>e.createTenant.fields.encryption.awsSecretKey)),d=(0,l.v9)((e=>e.createTenant.fields.encryption.awsToken)),[p,h]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"aws_endpoint",required:!0,value:n},{fieldKey:"aws_region",required:!0,value:r},{fieldKey:"aws_accessKey",required:!0,value:o},{fieldKey:"aws_secretKey",required:!0,value:c}]);const i=(0,x.R)(a);e((0,u.NO)({pageName:"encryption",valid:0===Object.keys(i).length})),h(i)}),[t,n,r,c,o,e]);const y=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]),f=e=>{h((0,g.h)(p,e))};return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"aws_endpoint",name:"aws_endpoint",onChange:e=>{y("awsEndpoint",e.target.value),f("aws_endpoint")},label:"Endpoint",tooltip:"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com",value:n,error:p.aws_endpoint||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"aws_region",name:"aws_region",onChange:e=>{y("awsRegion",e.target.value),f("aws_region")},label:"Region",tooltip:"Region is the AWS region the SecretsManager is located",value:r,error:p.aws_region||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:e=>{y("awsKMSKey",e.target.value)},label:"KMS Key",tooltip:"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used",value:i}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Credentials"}),(0,v.jsx)(s.Wzg,{id:"aws_accessKey",name:"aws_accessKey",onChange:e=>{y("awsAccessKey",e.target.value),f("aws_accessKey")},label:"Access Key",tooltip:"AccessKey is the access key for authenticating to AWS",value:o,error:p.aws_accessKey||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"aws_secretKey",name:"aws_secretKey",onChange:e=>{y("awsSecretKey",e.target.value),f("aws_secretKey")},label:"Secret Key",tooltip:"SecretKey is the secret key for authenticating to AWS",value:c,error:p.aws_secretKey||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"aws_token",name:"aws_token",tooltip:"SessionToken is an optional session token for authenticating to AWS when using STS",onChange:e=>{y("awsToken",e.target.value)},label:"Token",value:d})]})]})},z=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.encryption.replicas)),n=(0,l.v9)((e=>e.createTenant.fields.encryption.rawConfiguration)),r=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionTab)),i=(0,l.v9)((e=>e.createTenant.fields.encryption.enableEncryption)),o=(0,l.v9)((e=>e.createTenant.fields.encryption.encryptionType)),c=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpProjectID)),d=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpEndpoint)),p=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpClientEmail)),y=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpClientID)),f=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpPrivateKeyID)),j=(0,l.v9)((e=>e.createTenant.fields.encryption.gcpPrivateKey)),C=(0,l.v9)((e=>e.createTenant.fields.encryption.enableCustomCertsForKES)),b=(0,l.v9)((e=>e.createTenant.fields.security.enableAutoCert)),_=(0,l.v9)((e=>e.createTenant.fields.security.enableTLS)),S=(0,l.v9)((e=>e.createTenant.certificates.minioServerCertificates)),k=(0,l.v9)((e=>e.createTenant.certificates.kesServerCertificate)),T=(0,l.v9)((e=>e.createTenant.certificates.minioMTLSCertificate)),z=(0,l.v9)((e=>e.createTenant.certificates.kmsMTLSCertificate)),P=(0,l.v9)((e=>e.createTenant.certificates.kmsCA)),R=(0,l.v9)((e=>e.createTenant.fields.security.enableCustomCerts)),K=(0,l.v9)((e=>e.createTenant.fields.encryption.kesSecurityContext)),[E,L]=(0,a.useState)({});let F=!1;_&&(b||S&&S.filter((e=>e.encoded_key&&e.encoded_cert)).length>0)&&(F=!0);const U=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"encryption",field:t,value:n}))}),[e]),O=e=>{L((0,g.h)(E,e))};return(0,a.useEffect)((()=>{let a=[];i&&(a=[{fieldKey:"rawConfiguration",required:"kms-raw-configuration"===r,value:n},{fieldKey:"replicas",required:!0,value:t,customValidation:parseInt(t)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:K.runAsUser,customValidation:""===K.runAsUser||parseInt(K.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:K.runAsGroup,customValidation:""===K.runAsGroup||parseInt(K.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:K.fsGroup,customValidation:""===K.fsGroup||parseInt(K.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}],R&&(a=[...a,{fieldKey:"serverKey",required:!b,value:k.encoded_key},{fieldKey:"serverCert",required:!b,value:k.encoded_cert},{fieldKey:"clientKey",required:!b,value:T.encoded_key},{fieldKey:"clientCert",required:!b,value:T.encoded_cert}]));const s=(0,x.R)(a);e((0,u.NO)({pageName:"encryption",valid:0===Object.keys(s).length})),L(s)}),[n,r,i,o,c,d,p,y,f,j,e,b,R,k.encoded_key,k.encoded_cert,T.encoded_key,T.encoded_cert,K,t]),(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,sx:{"& .tabs-container":{height:"inherit"},"& .rightSpacer":{marginRight:15},"& .responsiveContainer":{"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}},"& .multiContainer":{display:"flex",alignItems:"center",justifyContent:"flex-start"}},children:[(0,v.jsxs)(s.xuv,{className:"inputItem",sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,v.jsx)(h.Z,{children:"Encryption"}),(0,v.jsx)(s.rsf,{label:"",indicatorLabels:["Enabled","Disabled"],checked:i,value:"tenant_encryption",id:"tenant-encryption",name:"tenant-encryption",onChange:e=>{const t=e.target.checked;U("enableEncryption",t)},description:"",disabled:!F})]}),(0,v.jsx)(s.xuv,{className:"muted inputItem",children:"MinIO Server-Side Encryption (SSE) protects objects as part of write operations, allowing clients to take advantage of server processing power to secure objects at the storage layer (encryption-at-rest). SSE also provides key functionality to regulatory and compliance requirements around secure locking and erasure."}),(0,v.jsx)("hr",{}),i&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.mQc,{horizontal:!0,currentTabOrPath:r,onTabClick:e=>{U("encryptionTab",e)},sx:{height:"initial"},options:[{tabConfig:{label:"Options",id:"kms-options"},content:(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Eep,{currentValue:o,id:"encryptionType",name:"encryptionType",label:"KMS",onChange:e=>{U("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]}),"vault"===o&&(0,v.jsx)(N,{}),"azure"===o&&(0,v.jsx)(I,{}),"gcp"===o&&(0,v.jsx)(A,{}),"aws"===o&&(0,v.jsx)(w,{}),"gemalto"===o&&(0,v.jsx)(D,{})]})},{tabConfig:{label:"Raw Edit",id:"kms-raw-configuration"},content:(0,v.jsx)(a.Fragment,{children:(0,v.jsx)(s.rjZ,{item:!0,xs:12,children:(0,v.jsx)(s.pq4,{value:n,mode:"yaml",onChange:e=>{U("rawConfiguration",e)},editorHeight:"550px"})})})}]}),(0,v.jsx)(s.AG2,{label:"Additional Configurations",sx:{margin:"0px 0px 10px"}}),(0,v.jsx)(s.rsf,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:C||!b,onChange:e=>{const t=e.target.checked;U("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!b}),(C||!b)&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"Encryption server certificates"}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.uN)({key:"key",fileName:n,value:a})),O("serverKey"))},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:E.serverKey||"",value:k.key,required:!b,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.uN)({key:"cert",fileName:n,value:a})),O("serverCert"))},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:E.serverCert||"",value:k.cert,required:!b,returnEncodedData:!0})]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"MinIO mTLS certificates (connection between MinIO and the Encryption server)"}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.Ud)({key:"key",fileName:n,value:a})),O("clientKey"))},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:E.clientKey||"",value:T.key,required:!b,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.Ud)({key:"cert",fileName:n,value:a})),O("clientCert"))},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:E.clientCert||"",value:T.cert,required:!b,returnEncodedData:!0})]}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"KMS mTLS certificates (connection between the Encryption server and the KMS)"}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.Tr)({key:"key",fileName:n,value:a})),O("vault_key"))},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:z.key,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.Tr)({key:"cert",fileName:n,value:a})),O("vault_cert"))},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:z.cert,returnEncodedData:!0}),(0,v.jsx)(s.F5R,{onChange:(t,n,a)=>{a&&(e((0,u.b9)({fileName:n,value:a})),O("vault_ca"))},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:P.cert,returnEncodedData:!0})]})]}),(0,v.jsx)(s.Wzg,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:e=>{U("replicas",e.target.value),O("replicas")},label:"Replicas",value:t,required:!0,error:E.replicas||"",sx:{marginBottom:10}}),(0,v.jsxs)("fieldset",{className:"inputItem",children:[(0,v.jsx)("legend",{children:"SecurityContext for KES pods"}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,children:(0,v.jsxs)("div",{className:"multiContainer responsiveContainer",children:[(0,v.jsx)("div",{className:"rightSpacer",children:(0,v.jsx)(s.Wzg,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:e=>{U("kesSecurityContext",{...K,runAsUser:e.target.value}),O("kes_securityContext_runAsUser")},label:"Run As User",value:K.runAsUser,required:!0,error:E.kes_securityContext_runAsUser||"",min:"0"})}),(0,v.jsx)("div",{className:"rightSpacer",children:(0,v.jsx)(s.Wzg,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:e=>{U("kesSecurityContext",{...K,runAsGroup:e.target.value}),O("kes_securityContext_runAsGroup")},label:"Run As Group",value:K.runAsGroup,required:!0,error:E.kes_securityContext_runAsGroup||"",min:"0"})})]})}),(0,v.jsx)("br",{}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,children:(0,v.jsxs)("div",{className:"multiContainer responsiveContainer",children:[(0,v.jsx)("div",{className:"rightSpacer",children:(0,v.jsx)(s.Wzg,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:e=>{U("kesSecurityContext",{...K,fsGroup:e.target.value}),O("kes_securityContext_fsGroup")},label:"FsGroup",value:K.fsGroup,required:!0,error:E.kes_securityContext_fsGroup||"",min:"0"})}),(0,v.jsx)("div",{className:"rightSpacer",children:(0,v.jsx)(s.PhF,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:K.fsGroupChangePolicy,onChange:e=>{U("kesSecurityContext",{...K,fsGroupChangePolicy:e})},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,v.jsx)("br",{}),(0,v.jsx)(s.rsf,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:K.runAsNonRoot,onChange:e=>{const t=e.target.checked;U("kesSecurityContext",{...K,runAsNonRoot:t})},label:"Do not run as Root"})]})]})]})};var P=n(7995),R=n(1207),K=n(5660);const E=p.ZP.div((()=>({"& .overlayAction":{marginLeft:10,display:"flex",alignItems:"center"},"& .affinityConfigField":{display:"flex"},"& .affinityFieldLabel":{display:"flex",flexFlow:"column",flex:1},"& .affinityLabelKey":{"& div:first-child":{marginBottom:0}},"& .affinityLabelValue":{marginLeft:10,"& div:first-child":{marginBottom:0}},"& .rowActions":{display:"flex",alignItems:"center"},"& .affinityRow":{marginBottom:10,display:"flex"}}))),L=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.affinity.podAffinity)),n=(0,l.v9)((e=>e.createTenant.fields.affinity.nodeSelectorLabels)),r=(0,l.v9)((e=>e.createTenant.fields.affinity.withPodAntiAffinity)),i=(0,l.v9)((e=>e.createTenant.nodeSelectorPairs)),o=(0,l.v9)((e=>e.createTenant.tolerations)),[c,d]=(0,a.useState)({}),[p,g]=(0,a.useState)(!0),[y,f]=(0,a.useState)({}),[j,C]=(0,a.useState)([]),b=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"affinity",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{p&&R.Z.invoke("GET","/api/v1/nodes/labels").then((e=>{g(!1),f(e);let t=[];for(let n in e)t.push({label:n,value:n});C(t)})).catch((t=>{g(!1),e((0,P.zb)(t)),f({})}))}),[e,p]),(0,a.useEffect)((()=>{if(i){const e=i.filter((e=>""!==e.key)).map((e=>"".concat(e.key,"=").concat(e.value))).filter(((e,t,n)=>n.indexOf(e)===t)).join("&");b("nodeSelectorLabels",e)}}),[i,b]),(0,a.useEffect)((()=>{let a=[];if("nodeSelector"===t){let e=!0;const t=n.split("&");1===t.length&&""===t[0]&&(e=!1),t.forEach(((n,a)=>{const r=n.split("=");2!==r.length&&(e=!1),a+1!==t.length&&(""!==r[0]&&""!==r[1]||(e=!1))})),a=[...a,{fieldKey:"labels",required:!0,value:n,customValidation:!e,customValidationMessage:"You need to add at least one label key-pair"}]}const r=(0,x.R)(a);e((0,u.NO)({pageName:"affinity",valid:0===Object.keys(r).length})),d(r)}),[e,t,n]);const _=(t,n,a)=>{const r={...o[t],[n]:a};e((0,u.iU)({index:t,tolerationValue:r}))};return(0,v.jsx)(E,{children:(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Pod Placement"}),(0,v.jsx)("span",{className:"muted",children:"Configure how pods will be assigned to nodes"})]}),(0,v.jsx)(s.xuv,{children:(0,v.jsx)(s.AZs,{children:"Type"})}),(0,v.jsx)(s.xuv,{className:"muted inputItem",children:"MinIO supports multiple configurations for Pod Affinity"}),(0,v.jsx)(s.Eep,{currentValue:t,id:"affinity-options",name:"affinity-options",label:" ",onChange:e=>{b("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}],displayInColumn:!0}),"nodeSelector"===t&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.rsf,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:r,onChange:e=>{const t=e.target.checked;b("withPodAntiAffinity",t)},label:"With Pod Anti-Affinity"}),(0,v.jsxs)(s.xuv,{className:"inputBox",children:[(0,v.jsx)("h3",{children:"Labels"}),(0,v.jsx)("span",{className:"error",children:c.labels}),(0,v.jsx)(s.rjZ,{container:!0,children:i&&i.map(((t,n)=>(0,v.jsxs)(s.rjZ,{item:!0,xs:12,className:"affinityRow",children:[(0,v.jsxs)(s.rjZ,{item:!0,xs:5,className:"affinityLabelKey",children:[j.length>0&&(0,v.jsx)(s.PhF,{onChange:t=>{const a={key:t,value:y[t][0]},r=[...i];r[n]=a,e((0,u.i$)(r))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.key,options:j}),0===j.length&&(0,v.jsx)(s.Wzg,{id:"nodeselector-key-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.key,onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t.target.value},e((0,u.i$)(a))},index:n,placeholder:"Key"})]}),(0,v.jsxs)(s.rjZ,{item:!0,xs:5,className:"affinityLabelValue",children:[j.length>0&&(0,v.jsx)(s.PhF,{onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t},e((0,u.i$)(a))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.value,options:y[t.key]?y[t.key].map((e=>({label:e,value:e}))):[]}),0===j.length&&(0,v.jsx)(s.Wzg,{id:"nodeselector-value-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.value,onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t.target.value},e((0,u.i$)(a))},index:n,placeholder:"value"})]}),(0,v.jsxs)(s.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{const t=[...i];j.length>0?t.push({key:j[0].value,value:y[j[0].value][0]}):t.push({key:"",value:""}),e((0,u.i$)(t))},disabled:n!==i.length-1,children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{const t=i.filter(((e,t)=>t!==n));e((0,u.i$)(t))},disabled:i.length<=1,children:(0,v.jsx)(s.HFL,{})})})]})]},"affinity-keyVal-".concat(n.toString()))))})]})]}),(0,v.jsx)(s.rjZ,{item:!0,xs:12,className:"affinityConfigField",children:(0,v.jsxs)(s.rjZ,{item:!0,className:"affinityFieldLabel",children:[(0,v.jsx)("h3",{children:"Tolerations"}),(0,v.jsx)("span",{className:"error",children:c.tolerations}),(0,v.jsx)(s.rjZ,{container:!0,children:o&&o.map(((t,n)=>{var a;return(0,v.jsxs)(s.rjZ,{item:!0,xs:12,className:"affinityRow",children:[(0,v.jsx)(K.Z,{effect:t.effect,onEffectChange:e=>{_(n,"effect",e)},tolerationKey:t.key,onTolerationKeyChange:e=>{_(n,"key",e)},operator:t.operator,onOperatorChange:e=>{_(n,"operator",e)},value:t.value,onValueChange:e=>{_(n,"value",e)},tolerationSeconds:(null===(a=t.tolerationSeconds)||void 0===a?void 0:a.seconds)||0,onSecondsChange:e=>{_(n,"tolerationSeconds",{seconds:e})},index:n}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>{e((0,u.ly)())},disabled:n!==o.length-1,children:(0,v.jsx)(s.dtP,{})})}),(0,v.jsx)(s.xuv,{className:"overlayAction",children:(0,v.jsx)(s.hU,{size:"small",onClick:()=>e((0,u.JX)(n)),disabled:o.length<=1,children:(0,v.jsx)(s.HFL,{})})})]},"affinity-keyVal-".concat(n.toString()))}))})]})})]})})},F=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.configure.customImage)),n=(0,l.v9)((e=>e.createTenant.fields.configure.imageName)),r=(0,l.v9)((e=>e.createTenant.fields.configure.customDockerhub)),i=(0,l.v9)((e=>e.createTenant.fields.configure.imageRegistry)),o=(0,l.v9)((e=>e.createTenant.fields.configure.imageRegistryUsername)),c=(0,l.v9)((e=>e.createTenant.fields.configure.imageRegistryPassword)),d=(0,l.v9)((e=>e.createTenant.fields.configure.tenantCustom)),p=(0,l.v9)((e=>e.createTenant.fields.configure.kesImage)),[y,f]=(0,a.useState)({}),j=(0,a.useCallback)(((t,n)=>{e((0,u.HM)({pageName:"configure",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{let a=[];t&&(a=[...a,{fieldKey:"image",required:!1,value:n,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"kesImage",required:!1,value:p,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"}],r&&(a=[...a,{fieldKey:"registry",required:!0,value:i},{fieldKey:"registryUsername",required:!0,value:o},{fieldKey:"registryPassword",required:!0,value:c}]));const s=(0,x.R)(a);e((0,u.NO)({pageName:"configure",valid:0===Object.keys(s).length})),f(s)}),[t,n,p,r,i,o,c,e,d]);const C=e=>{f((0,g.h)(y,e))};return(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Container Images"}),(0,v.jsx)("span",{className:"muted",children:"Specify the container images used by the Tenant and its features."})]}),(0,v.jsx)(s.Wzg,{id:"image",name:"image",onChange:e=>{j("imageName",e.target.value),C("image")},label:"MinIO",value:n,error:y.image||"",placeholder:"minio/minio:RELEASE.2024-03-05T04-48-44Z"}),(0,v.jsx)(s.Wzg,{id:"kesImage",name:"kesImage",onChange:e=>{j("kesImage",e.target.value),C("kesImage")},label:"KES",value:p,error:y.kesImage||"",placeholder:"minio/kes:2024-03-01T18-06-46Z"}),t&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.xuv,{className:"inputItem",children:(0,v.jsx)("h4",{children:"Custom Container Registry"})}),(0,v.jsx)(s.rsf,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:r,onChange:e=>{const t=e.target.checked;j("customDockerhub",t)},label:"Use a private container registry"})]}),r&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.Wzg,{id:"registry",name:"registry",onChange:e=>{j("imageRegistry",e.target.value)},label:"Endpoint",value:i,error:y.registry||"",placeholder:"https://index.docker.io/v1/",required:!0}),(0,v.jsx)(s.Wzg,{id:"registryUsername",name:"registryUsername",onChange:e=>{j("imageRegistryUsername",e.target.value)},label:"Username",value:o,error:y.registryUsername||"",required:!0}),(0,v.jsx)(s.Wzg,{id:"registryPassword",name:"registryPassword",onChange:e=>{j("imageRegistryPassword",e.target.value)},label:"Password",value:c,error:y.registryPassword||"",required:!0})]})]})};var U=n(5248);const O=()=>{const e=(0,l.v9)((e=>e.createTenant.fields.tenantSize.nodes)),t=(0,l.v9)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequest)),n=(0,l.v9)((e=>e.createTenant.fields.tenantSize.ecParity)),r=(0,l.v9)((e=>e.createTenant.fields.tenantSize.distribution)),i=(0,l.v9)((e=>e.createTenant.fields.tenantSize.ecParityCalc)),o=(0,l.v9)((e=>e.createTenant.fields.tenantSize.resourcesCPURequest)),c=(0,l.v9)((e=>e.createTenant.fields.tenantSize.integrationSelection)),d=i.storageFactors.find((e=>e.erasureCode===n));return(0,v.jsxs)(s.xuv,{sx:{margin:4,"& table":{fontSize:13,"& td":{padding:8}}},children:[(0,v.jsx)(s.AG2,{label:"Resource Allocation",sx:{margin:4,padding:"5px 0"}}),(0,v.jsx)(s.iA_,{children:(0,v.jsxs)(s.RMI,{children:[(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Number of Servers"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:parseInt(e)>0?e:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Drives per Server"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:r?r.disks:"-"})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Drive Capacity"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:r?(0,U.ae)(r.pvSize):"-"})]})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Total Volumes"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:r?r.persistentVolumes:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Memory per Node"}),(0,v.jsxs)(s.pj1,{sx:{textAlign:"right"},children:[t," Gi"]})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{style:{borderBottom:0},scope:"row",children:"CPU Selection"}),(0,v.jsx)(s.pj1,{style:{borderBottom:0},sx:{textAlign:"right"},children:o})]})]})]})}),0===i.error&&d&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.AG2,{label:"Erasure Code Configuration",sx:{margin:4,padding:"5px 0"}}),(0,v.jsx)(s.iA_,{children:(0,v.jsxs)(s.RMI,{children:[(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"EC Parity"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:""!==n?n:"-"})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Raw Capacity"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:(0,U.ae)(i.rawCapacity)})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Usable Capacity"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:n===U.Xu?(0,U.ae)(i.rawCapacity):(0,U.ae)(d.maxCapacity)})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{style:{borderBottom:0},scope:"row",children:"Server Failures Tolerated"}),(0,v.jsx)(s.pj1,{style:{borderBottom:0},sx:{textAlign:"right"},children:n===U.Xu?0:r&&r.disks>0&&d.maxFailureTolerations?Math.floor(d.maxFailureTolerations/r.disks):"-"})]})]})})]}),""!==c.typeSelection&&""!==c.storageClass&&(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(s.AG2,{label:"Single Instance Configuration",sx:{margin:4,padding:"5px 0"}}),(0,v.jsx)(s.iA_,{children:(0,v.jsxs)(s.RMI,{children:[(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"CPU"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:0!==c.CPU?c.CPU:"-"})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Memory"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:0!==c.memory?"".concat(c.memory," Gi"):"-"})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{scope:"row",children:"Drives per Server"}),(0,v.jsx)(s.pj1,{sx:{textAlign:"right"},children:0!==c.drivesPerServer?"".concat(c.drivesPerServer):"-"})]}),(0,v.jsxs)(s.SCH,{children:[(0,v.jsx)(s.pj1,{style:{borderBottom:0},scope:"row",children:"Drive Size"}),(0,v.jsxs)(s.pj1,{style:{borderBottom:0},sx:{textAlign:"right"},children:[c.driveSize.driveSize,c.driveSize.sizeUnit]})]})]})})]})]})};var G=n(9720),M=n(8573),q=n.n(M),W=n(8222),B=n(3508);const Z=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.nameTenant.namespace)),n=(0,l.v9)((e=>e.createTenant.addNSLoading)),r=(0,l.v9)((e=>e.createTenant.addNSOpen));return(0,v.jsx)(B.Z,{title:"New namespace",confirmText:"Create",confirmButtonProps:{variant:"callAction"},isOpen:r,titleIcon:(0,v.jsx)(s.EjK,{}),isLoading:n,onConfirm:()=>{e((0,W.QD)())},onClose:()=>{e((0,u.pb)())},confirmationContent:(0,v.jsxs)(a.Fragment,{children:[n&&(0,v.jsx)(s.kod,{}),"Are you sure you want to add a namespace called",(0,v.jsx)("br",{}),(0,v.jsx)("b",{style:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},children:t}),"?"]})})},V=e=>{let{formToRender:t}=e;const n=(0,m.TL)(),r=(0,l.v9)((e=>e.createTenant.fields.nameTenant.namespace)),i=(0,l.v9)((e=>e.createTenant.showNSCreateButton)),o=(0,l.v9)((e=>e.createTenant.validationErrors.namespace)),c=(0,l.v9)((e=>e.createTenant.addNSOpen)),d=(0,a.useMemo)((()=>q()((()=>{n((0,W.IO)())}),500)),[n]);(0,a.useEffect)((()=>{if(""!==r)return d(),d.cancel}),[d,r]);return(0,v.jsxs)(a.Fragment,{children:[c&&(0,v.jsx)(Z,{}),(0,v.jsx)(s.Wzg,{id:"namespace",name:"namespace",onChange:e=>{n((0,u.Zx)(e.target.value))},label:"Namespace",value:r,error:o||"",overlayIcon:i?(0,v.jsx)(s.dtP,{}):null,overlayAction:()=>{n((0,u.Oj)())},required:!0})]})},H=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.fields.nameTenant.tenantName)),n=(0,l.v9)((e=>e.createTenant.validationErrors["tenant-name"]));return(0,v.jsx)(s.Wzg,{id:"tenant-name",name:"tenant-name",onChange:t=>{e((0,u.V7)(t.target.value))},label:"Name",value:t,required:!0,error:n||""})},$=e=>{let{formToRender:t}=e;const n=(0,m.TL)(),r=(0,l.v9)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),o=(0,l.v9)((e=>e.createTenant.fields.nameTenant.selectedStorageType)),p=(0,l.v9)((e=>e.createTenant.storageClasses)),g=(0,l.v9)(d.$4),x=(0,a.useCallback)(((e,t)=>{n((0,u.HM)({pageName:"nameTenant",field:e,value:t}))}),[n]);return(0,a.useEffect)((()=>{const e=t===c.cy.default&&p.length>0||t!==c.cy.default&&""!==o;n((0,u.NO)({pageName:"nameTenant",valid:e}))}),[p,n,o,t]),(0,v.jsx)(a.Fragment,{children:(0,v.jsxs)(s.rjZ,{container:!0,sx:{justifyContent:"space-between"},children:[(0,v.jsx)(s.rjZ,{item:!0,sx:{width:"calc(100% - 320px)"},children:(0,v.jsx)(s.xuv,{sx:{minHeight:550},children:(0,v.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[(0,v.jsxs)(s.xuv,{className:"inputItem",children:[(0,v.jsx)(h.Z,{children:"Name"}),(0,v.jsx)("span",{className:"muted",children:"How would you like to name this new tenant?"})]}),(0,v.jsx)(H,{}),(0,v.jsx)(V,{formToRender:t}),t===c.cy.default?(0,v.jsx)(s.PhF,{id:"storage_class",name:"storage_class",onChange:e=>{x("selectedStorageClass",e)},label:"Storage Class",value:r,options:p,disabled:p.length<1}):(0,v.jsx)(s.PhF,{id:"storage_type",name:"storage_type",onChange:e=>{n((0,u.Qy)({storageType:e,features:g}))},label:i()(c.Hd,"".concat(t,".variantSelectorLabel"),"Storage Type"),value:o,options:i()(c.Hd,"".concat(t,".variantSelectorValues"),[])}),t===c.cy.default?(0,v.jsx)(G.Z,{}):i()(c.Hd,"".concat(t,".sizingComponent"),null)]})})}),(0,v.jsx)(s.rjZ,{item:!0,xs:"hidden",sm:"hidden",children:(0,v.jsx)(s.xuv,{sx:{marginLeft:10,padding:2,marginTop:20},withBorders:!0,useBackground:!0,children:(0,v.jsx)(O,{})})})]})})},Y=()=>{const e=(0,l.v9)(d.$4),[t,n]=(0,a.useState)(null);return(0,a.useEffect)((()=>{let t=c.cy.default;if(e&&0!==e.length){Object.keys(c.I8).forEach((n=>{e.includes(n)&&(t=i()(c.I8,n,c.cy.default))}))}n(t)}),[e]),null===t?null:(0,v.jsx)($,{formToRender:t})},X=["nameTenant","tenantSize","configure","affinity","identityProvider","security","encryption"];var Q=n(4218);const J=()=>{const e=(0,m.TL)(),t=(0,l.v9)((e=>e.createTenant.addingTenant)),n=(0,l.v9)((e=>e.createTenant.validPages)),a=(0,l.v9)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),r=!t&&""!==a&&X.every((e=>n.includes(e)));return(0,v.jsx)(s.zxk,{id:"wizard-button-Create",variant:"callAction",color:"primary",onClick:()=>{e((0,Q.e)())},disabled:!r,label:"Create"},"button-AddTenant-Create")};var ee=n(7798);const te=()=>{const e=(0,m.TL)(),t=(0,o.s0)(),n=(0,l.v9)((e=>e.createTenant.showNewCredentials)),r=(0,l.v9)((e=>e.createTenant.createdAccount));return(0,v.jsx)(a.Fragment,{children:n&&(0,v.jsx)(ee.default,{newServiceAccount:r,open:n,closeModal:()=>{e((0,u.dS)()),t("/tenants")},entity:"Tenant"})})};var ne=n(9435);const ae=()=>{const e=(0,m.TL)(),t=(0,o.s0)(),n=(0,l.v9)(d.$4),r=(0,l.v9)((e=>e.createTenant.addingTenant)),[p,g]=(0,a.useState)(null);(0,a.useEffect)((()=>{let e=c.cy.default;if(n&&0!==n.length){Object.keys(c.I8).forEach((t=>{n.includes(t)&&(e=i()(c.I8,t,c.cy.default))}))}g(e)}),[n]);const x={label:"Cancel",type:"custom",enabled:!0,action:()=>{e((0,u.dS)()),t("/tenants")}},h={componentRender:(0,v.jsx)(J,{},"create-tenant")},y=[{label:"Setup",componentRender:(0,v.jsx)(Y,{}),buttons:[x,h]},{label:"Configure",advancedOnly:!0,componentRender:(0,v.jsx)(f,{}),buttons:[x,h]},{label:"Images",advancedOnly:!0,componentRender:(0,v.jsx)(F,{}),buttons:[x,h]},{label:"Pod Placement",advancedOnly:!0,componentRender:(0,v.jsx)(L,{}),buttons:[x,h]},{label:"Identity Provider",advancedOnly:!0,componentRender:(0,v.jsx)(_,{}),buttons:[x,h]},{label:"Security",advancedOnly:!0,componentRender:(0,v.jsx)(T,{}),buttons:[x,h]},{label:"Encryption",advancedOnly:!0,componentRender:(0,v.jsx)(z,{}),buttons:[x,h]}];return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(te,{}),(0,v.jsx)(ne.Z,{label:(0,v.jsx)(s.hbI,{onClick:()=>{e((0,u.dS)()),t("/tenants")},label:"Tenants"})}),(0,v.jsxs)(s.Xgh,{variant:"constrained",children:[r&&(0,v.jsx)(s.rjZ,{item:!0,xs:12,children:(0,v.jsx)(s.kod,{})}),(0,v.jsx)(s.xuv,{withBorders:!0,customBorderPadding:"0px",sx:{"& .muted":{fontSize:13}},children:(0,v.jsx)(s.ent,{wizardSteps:y,linearMode:!1})}),p===c.cy.aws&&(0,v.jsx)(s.rjZ,{item:!0,xs:12,style:{marginTop:16},children:(0,v.jsx)(s.KfX,{title:"EBS Volume Configuration.",iconComponent:(0,v.jsx)(s.idV,{}),help:(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)("b",{children:"Performance Optimized"}),": Uses the ",(0,v.jsx)("i",{children:"gp3"})," EBS storage class class configured at 1,000Mi/s throughput and 16,000 IOPS, however the minimum volume size for this type of EBS volume is ",(0,v.jsx)("b",{children:"32Gi"}),".",(0,v.jsx)("br",{}),(0,v.jsx)("br",{}),(0,v.jsx)("b",{children:"Storage Optimized"}),": Uses the ",(0,v.jsx)("i",{children:"sc1"})," EBS storage class, however the minimum volume size for this type of EBS volume is \xa0",(0,v.jsx)("b",{children:"16Ti"})," to unlock their maximum throughput speed of 250Mi/s."]})})})]})]})}},8070:(e,t,n)=>{n.d(t,{Z:()=>o});n(2791);var a=n(9434),r=n(9945),i=n(7689),s=n(184);const l=e=>{let{icon:t,description:n}=e;return(0,s.jsxs)(r.xuv,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,s.jsx)(r.xuv,{className:"muted",sx:{fontSize:"14px",fontStyle:"italic"},children:n})]})},o=()=>{const e=(0,i.UO)(),t=e.tenantName||"",n=e.tenantNamespace||"",o=(0,a.v9)((e=>""!==n?n:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:"")),c=(0,a.v9)((e=>""!==t?t:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""));return(0,s.jsx)(r.xuv,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",["@media (max-width: ".concat(r.Egj.sm,"px)")]:{marginTop:0}},children:(0,s.jsxs)(r.xuv,{sx:{display:"flex",flexFlow:"column"},children:[(0,s.jsx)(l,{icon:(0,s.jsx)(r.Baz,{}),description:"TLS Certificates Warning"}),(0,s.jsxs)(r.xuv,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If you wish to continue only with ",(0,s.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),(0,s.jsxs)(r.xuv,{sx:{fontSize:"14px",fontStyle:"italic"},className:"muted",children:["minio.",o,(0,s.jsx)("br",{}),"minio.",o,".svc",(0,s.jsx)("br",{}),"minio.",o,".svc.",(0,s.jsx)("br",{}),"*.",c,"-hl.",o,".svc.",(0,s.jsx)("br",{}),"*.",o,".svc."]}),(0,s.jsx)("br",{}),"Replace ",(0,s.jsx)("em",{children:""}),","," ",(0,s.jsx)("em",{children:""})," and",(0,s.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"You can learn more at our"," ",(0,s.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}}}]); +//# sourceMappingURL=162.58762974.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/162.58762974.chunk.js.map b/web-app/build/static/js/162.58762974.chunk.js.map new file mode 100644 index 00000000000..3f0df37cbaf --- /dev/null +++ b/web-app/build/static/js/162.58762974.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/162.58762974.chunk.js","mappings":"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","sources":["screens/Console/Tenants/AddTenant/Steps/Configure.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPActiveDirectory.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPOpenID.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPBuiltIn.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx","screens/Console/Tenants/AddTenant/Steps/Security.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/VaultKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AzureKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GCPKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GemaltoKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AWSKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption.tsx","screens/Console/Tenants/AddTenant/Steps/Affinity.tsx","screens/Console/Tenants/AddTenant/Steps/Images.tsx","screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx","screens/Console/Tenants/AddTenant/Steps/helpers/AddNamespaceModal.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NamespaceSelector.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NameTenantMain.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantResources.tsx","screens/Console/Tenants/AddTenant/common.ts","screens/Console/Tenants/AddTenant/CreateTenantButton.tsx","screens/Console/Tenants/AddTenant/NewTenantCredentials.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n FormLayout,\n Grid,\n IconButton,\n InputBox,\n RemoveIcon,\n Select,\n Switch,\n AddIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport {\n addNewMinIODomain,\n isPageValid,\n removeMinIODomain,\n setEnvVars,\n updateAddField,\n} from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst ConfigureMain = styled.div(() => ({\n \"& .configSectionItem\": {\n marginRight: 15,\n marginBottom: 15,\n },\n \"& .containerItem\": {\n marginRight: 15,\n },\n \"& .responsiveSectionItem\": {\n \"&.doubleElement\": {\n display: \"flex\",\n \"& div\": {\n flexGrow: 1,\n },\n },\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n\n \"& div > div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n \"& .wrapperContainer\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .envVarRow\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n \"& .fileItem\": {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n \"& .overlayAction\": {\n marginLeft: 10,\n marginBottom: 15,\n },\n}));\n\nconst Configure = () => {\n const dispatch = useAppDispatch();\n\n const exposeMinIO = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeMinIO,\n );\n const exposeConsole = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeConsole,\n );\n const exposeSFTP = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeSFTP,\n );\n const setDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.setDomains,\n );\n const consoleDomain = useSelector(\n (state: AppState) => state.createTenant.fields.configure.consoleDomain,\n );\n const minioDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.minioDomains,\n );\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n const tenantEnvVars = useSelector(\n (state: AppState) => state.createTenant.fields.configure.envVars,\n );\n const tenantSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.tenantSecurityContext,\n );\n const customRuntime = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customRuntime,\n );\n const runtimeClassName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.runtimeClassName,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (tenantCustom) {\n customAccountValidation = [\n {\n fieldKey: \"tenant_securityContext_runAsUser\",\n required: true,\n value: tenantSecurityContext.runAsUser,\n customValidation:\n tenantSecurityContext.runAsUser === \"\" ||\n parseInt(tenantSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_runAsGroup\",\n required: true,\n value: tenantSecurityContext.runAsGroup,\n customValidation:\n tenantSecurityContext.runAsGroup === \"\" ||\n parseInt(tenantSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_fsGroup\",\n required: true,\n value: tenantSecurityContext.fsGroup!,\n customValidation:\n tenantSecurityContext.fsGroup === \"\" ||\n parseInt(tenantSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n if (setDomains) {\n const minioExtraValidations = minioDomains.map((validation, index) => {\n return {\n fieldKey: `minio-domain-${index.toString()}`,\n required: false,\n value: validation,\n pattern: /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n customPatternMessage:\n \"MinIO domain is not in the form of http|https://subdomain.domain\",\n };\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n ...minioExtraValidations,\n {\n fieldKey: \"console_domain\",\n required: false,\n value: consoleDomain,\n pattern:\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n customPatternMessage:\n \"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n dispatch,\n tenantCustom,\n tenantSecurityContext,\n setDomains,\n consoleDomain,\n minioDomains,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const copyDomains = [...minioDomains];\n copyDomains[index] = value;\n\n updateField(\"minioDomains\", copyDomains);\n };\n\n return (\n \n \n \n Configure\n \n Basic configurations for tenant management\n \n \n \n

Services

\n \n Whether the tenant's services should request an external IP via\n LoadBalancer service type.\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MinIO Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeSFTP\", checked);\n }}\n label={\"Expose SFTP Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"setDomains\", checked);\n }}\n label={\"Set Custom Domains\"}\n />\n {setDomains && (\n \n
\n Custom Domains for MinIO\n \n \n ) => {\n updateField(\"consoleDomain\", e.target.value);\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\n \"Eg. http://subdomain.domain:port/subpath1/subpath2\"\n }\n error={validationErrors[\"console_domain\"] || \"\"}\n />\n \n \n

MinIO Domains

\n \n {minioDomains.map((domain, index) => {\n return (\n \n ,\n ) => {\n updateMinIODomain(e.target.value, index);\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n error={\n validationErrors[\n `minio-domain-${index.toString()}`\n ] || \"\"\n }\n />\n \n dispatch(addNewMinIODomain())}\n disabled={index !== minioDomains.length - 1}\n >\n \n \n \n\n \n dispatch(removeMinIODomain(index))}\n disabled={minioDomains.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n \n
\n
\n
\n )}\n\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"tenantCustom\", checked);\n }}\n label={\"Security Context\"}\n />\n {tenantCustom && (\n \n
\n Security Context for MinIO\n \n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={tenantSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={tenantSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n \n
\n \n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={tenantSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"tenant_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroupChangePolicy: value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n \n \n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n
\n
\n )}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customRuntime\", checked);\n }}\n label={\"Custom Runtime Configurations\"}\n />\n {customRuntime && (\n \n
\n Custom Runtime Configurations\n ) => {\n updateField(\"runtimeClassName\", e.target.value);\n cleanValidation(\"tenant_runtime_runtimeClassName\");\n }}\n label=\"Runtime Class Name\"\n value={runtimeClassName}\n error={\n validationErrors[\"tenant_runtime_runtimeClassName\"] || \"\"\n }\n />\n
\n
\n )}\n
\n\n \n Additional Environment Variables\n \n Define additional environment variables to be used by your MinIO\n pods\n \n \n \n {tenantEnvVars.map((envVar, index) => (\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: e.target.value, value: keyPair.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_key_${index.toString()}`}\n />\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: keyPair.key, value: e.target.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_value_${index.toString()}`}\n />\n \n \n \n {\n const existingEnvVars = [...tenantEnvVars];\n existingEnvVars.push({ key: \"\", value: \"\" });\n\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={index !== tenantEnvVars.length - 1}\n >\n \n \n \n \n {\n const existingEnvVars = tenantEnvVars.filter(\n (item, fIndex) => fIndex !== index,\n );\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={tenantEnvVars.length <= 1}\n >\n \n \n \n \n \n ))}\n \n
\n
\n );\n};\n\nexport default Configure;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n IconButton,\n Tooltip,\n InputBox,\n Switch,\n FormLayout,\n Box,\n AddIcon,\n RemoveIcon,\n} from \"mds\";\nimport {\n addIDPADGroupAtIndex,\n addIDPADUsrAtIndex,\n isPageValid,\n removeIDPADGroupAtIndex,\n removeIDPADUsrAtIndex,\n setIDPADGroupAtIndex,\n setIDPADUsrAtIndex,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { clearValidationError } from \"../../../utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPActiveDirectory = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const ADURL = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADURL,\n );\n const ADSkipTLS = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADSkipTLS,\n );\n const ADServerInsecure = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerInsecure,\n );\n const ADGroupSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n );\n const ADGroupSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchFilter,\n );\n const ADUserDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADUserDNs,\n );\n const ADGroupDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADGroupDNs,\n );\n const ADLookupBindDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindDN,\n );\n const ADLookupBindPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindPassword,\n );\n const ADUserDNSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n );\n const ADUserDNSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n );\n const ADServerStartTLS = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerStartTLS,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_lookupBindDN\",\n required: true,\n value: ADLookupBindDN,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n ADLookupBindDN,\n idpSelection,\n ADURL,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADUserDNs,\n ADGroupDNs,\n dispatch,\n ]);\n\n return (\n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n cleanValidation(\"ad_lookupBindDN\");\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n error={validationErrors[\"ad_lookupBindDN\"] || \"\"}\n required\n />\n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(sAMAcountName=%s)\"\n />\n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n
\n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n \n {ADUserDNs.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPADUsrAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={\n validationErrors[`ad-userdn-${index.toString()}`] || \"\"\n }\n />\n \n \n {\n dispatch(addIDPADUsrAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n dispatch(removeIDPADUsrAtIndex(index));\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n
\n
\n \n List of group DNs (Distinguished Names) to be Tenant Administrators\n \n {ADGroupDNs.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPADGroupAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-groupdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-groupdn-${index.toString()}`}\n error={\n validationErrors[`ad-groupdn-${index.toString()}`] || \"\"\n }\n />\n \n \n {\n dispatch(addIDPADGroupAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADGroupDNs.length > 1) {\n dispatch(removeIDPADGroupAtIndex(index));\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n
\n \n );\n};\n\nexport default IDPActiveDirectory;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { FormLayout, InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPOpenID = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const openIDConfigurationURL = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDConfigurationURL,\n );\n const openIDClientID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClientID,\n );\n const openIDSecretID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDSecretID,\n );\n const openIDClaimName = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClaimName,\n );\n const openIDScopes = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDScopes,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: false,\n value: openIDClaimName,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDClientID,\n openIDSecretID,\n openIDConfigurationURL,\n openIDClaimName,\n dispatch,\n ]);\n\n return (\n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n placeholder=\"policy\"\n error={validationErrors[\"openID_claimName\"] || \"\"}\n />\n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n );\n};\n\nexport default IDPOpenID;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n IconButton,\n Tooltip,\n InputBox,\n AddIcon,\n RemoveIcon,\n Box,\n ShuffleIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport {\n addIDPNewKeyPair,\n isPageValid,\n removeIDPKeyPairAtIndex,\n setIDPPwdAtIndex,\n setIDPUsrAtIndex,\n} from \"../../createTenantSlice\";\nimport { clearValidationError, getRandomString } from \"../../../utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPBuiltIn = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const accessKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.accessKeys,\n );\n const secretKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.secretKeys,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [idpSelection, accessKeys, secretKeys, dispatch]);\n\n return (\n \n Add additional users\n {accessKeys.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: e.target.value,\n }),\n );\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: e.target.value,\n }),\n );\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n \n {\n dispatch(addIDPNewKeyPair());\n }}\n disabled={index !== accessKeys.length - 1}\n >\n \n \n {\n dispatch(removeIDPKeyPairAtIndex(index));\n }}\n disabled={accessKeys.length <= 1}\n >\n \n \n \n {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: getRandomString(16),\n }),\n );\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: getRandomString(16),\n }),\n );\n }}\n size={\"small\"}\n >\n \n \n \n \n \n \n );\n })}\n \n );\n};\n\nexport default IDPBuiltIn;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Box,\n FormLayout,\n Grid,\n LDAPIcon,\n OIDCIcon,\n RadioGroup,\n UsersIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { setIDP } from \"../createTenantSlice\";\nimport IDPActiveDirectory from \"./IdentityProvider/IDPActiveDirectory\";\nimport IDPOpenID from \"./IdentityProvider/IDPOpenID\";\nimport IDPBuiltIn from \"./IdentityProvider/IDPBuiltIn\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst IdentityProvider = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n\n return (\n \n \n Identity Provider\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n \n \n {\n dispatch(setIDP(e.target.value));\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\", icon: },\n { label: \"Open ID\", value: \"OpenID\", icon: },\n {\n label: \"LDAP / Active Directory\",\n value: \"AD\",\n icon: ,\n },\n ]}\n />\n \n {idpSelection === \"Built-in\" && }\n {idpSelection === \"OpenID\" && }\n {idpSelection === \"AD\" && }\n \n );\n};\n\nexport default IdentityProvider;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport {\n AddIcon,\n Box,\n breakPoints,\n FileSelector,\n FormLayout,\n Grid,\n IconButton,\n RemoveIcon,\n Switch,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport {\n addCaCertificate,\n addClientKeyPair,\n addFileToCaCertificates,\n addFileToClientKeyPair,\n addFileToKeyPair,\n addKeyPair,\n deleteCaCertificate,\n deleteClientKeyPair,\n deleteKeyPair,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport TLSHelpBox from \"../../HelpBox/TLSHelpBox\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst CertificateRow = styled.div(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n padding: 8,\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& .fileItem\": {\n display: \"flex\",\n \"& .inputItem:not(:last-of-type)\": {\n marginBottom: 0,\n },\n [`@media (max-width: ${breakPoints.md}px)`]: {\n flexFlow: \"column\",\n \"& .inputItem:not(:last-of-type)\": {\n marginBottom: 10,\n },\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n gap: 10,\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n}));\n\nconst Security = () => {\n const dispatch = useAppDispatch();\n\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const minioCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const minioClientCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioClientCertificates,\n );\n const caCertificates = useSelector(\n (state: AppState) => state.createTenant.certificates.minioCAsCertificates,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"security\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableAutoCert) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableCustomCerts) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n dispatch(isPageValid({ pageName: \"security\", valid: false }));\n }, [enableTLS, enableAutoCert, enableCustomCerts, dispatch]);\n\n return (\n \n \n Security\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n {enableTLS && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n {enableCustomCerts && (\n \n {!enableAutoCert && }\n
\n MinIO Server Certificates\n\n {minioCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n\n \n {\n dispatch(addKeyPair());\n }}\n disabled={index !== minioCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteKeyPair(keyPair.id));\n }}\n disabled={minioCertificates.length <= 1}\n >\n \n \n \n \n ))}\n
\n
\n MinIO Client Certificates\n {minioClientCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n\n \n {\n dispatch(addClientKeyPair());\n }}\n disabled={index !== minioClientCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteClientKeyPair(keyPair.id));\n }}\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n \n \n ))}\n
\n
\n MinIO CA Certificates\n {caCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToCaCertificates({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n \n \n
\n {\n dispatch(addCaCertificate());\n }}\n disabled={index !== caCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteCaCertificate(keyPair.id));\n }}\n disabled={caCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default Security;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst VaultKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const vaultEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEndpoint,\n );\n const vaultEngine = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEngine,\n );\n const vaultNamespace = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultNamespace,\n );\n const vaultPrefix = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPrefix,\n );\n const vaultAppRoleEngine = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.vaultAppRoleEngine,\n );\n const vaultId = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultId,\n );\n const vaultSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultSecret,\n );\n const vaultRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultRetry,\n );\n const vaultPing = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPing,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultEngine}\n />\n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultNamespace}\n />\n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultPrefix}\n />\n
\n App Role\n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={vaultAppRoleEngine}\n />\n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n
\n
\n Status\n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default VaultKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst AzureKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const azureEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureEndpoint,\n );\n const azureTenantID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureTenantID,\n );\n const azureClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientID,\n );\n const azureClientSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientSecret,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureEndpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureTenantID,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureClientID,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureClientSecret,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"azureEndpoint\", e.target.value);\n cleanValidation(\"azure_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n value={azureEndpoint}\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n />\n
\n Credentials\n ) => {\n updateField(\"azureTenantID\", e.target.value);\n cleanValidation(\"azure_tenant_id\");\n }}\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={azureTenantID}\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n ) => {\n updateField(\"azureClientID\", e.target.value);\n cleanValidation(\"azure_client_id\");\n }}\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={azureClientID}\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n ) => {\n updateField(\"azureClientSecret\", e.target.value);\n cleanValidation(\"azure_client_secret\");\n }}\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={azureClientSecret}\n error={validationErrors[\"azure_client_secret\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default AzureKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { updateAddField } from \"../../createTenantSlice\";\n\nconst GCPKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n return (\n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID.\"\n value={gcpProjectID}\n />\n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={gcpEndpoint}\n />\n
\n Credentials\n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={gcpClientEmail}\n />\n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={gcpClientID}\n />\n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKeyID}\n />\n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKey}\n />\n
\n
\n );\n};\n\nexport default GCPKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst GemaltoKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const gemaltoEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoEndpoint,\n );\n const gemaltoToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoToken,\n );\n const gemaltoDomain = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoDomain,\n );\n const gemaltoRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoRetry,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n
\n Credentials\n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default GemaltoKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst AWSKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const awsEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsEndpoint,\n );\n const awsRegion = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsRegion,\n );\n const awsKMSKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsKMSKey,\n );\n const awsAccessKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsAccessKey,\n );\n const awsSecretKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsSecretKey,\n );\n const awsToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsToken,\n );\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={awsKMSKey}\n />\n
\n Credentials\n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n
\n
\n );\n};\n\nexport default AWSKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n CodeEditor,\n FileSelector,\n FormLayout,\n Grid,\n InputBox,\n RadioGroup,\n Select,\n SimpleHeader,\n Switch,\n Tabs,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport {\n addFileKESServerCert,\n addFileKMSCa,\n addFileKMSMTLSCert,\n addFileMinIOMTLSCert,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport VaultKMSAdd from \"./Encryption/VaultKMSAdd\";\nimport AzureKMSAdd from \"./Encryption/AzureKMSAdd\";\nimport GCPKMSAdd from \"./Encryption/GCPKMSAdd\";\nimport GemaltoKMSAdd from \"./Encryption/GemaltoKMSAdd\";\nimport AWSKMSAdd from \"./Encryption/AWSKMSAdd\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst Encryption = () => {\n const dispatch = useAppDispatch();\n\n const replicas = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.replicas,\n );\n const rawConfiguration = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.rawConfiguration,\n );\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const enableEncryption = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.enableEncryption,\n );\n const encryptionType = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionType,\n );\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n const enableCustomCertsForKES = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.enableCustomCertsForKES,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const minioServerCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const kesServerCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kesServerCertificate,\n );\n const minioMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.minioMTLSCertificate,\n );\n const kmsMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsMTLSCertificate,\n );\n const kmsCA = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsCA,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const kesSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.kesSecurityContext,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioServerCertificates &&\n minioServerCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert,\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n encryptionValidation = [\n {\n fieldKey: \"rawConfiguration\",\n required: encryptionTab === \"kms-raw-configuration\",\n value: rawConfiguration,\n },\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: kesSecurityContext.runAsUser,\n customValidation:\n kesSecurityContext.runAsUser === \"\" ||\n parseInt(kesSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: kesSecurityContext.runAsGroup,\n customValidation:\n kesSecurityContext.runAsGroup === \"\" ||\n parseInt(kesSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: kesSecurityContext.fsGroup!,\n customValidation:\n kesSecurityContext.fsGroup === \"\" ||\n parseInt(kesSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_cert,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n rawConfiguration,\n encryptionTab,\n enableEncryption,\n encryptionType,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n dispatch,\n enableAutoCert,\n enableCustomCerts,\n kesServerCertificate.encoded_key,\n kesServerCertificate.encoded_cert,\n minioMTLSCertificate.encoded_key,\n minioMTLSCertificate.encoded_cert,\n kesSecurityContext,\n replicas,\n ]);\n\n return (\n \n \n Encryption\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n description=\"\"\n disabled={!encryptionAvailable}\n />\n \n \n MinIO Server-Side Encryption (SSE) protects objects as part of write\n operations, allowing clients to take advantage of server processing\n power to secure objects at the storage layer (encryption-at-rest). SSE\n also provides key functionality to regulatory and compliance\n requirements around secure locking and erasure.\n \n
\n\n {enableEncryption && (\n \n {\n updateField(\"encryptionTab\", value);\n }}\n sx={{\n height: \"initial\",\n }}\n options={[\n {\n tabConfig: {\n label: \"Options\",\n id: \"kms-options\",\n },\n content: (\n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n {encryptionType === \"vault\" && }\n {encryptionType === \"azure\" && }\n {encryptionType === \"gcp\" && }\n {encryptionType === \"aws\" && }\n {encryptionType === \"gemalto\" && }\n \n ),\n },\n {\n tabConfig: {\n label: \"Raw Edit\",\n id: \"kms-raw-configuration\",\n },\n content: (\n \n \n {\n updateField(\"rawConfiguration\", value);\n }}\n editorHeight={\"550px\"}\n />\n \n \n ),\n },\n ]}\n />\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n
\n Encryption server certificates\n {\n if (encodedValue) {\n dispatch(\n addFileKESServerCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={kesServerCertificate.key}\n required={!enableAutoCert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKESServerCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={kesServerCertificate.cert}\n required={!enableAutoCert}\n returnEncodedData\n />\n
\n
\n \n MinIO mTLS certificates (connection between MinIO and the\n Encryption server)\n \n {\n if (encodedValue) {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={minioMTLSCertificate.key}\n required={!enableAutoCert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={minioMTLSCertificate.cert}\n required={!enableAutoCert}\n returnEncodedData\n />\n
\n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {\n if (encodedValue) {\n dispatch(\n addFileKMSMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_key\");\n }\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={kmsMTLSCertificate.key}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKMSMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_cert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKMSCa({\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_ca\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={kmsCA.cert}\n returnEncodedData\n />\n
\n
\n )}\n ) => {\n updateField(\"replicas\", e.target.value);\n cleanValidation(\"replicas\");\n }}\n label=\"Replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n sx={{ marginBottom: 10 }}\n />\n\n
\n SecurityContext for KES pods\n \n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={kesSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={kesSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n
\n
\n \n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={kesSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroupChangePolicy: value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n
\n
\n
\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n )}\n \n );\n};\n\nexport default Encryption;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n AddIcon,\n RemoveIcon,\n FormLayout,\n Box,\n InputLabel,\n RadioGroup,\n Switch,\n Select,\n InputBox,\n IconButton,\n Grid,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { LabelKeyPair } from \"../../types\";\nimport { setModalErrorSnackMessage } from \"../../../../../systemSlice\";\nimport {\n addNewToleration,\n isPageValid,\n removeToleration,\n setKeyValuePairs,\n setTolerationInfo,\n updateAddField,\n} from \"../createTenantSlice\";\nimport api from \"../../../../../common/api\";\nimport TolerationSelector from \"../../../Common/TolerationSelector/TolerationSelector\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst AffinityContainer = styled.div(() => ({\n \"& .overlayAction\": {\n marginLeft: 10,\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .affinityConfigField\": {\n display: \"flex\",\n },\n \"& .affinityFieldLabel\": {\n display: \"flex\",\n flexFlow: \"column\",\n flex: 1,\n },\n \"& .affinityLabelKey\": {\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n \"& .affinityLabelValue\": {\n marginLeft: 10,\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .affinityRow\": {\n marginBottom: 10,\n display: \"flex\",\n },\n}));\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = () => {\n const dispatch = useAppDispatch();\n\n const podAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.podAffinity,\n );\n const nodeSelectorLabels = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.nodeSelectorLabels,\n );\n const withPodAntiAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.withPodAntiAffinity,\n );\n const keyValuePairs = useSelector(\n (state: AppState) => state.createTenant.nodeSelectorPairs,\n );\n const tolerations = useSelector(\n (state: AppState) => state.createTenant.tolerations,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {},\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"affinity\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n setKeyValueMap({});\n });\n }\n }, [dispatch, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"affinity\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, podAffinity, nodeSelectorLabels]);\n\n const updateToleration = (index: number, field: string, value: any) => {\n const alterToleration = { ...tolerations[index], [field]: value };\n\n dispatch(\n setTolerationInfo({\n index: index,\n tolerationValue: alterToleration,\n }),\n );\n };\n\n return (\n \n \n \n Pod Placement\n \n Configure how pods will be assigned to nodes\n \n \n \n Type\n \n \n MinIO supports multiple configurations for Pod Affinity\n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n displayInColumn\n />\n {podAffinity === \"nodeSelector\" && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n {\n const newKey = value;\n const newLKP: LabelKeyPair = {\n key: newKey,\n value: keyValueMap[newKey][0],\n };\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = newLKP;\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: value,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n \n {\n const arrCp = [...keyValuePairs];\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={i !== keyValuePairs.length - 1}\n >\n \n \n \n \n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i,\n );\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={keyValuePairs.length <= 1}\n >\n \n \n \n \n \n );\n })}\n \n
\n
\n )}\n \n \n

Tolerations

\n {validationErrors[\"tolerations\"]}\n \n {tolerations &&\n tolerations.map((tol, i) => {\n return (\n \n {\n updateToleration(i, \"effect\", value);\n }}\n tolerationKey={tol.key}\n onTolerationKeyChange={(value) => {\n updateToleration(i, \"key\", value);\n }}\n operator={tol.operator}\n onOperatorChange={(value) => {\n updateToleration(i, \"operator\", value);\n }}\n value={tol.value}\n onValueChange={(value) => {\n updateToleration(i, \"value\", value);\n }}\n tolerationSeconds={tol.tolerationSeconds?.seconds || 0}\n onSecondsChange={(value) => {\n updateToleration(i, \"tolerationSeconds\", {\n seconds: value,\n });\n }}\n index={i}\n />\n \n {\n dispatch(addNewToleration());\n }}\n disabled={i !== tolerations.length - 1}\n >\n \n \n \n\n \n dispatch(removeToleration(i))}\n disabled={tolerations.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n
\n \n
\n
\n );\n};\n\nexport default Affinity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box, FormLayout, InputBox, Switch } from \"mds\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst Images = () => {\n const dispatch = useAppDispatch();\n\n const customImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customImage,\n );\n const imageName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageName,\n );\n const customDockerhub = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customDockerhub,\n );\n const imageRegistry = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageRegistry,\n );\n const imageRegistryUsername = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryUsername,\n );\n const imageRegistryPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryPassword,\n );\n\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n\n const kesImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.kesImage,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n kesImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n dispatch,\n tenantCustom,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n Container Images\n \n Specify the container images used by the Tenant and its features.\n \n \n\n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"minio/minio:RELEASE.2024-03-05T04-48-44Z\"\n />\n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"minio/kes:2024-03-01T18-06-46Z\"\n />\n\n {customImage && (\n \n \n

Custom Container Registry

\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Use a private container registry\"}\n />\n
\n )}\n {customDockerhub && (\n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"https://index.docker.io/v1/\"\n required\n />\n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n )}\n
\n );\n};\n\nexport default Images;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, SimpleHeader, Table, TableBody, TableCell, TableRow } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"../../../../../store\";\nimport { niceBytes, EC0 } from \"../../../../../common/utils\";\n\nconst SizePreview = () => {\n const nodes = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.nodes,\n );\n const memoryNode = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesMemoryRequest,\n );\n const ecParity = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParity,\n );\n\n const distribution = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.distribution,\n );\n const ecParityCalc = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParityCalc,\n );\n\n const cpuToUse = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesCPURequest,\n );\n const integrationSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.integrationSelection,\n );\n\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity,\n );\n\n return (\n \n \n \n \n \n Number of Servers\n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Drives per Server\n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n Drive Capacity\n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n )}\n\n \n Total Volumes\n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Memory per Node\n \n {memoryNode} Gi\n \n \n \n \n CPU Selection\n \n \n {cpuToUse}\n \n \n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n \n \n \n \n EC Parity\n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n Raw Capacity\n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n Usable Capacity\n \n {ecParity === EC0\n ? niceBytes(ecParityCalc.rawCapacity)\n : niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Server Failures Tolerated\n \n \n {ecParity === EC0\n ? 0\n : distribution &&\n distribution.disks > 0 &&\n usableInformation.maxFailureTolerations\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks,\n )\n : \"-\"}\n \n \n \n
\n
\n )}\n {integrationSelection.typeSelection !== \"\" &&\n integrationSelection.storageClass !== \"\" && (\n \n \n \n \n \n CPU\n \n {integrationSelection.CPU !== 0\n ? integrationSelection.CPU\n : \"-\"}\n \n \n \n Memory\n \n {integrationSelection.memory !== 0\n ? `${integrationSelection.memory} Gi`\n : \"-\"}\n \n \n \n Drives per Server\n \n {integrationSelection.drivesPerServer !== 0\n ? `${integrationSelection.drivesPerServer}`\n : \"-\"}\n \n \n \n \n Drive Size\n \n \n {integrationSelection.driveSize.driveSize}\n {integrationSelection.driveSize.sizeUnit}\n \n \n \n
\n
\n )}\n \n );\n};\n\nexport default SizePreview;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ConfirmModalIcon, ProgressBar } from \"mds\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { closeAddNSModal } from \"../../createTenantSlice\";\nimport { createNamespaceAsync } from \"../../thunks/namespaceThunks\";\n\nconst AddNamespaceModal = () => {\n const dispatch = useAppDispatch();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n const addNamespaceLoading = useSelector(\n (state: AppState) => state.createTenant.addNSLoading,\n );\n const addNamespaceOpen = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n return (\n }\n isLoading={addNamespaceLoading}\n onConfirm={() => {\n dispatch(createNamespaceAsync());\n }}\n onClose={() => {\n dispatch(closeAddNSModal());\n }}\n confirmationContent={\n \n {addNamespaceLoading && }\n Are you sure you want to add a namespace called\n
\n \n {namespace}\n \n ?\n
\n }\n />\n );\n};\n\nexport default AddNamespaceModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { AddIcon, InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { openAddNSModal, setNamespace } from \"../../createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { IMkEnvs } from \"./utils\";\nimport { validateNamespaceAsync } from \"../../thunks/namespaceThunks\";\nimport AddNamespaceModal from \"../helpers/AddNamespaceModal\";\n\nconst NamespaceSelector = ({ formToRender }: { formToRender?: IMkEnvs }) => {\n const dispatch = useAppDispatch();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n\n const showNSCreateButton = useSelector(\n (state: AppState) => state.createTenant.showNSCreateButton,\n );\n\n const namespaceError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"namespace\"],\n );\n const openAddNSConfirm = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n const debounceNamespace = useMemo(\n () =>\n debounce(() => {\n dispatch(validateNamespaceAsync());\n }, 500),\n [dispatch],\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n const addNamespace = () => {\n dispatch(openAddNSModal());\n };\n\n return (\n \n {openAddNSConfirm && }\n ) => {\n dispatch(setNamespace(e.target.value));\n }}\n label=\"Namespace\"\n value={namespace}\n error={namespaceError || \"\"}\n overlayIcon={showNSCreateButton ? : null}\n overlayAction={addNamespace}\n required\n />\n \n );\n};\nexport default NamespaceSelector;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box, FormLayout, Grid, InputBox, Select } from \"mds\";\nimport get from \"lodash/get\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { IMkEnvs, mkPanelConfigurations } from \"./utils\";\nimport {\n isPageValid,\n setStorageType,\n setTenantName,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { selFeatures } from \"../../../../consoleSlice\";\nimport SizePreview from \"../SizePreview\";\nimport TenantSize from \"./TenantSize\";\nimport NamespaceSelector from \"./NamespaceSelector\";\nimport H3Section from \"../../../../Common/H3Section\";\n\nconst NameTenantField = () => {\n const dispatch = useAppDispatch();\n const tenantName = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.tenantName,\n );\n\n const tenantNameError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"tenant-name\"],\n );\n\n return (\n ) => {\n dispatch(setTenantName(e.target.value));\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={tenantNameError || \"\"}\n />\n );\n};\n\ninterface INameTenantMainScreen {\n formToRender?: IMkEnvs;\n}\n\nconst NameTenantMain = ({ formToRender }: INameTenantMainScreen) => {\n const dispatch = useAppDispatch();\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n const selectedStorageType = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageType,\n );\n const storageClasses = useSelector(\n (state: AppState) => state.createTenant.storageClasses,\n );\n const features = useSelector(selFeatures);\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n dispatch(\n updateAddField({ pageName: \"nameTenant\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n const isValid =\n (formToRender === IMkEnvs.default && storageClasses.length > 0) ||\n (formToRender !== IMkEnvs.default && selectedStorageType !== \"\");\n\n dispatch(isPageValid({ pageName: \"nameTenant\", valid: isValid }));\n }, [storageClasses, dispatch, selectedStorageType, formToRender]);\n\n return (\n \n \n \n \n \n \n Name\n \n How would you like to name this new tenant?\n \n \n \n \n {formToRender === IMkEnvs.default ? (\n {\n updateField(\"selectedStorageClass\", value);\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n ) : (\n {\n dispatch(\n setStorageType({\n storageType: value,\n features: features,\n }),\n );\n }}\n label={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorLabel`,\n \"Storage Type\",\n )}\n value={selectedStorageType}\n options={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorValues`,\n [],\n )}\n />\n )}\n {formToRender === IMkEnvs.default ? (\n \n ) : (\n get(\n mkPanelConfigurations,\n `${formToRender}.sizingComponent`,\n null,\n )\n )}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default NameTenantMain;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport NameTenantMain from \"./NameTenantMain\";\nimport { IMkEnvs, resourcesConfigurations } from \"./utils\";\nimport { selFeatures } from \"../../../../consoleSlice\";\n\nconst TenantResources = () => {\n const features = useSelector(selFeatures);\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n if (formRender === null) {\n return null;\n }\n\n return ;\n};\n\nexport default TenantResources;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nexport const requiredPages = [\n \"nameTenant\",\n \"tenantSize\",\n \"configure\",\n \"affinity\",\n \"identityProvider\",\n \"security\",\n \"encryption\",\n];\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Button } from \"mds\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { requiredPages } from \"./common\";\nimport { createTenantAsync } from \"./thunks/createTenantThunk\";\n\nconst CreateTenantButton = () => {\n const dispatch = useAppDispatch();\n\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n\n const validPages = useSelector(\n (state: AppState) => state.createTenant.validPages,\n );\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n\n const enabled =\n !addSending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v));\n\n return (\n {\n dispatch(createTenantAsync());\n }}\n disabled={!enabled}\n key={`button-AddTenant-Create`}\n label={\"Create\"}\n />\n );\n};\n\nexport default CreateTenantButton;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { useNavigate } from \"react-router-dom\";\n\nconst NewTenantCredentials = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const showNewCredentials = useSelector(\n (state: AppState) => state.createTenant.showNewCredentials,\n );\n const createdAccount = useSelector(\n (state: AppState) => state.createTenant.createdAccount,\n );\n\n return (\n \n {showNewCredentials && (\n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n entity=\"Tenant\"\n />\n )}\n \n );\n};\n\nexport default NewTenantCredentials;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport {\n BackLink,\n Box,\n Grid,\n HelpBox,\n PageLayout,\n ProgressBar,\n StorageIcon,\n Wizard,\n WizardButton,\n WizardElement,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n IMkEnvs,\n resourcesConfigurations,\n} from \"./Steps/TenantResources/utils\";\nimport { selFeatures } from \"../../consoleSlice\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport Affinity from \"./Steps/Affinity\";\nimport Images from \"./Steps/Images\";\nimport TenantResources from \"./Steps/TenantResources/TenantResources\";\nimport CreateTenantButton from \"./CreateTenantButton\";\nimport NewTenantCredentials from \"./NewTenantCredentials\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst AddTenant = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const features = useSelector(selFeatures);\n\n // Fields\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"custom\" as \"to\" | \"custom\" | \"next\" | \"back\",\n enabled: true,\n action: () => {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n },\n };\n\n const createButton: WizardButton = {\n componentRender: ,\n };\n\n const wizardSteps: WizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Images\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n return (\n \n \n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n label={\"Tenants\"}\n />\n }\n />\n\n \n {addSending && (\n \n \n \n )}\n \n \n \n {formRender === IMkEnvs.aws && (\n \n }\n help={\n \n Performance Optimized: Uses the gp3 EBS storage\n class class configured at 1,000Mi/s throughput and 16,000\n IOPS, however the minimum volume size for this type of EBS\n volume is 32Gi.\n
\n
\n Storage Optimized: Uses the sc1 EBS storage\n class, however the minimum volume size for this type of EBS\n volume is  \n 16Ti to unlock their maximum throughput speed of\n 250Mi/s.\n
\n }\n />\n
\n )}\n
\n
\n );\n};\n\nexport default AddTenant;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CertificateIcon, Box, breakPoints } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n let defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n let defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n
\n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n \n \n \n );\n};\n\nexport default TLSHelpBox;\n"],"names":["ConfigureMain","styled","div","marginRight","marginBottom","display","flexGrow","flexFlow","alignItems","justifyContent","borderBottom","flex","minWidth","marginLeft","Configure","dispatch","useAppDispatch","exposeMinIO","useSelector","state","createTenant","fields","configure","exposeConsole","exposeSFTP","setDomains","consoleDomain","minioDomains","tenantCustom","tenantEnvVars","envVars","tenantSecurityContext","customRuntime","runtimeClassName","validationErrors","setValidationErrors","useState","updateField","useCallback","field","value","updateAddField","pageName","useEffect","customAccountValidation","fieldKey","required","runAsUser","customValidation","parseInt","customValidationMessage","runAsGroup","fsGroup","minioExtraValidations","map","validation","index","concat","toString","pattern","customPatternMessage","commonVal","commonFormValidation","isPageValid","valid","Object","keys","length","cleanValidation","fieldName","clearValidationError","_jsx","children","_jsxs","FormLayout","withBorders","containerPadding","Box","className","H3Section","style","margin","Switch","id","name","checked","onChange","e","target","label","Grid","item","xs","InputBox","placeholder","error","domain","updateMinIODomain","copyDomains","IconButton","size","onClick","addNewMinIODomain","disabled","AddIcon","removeMinIODomain","RemoveIcon","type","min","Select","fsGroupChangePolicy","options","runAsNonRoot","container","envVar","key","existingEnvVars","setEnvVars","keyPair","i","push","filter","fIndex","IDPActiveDirectory","idpSelection","identityProvider","ADURL","ADSkipTLS","ADServerInsecure","ADGroupSearchBaseDN","ADGroupSearchFilter","ADUserDNs","ADGroupDNs","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","customIDPValidation","sx","gap","marginTop","_","Fragment","setIDPADUsrAtIndex","userDN","Tooltip","tooltip","addIDPADUsrAtIndex","removeIDPADUsrAtIndex","setIDPADGroupAtIndex","addIDPADGroupAtIndex","removeIDPADGroupAtIndex","IDPOpenID","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDClaimName","openIDScopes","IDPBuiltIn","accessKeys","secretKeys","gridTemplateColumns","setIDPUsrAtIndex","accessKey","setIDPPwdAtIndex","secretKey","height","addIDPNewKeyPair","removeIDPKeyPairAtIndex","getRandomString","ShuffleIcon","IdentityProvider","padding","RadioGroup","currentValue","setIDP","selectorOptions","icon","UsersIcon","OIDCIcon","LDAPIcon","CertificateRow","_ref","theme","get","breakPoints","md","Security","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","minioServerCertificates","minioClientCertificates","caCertificates","minioCAsCertificates","description","TLSHelpBox","FileSelector","fileName","encodedValue","addFileToKeyPair","accept","cert","returnEncodedData","event","addKeyPair","deleteKeyPair","addFileToClientKeyPair","addClientKeyPair","deleteClientKeyPair","addFileToCaCertificates","addCaCertificate","deleteCaCertificate","VaultKMSAdd","encryptionTab","encryption","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","encryptionValidation","AzureKMSAdd","azureEndpoint","azureTenantID","azureClientID","azureClientSecret","GCPKMSAdd","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","GemaltoKMSAdd","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","AWSKMSAdd","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","Encryption","replicas","rawConfiguration","enableEncryption","encryptionType","enableCustomCertsForKES","kesServerCertificate","minioMTLSCertificate","kmsMTLSCertificate","kmsCA","kesSecurityContext","encryptionAvailable","encoded_key","encoded_cert","indicatorLabels","Tabs","horizontal","currentTabOrPath","onTabClick","tabConfig","content","CodeEditor","mode","editorHeight","SimpleHeader","addFileKESServerCert","addFileMinIOMTLSCert","addFileKMSMTLSCert","addFileKMSCa","AffinityContainer","Affinity","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","tolerations","loading","setLoading","keyValueMap","setKeyValueMap","keyOptions","setKeyOptions","api","invoke","then","res","k","catch","err","setModalErrorSnackMessage","vl","kvp","kvs","a","indexOf","join","splittedLabels","split","forEach","splitItem","updateToleration","alterToleration","setTolerationInfo","tolerationValue","InputLabel","displayInColumn","newLKP","arrCp","setKeyValuePairs","v","tol","_tol$tolerationSecond","TolerationSelector","effect","onEffectChange","tolerationKey","onTolerationKeyChange","operator","onOperatorChange","onValueChange","tolerationSeconds","seconds","onSecondsChange","addNewToleration","removeToleration","Images","customImage","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","kesImage","SizePreview","nodes","tenantSize","memoryNode","resourcesMemoryRequest","ecParity","distribution","ecParityCalc","cpuToUse","resourcesCPURequest","integrationSelection","usableInformation","storageFactors","find","element","erasureCode","fontSize","Table","TableBody","TableRow","TableCell","scope","textAlign","typeSelection","storageClass","disks","niceBytes","pvSize","persistentVolumes","rawCapacity","EC0","maxCapacity","maxFailureTolerations","Math","floor","CPU","memory","drivesPerServer","driveSize","sizeUnit","AddNamespaceModal","namespace","nameTenant","addNamespaceLoading","addNSLoading","addNamespaceOpen","addNSOpen","ConfirmDialog","title","confirmText","confirmButtonProps","variant","isOpen","titleIcon","ConfirmModalIcon","isLoading","onConfirm","createNamespaceAsync","onClose","closeAddNSModal","confirmationContent","ProgressBar","maxWidth","whiteSpace","wordWrap","formToRender","showNSCreateButton","namespaceError","openAddNSConfirm","debounceNamespace","useMemo","debounce","validateNamespaceAsync","cancel","setNamespace","overlayIcon","overlayAction","addNamespace","openAddNSModal","NameTenantField","tenantName","tenantNameError","setTenantName","selectedStorageClass","selectedStorageType","storageClasses","features","selFeatures","isValid","IMkEnvs","default","width","minHeight","NamespaceSelector","setStorageType","storageType","mkPanelConfigurations","TenantSize","sm","useBackground","TenantResources","formRender","setFormRender","setConfiguration","resourcesConfigurations","includes","NameTenantMain","requiredPages","CreateTenantButton","addSending","addingTenant","validPages","enabled","every","Button","color","createTenantAsync","NewTenantCredentials","navigate","useNavigate","showNewCredentials","createdAccount","CredentialsPrompt","newServiceAccount","open","closeModal","resetAddTenantForm","entity","AddTenant","cancelButton","action","createButton","componentRender","wizardSteps","buttons","advancedOnly","PageHeaderWrapper","BackLink","PageLayout","customBorderPadding","Wizard","linearMode","aws","HelpBox","iconComponent","StorageIcon","help","FeatureItem","fontStyle","params","useParams","tenantNameParam","tenantNamespaceParam","tenantNamespace","border","borderRadius","CertificateIcon","href","rel"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/21.53327062.chunk.js b/web-app/build/static/js/21.53327062.chunk.js deleted file mode 100644 index 031a653d700..00000000000 --- a/web-app/build/static/js/21.53327062.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[21],{68456:function(e,n,a){a.d(n,{QT:function(){return o},YH:function(){return c},mo:function(){return s}});var t=a(61889),i=a(75952),r=a(80184),s=function(){return(0,r.jsxs)(t.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(t.ZP,{children:(0,r.jsx)(i.gyG,{width:"16px",height:"16px"})}),(0,r.jsx)(t.ZP,{item:!0,children:"Open ID"})]})},o=function(){return(0,r.jsxs)(t.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(t.ZP,{children:(0,r.jsx)(i.vcZ,{width:"16px",height:"16px"})}),(0,r.jsx)(t.ZP,{item:!0,children:"LDAP / Active Directory"})]})},c=function(){return(0,r.jsxs)(t.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(t.ZP,{children:(0,r.jsx)(i.oyc,{width:"16px",height:"16px"})}),(0,r.jsx)(t.ZP,{item:!0,children:"Built-in"})]})}},37021:function(e,n,a){a.r(n);var t=a(93433),i=a(29439),r=a(1413),s=a(72791),o=a(78687),c=a(51691),l=a(20890),d=a(96040),u=a(13400),m=a(75952),h=a(61889),p=a(11135),x=a(25787),v=a(20165),f=a(3579),_=a(23814),Z=a(68456),j=a(84741),g=a(40968),D=a(87995),N=a(41320),S=a(83679),b=a(21435),I=a(37516),y=a(40306),k=a(81207),A=a(42419),w=a(27247),C=a(50896),P=a(80184);function R(){return null}var F=(0,o.$j)((function(e){return{loadingTenant:e.tenants.loadingTenant,selectedTenant:e.tenants.currentTenant,tenant:e.tenants.tenantInfo}}),null);n.default=(0,x.Z)((function(e){return(0,p.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({adUserDnRows:{display:"flex",marginBottom:10},buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}}},_.oZ),_.bK),{},{loaderAlign:{textAlign:"center"}},_.Bz),_.QV),_.DF),_.oO),_.AK))}))(F((function(e){var n=e.classes,a=(0,N.TL)(),r=(0,o.v9)((function(e){return e.tenants.tenantInfo})),p=(0,o.v9)((function(e){return e.tenants.loadingTenant})),x=(0,s.useState)(!1),_=(0,i.Z)(x,2),F=_[0],T=_[1],L=(0,s.useState)(!1),O=(0,i.Z)(L,2),U=O[0],B=O[1],G=(0,s.useState)("Built-in"),q=(0,i.Z)(G,2),z=q[0],K=q[1],E=(0,s.useState)(""),H=(0,i.Z)(E,2),V=H[0],M=H[1],Q=(0,s.useState)(""),Y=(0,i.Z)(Q,2),W=Y[0],$=Y[1],J=(0,s.useState)(""),X=(0,i.Z)(J,2),ee=X[0],ne=X[1],ae=(0,s.useState)(!1),te=(0,i.Z)(ae,2),ie=te[0],re=te[1],se=(0,s.useState)(""),oe=(0,i.Z)(se,2),ce=oe[0],le=oe[1],de=(0,s.useState)(""),ue=(0,i.Z)(de,2),me=ue[0],he=ue[1],pe=(0,s.useState)(""),xe=(0,i.Z)(pe,2),ve=xe[0],fe=xe[1],_e=(0,s.useState)(""),Ze=(0,i.Z)(_e,2),je=Ze[0],ge=Ze[1],De=(0,s.useState)(""),Ne=(0,i.Z)(De,2),Se=Ne[0],be=Ne[1],Ie=(0,s.useState)(""),ye=(0,i.Z)(Ie,2),ke=ye[0],Ae=ye[1],we=(0,s.useState)(!1),Ce=(0,i.Z)(we,2),Pe=Ce[0],Re=Ce[1],Fe=(0,s.useState)(""),Te=(0,i.Z)(Fe,2),Le=Te[0],Oe=Te[1],Ue=(0,s.useState)(""),Be=(0,i.Z)(Ue,2),Ge=Be[0],qe=Be[1],ze=(0,s.useState)(""),Ke=(0,i.Z)(ze,2),Ee=Ke[0],He=Ke[1],Ve=(0,s.useState)(""),Me=(0,i.Z)(Ve,2),Qe=Me[0],Ye=Me[1],We=(0,s.useState)(!1),$e=(0,i.Z)(We,2),Je=$e[0],Xe=$e[1],en=(0,s.useState)(!1),nn=(0,i.Z)(en,2),an=nn[0],tn=nn[1],rn=(0,s.useState)(!1),sn=(0,i.Z)(rn,2),on=sn[0],cn=sn[1],ln=(0,s.useState)([""]),dn=(0,i.Z)(ln,2),un=dn[0],mn=dn[1],hn=(0,s.useState)([""]),pn=(0,i.Z)(hn,2),xn=pn[0],vn=pn[1],fn=(0,s.useState)({}),_n=(0,i.Z)(fn,2),Zn=_n[0],jn=_n[1],gn=function(e){jn((0,j.h)(Zn,e))},Dn=(0,s.useState)(!1),Nn=(0,i.Z)(Dn,2),Sn=Nn[0],bn=Nn[1];(0,s.useEffect)((function(){var e=[];"OpenID"===z&&(e=[].concat((0,t.Z)(e),[{fieldKey:"openID_CONFIGURATION_URL",required:!0,value:V},{fieldKey:"openID_clientID",required:!0,value:W},{fieldKey:"openID_secretID",required:!0,value:ee},{fieldKey:"openID_claimName",required:!1,value:me}])),"AD"===z&&(e=[].concat((0,t.Z)(e),[{fieldKey:"AD_URL",required:!0,value:je},{fieldKey:"ad_lookupBindDN",required:!0,value:Se}]));var n=(0,g.R)(e);bn(0===Object.keys(n).length),jn(n)}),[z,V,W,ee,me,je,Se]);var In=(0,s.useCallback)((function(){k.Z.invoke("GET","/api/v1/namespaces/".concat(null===r||void 0===r?void 0:r.namespace,"/tenants/").concat(null===r||void 0===r?void 0:r.name,"/identity-provider")).then((function(e){e&&(e.oidc?(K("OpenID"),M(e.oidc.configuration_url),$(e.oidc.client_id),ne(e.oidc.secret_id),le(e.oidc.callback_url),he(e.oidc.claim_name),fe(e.oidc.scopes)):e.active_directory&&(K("AD"),ge(e.active_directory.url),be(e.active_directory.lookup_bind_dn),Ae(e.active_directory.lookup_bind_password),Oe(e.active_directory.user_dn_search_base_dn),qe(e.active_directory.user_dn_search_filter),He(e.active_directory.group_search_base_dn),Ye(e.active_directory.group_search_filter),Xe(e.active_directory.skip_tls_verification),tn(e.active_directory.server_insecure),cn(e.active_directory.server_start_tls)))})).catch((function(e){a((0,D.Ih)(e))}))}),[r,a]);(0,s.useEffect)((function(){r&&In()}),[r,In]);return(0,P.jsxs)(s.Fragment,{children:[(0,P.jsx)(y.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,P.jsx)(m.EjK,{}),isLoading:F,onClose:function(){return B(!1)},isOpen:U,onConfirm:function(){T(!0);var e={};switch(z){case"AD":e.active_directory={url:je,lookup_bind_dn:Se,lookup_bind_password:ke,user_dn_search_base_dn:Le,user_dn_search_filter:Ge,group_search_base_dn:Ee,group_search_filter:Qe,skip_tls_verification:Je,server_insecure:an,server_start_tls:on};break;case"OpenID":e.oidc={configuration_url:V,client_id:W,secret_id:ee,callback_url:ce,claim_name:me,scopes:ve}}k.Z.invoke("POST","/api/v1/namespaces/".concat(null===r||void 0===r?void 0:r.namespace,"/tenants/").concat(null===r||void 0===r?void 0:r.name,"/identity-provider"),e).then((function(){T(!1),B(!1),In()})).catch((function(e){a((0,D.Ih)(e)),T(!1)}))},confirmationContent:(0,P.jsx)(c.Z,{children:"Are you sure you want to save the changes and restart the service?"})}),p?(0,P.jsx)("div",{className:n.loaderAlign,children:(0,P.jsx)(m.aNw,{})}):(0,P.jsxs)(s.Fragment,{children:[(0,P.jsxs)(h.ZP,{item:!0,xs:12,children:[(0,P.jsx)("h1",{className:n.sectionTitle,children:"Identity Provider"}),(0,P.jsx)(R,{})]}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.protocolRadioOptions,paddingBottom:1,children:(0,P.jsx)(S.Z,{currentSelection:z,id:"idp-options",name:"idp-options",label:"Protocol",onChange:function(e){K(e.target.value)},selectorOptions:[{label:(0,P.jsx)(Z.YH,{}),value:"Built-in"},{label:(0,P.jsx)(Z.mo,{}),value:"OpenID"},{label:(0,P.jsx)(Z.QT,{}),value:"AD"}]})}),"OpenID"===z&&(0,P.jsxs)(s.Fragment,{children:[(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:function(e){M(e.target.value),gn("openID_CONFIGURATION_URL")},label:"Configuration URL",value:V,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:Zn.openID_CONFIGURATION_URL||"",required:!0})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){$(e.target.value),gn("openID_clientID")},label:"Client ID",value:W,error:Zn.openID_clientID||"",required:!0})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{type:ie?"text":"password",id:"openID_secretID",name:"openID_secretID",onChange:function(e){ne(e.target.value),gn("openID_secretID")},label:"Secret ID",value:ee,error:Zn.openID_secretID||"",required:!0,overlayIcon:ie?(0,P.jsx)(v.Z,{}):(0,P.jsx)(f.Z,{}),overlayAction:function(){return re(!ie)}})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"openID_claimName",name:"openID_claimName",onChange:function(e){he(e.target.value),gn("openID_claimName")},label:"Claim Name",value:me,placeholder:"policy",error:Zn.openID_claimName||""})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"openID_scopes",name:"openID_scopes",onChange:function(e){fe(e.target.value),gn("openID_scopes")},label:"Scopes",value:ve})})]}),"AD"===z&&(0,P.jsxs)(s.Fragment,{children:[(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"AD_URL",name:"AD_URL",onChange:function(e){ge(e.target.value),gn("AD_URL")},label:"LDAP Server Address",value:je,placeholder:"ldap-server:636",error:Zn.AD_URL||"",required:!0})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(I.Z,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:Je,onChange:function(e){var n=e.target.checked;Xe(n)},label:"Skip TLS Verification"})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(I.Z,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:an,onChange:function(e){var n=e.target.checked;tn(n)},label:"Server Insecure"})}),an?(0,P.jsxs)(h.ZP,{item:!0,xs:12,children:[(0,P.jsx)(l.Z,{className:n.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,P.jsx)("br",{})]}):null,(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(I.Z,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:on,onChange:function(e){var n=e.target.checked;cn(n)},label:"Start TLS connection to AD/LDAP server"})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:function(e){be(e.target.value),gn("ad_lookupBindDN")},label:"Lookup Bind DN",value:Se,placeholder:"cn=admin,dc=min,dc=io",error:Zn.ad_lookupBindDN||"",required:!0})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{type:Pe?"text":"password",id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:function(e){Ae(e.target.value)},label:"Lookup Bind Password",value:ke,placeholder:"admin",overlayIcon:Pe?(0,P.jsx)(v.Z,{}):(0,P.jsx)(f.Z,{}),overlayAction:function(){return Re(!Pe)}})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:function(e){Oe(e.target.value)},label:"User DN Search Base DN",value:Le,placeholder:"dc=min,dc=io"})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:function(e){qe(e.target.value)},label:"User DN Search Filter",value:Ge,placeholder:"(sAMAcountName=%s)"})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:function(e){He(e.target.value)},label:"Group Search Base DN",value:Ee,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"})}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,P.jsx)(b.Z,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){Ye(e.target.value)},label:"Group Search Filter",value:Qe,placeholder:"(&(objectclass=groupOfNames)(member=%s))"})})]}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.buttonContainer,children:(0,P.jsx)(m.zxk,{id:"save-idp",type:"submit",variant:"callAction",color:"primary",disabled:!Sn||F,onClick:function(){return B(!0)},label:"Save"})}),"AD"===z&&(0,P.jsxs)(s.Fragment,{children:[(0,P.jsx)(C.Z,{children:"User & Group management"}),(0,P.jsx)("br",{}),(0,P.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,P.jsx)("legend",{className:n.descriptionText,children:"List of user DNs (Distinguished Names) to be added as Tenant Administrators"}),(0,P.jsx)(h.ZP,{item:!0,xs:12,children:un.map((function(e,a){return(0,P.jsx)(s.Fragment,{children:(0,P.jsxs)("div",{className:n.adUserDnRows,children:[(0,P.jsx)(b.Z,{id:"ad-userdn-".concat(a.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(a.toString()),value:un[a],onChange:function(e){mn(un.map((function(n,t){return t===a?e.target.value:n})))},index:a,error:Zn["ad-userdn-".concat(a.toString())]||""},"csv-ad-userdn-".concat(a.toString())),(0,P.jsxs)("div",{className:n.buttonTray,children:[(0,P.jsx)(d.Z,{title:"Add User","aria-label":"add",children:(0,P.jsx)(u.Z,{size:"small",onClick:function(){mn([].concat((0,t.Z)(un),[""]))},children:(0,P.jsx)(A.Z,{})})}),(0,P.jsx)(d.Z,{title:"Remove","aria-label":"add",children:(0,P.jsx)(u.Z,{size:"small",style:{marginLeft:16},onClick:function(){un.length>1&&mn(un.filter((function(e,n){return n!==a})))},children:(0,P.jsx)(w.Z,{})})})]})]})},"identityField-".concat(a.toString()))}))})]}),(0,P.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,P.jsx)("legend",{className:n.descriptionText,children:"List of group DNs (Distinguished Names) to be added as Tenant Administrators"}),(0,P.jsx)(h.ZP,{item:!0,xs:12,children:xn.map((function(e,a){return(0,P.jsx)(s.Fragment,{children:(0,P.jsxs)("div",{className:n.adUserDnRows,children:[(0,P.jsx)(b.Z,{id:"ad-groupdn-".concat(a.toString()),label:"",placeholder:"",name:"ad-groupdn-".concat(a.toString()),value:xn[a],onChange:function(e){vn(xn.map((function(n,t){return t===a?e.target.value:n})))},index:a,error:Zn["ad-groupdn-".concat(a.toString())]||""},"csv-ad-groupdn-".concat(a.toString())),(0,P.jsxs)("div",{className:n.buttonTray,children:[(0,P.jsx)(d.Z,{title:"Add Group","aria-label":"add",children:(0,P.jsx)(u.Z,{size:"small",onClick:function(){vn([].concat((0,t.Z)(xn),[""]))},children:(0,P.jsx)(A.Z,{})})}),(0,P.jsx)(d.Z,{title:"Remove","aria-label":"add",children:(0,P.jsx)(u.Z,{size:"small",style:{marginLeft:16},onClick:function(){xn.length>1&&vn(xn.filter((function(e,n){return n!==a})))},children:(0,P.jsx)(w.Z,{})})})]})]})},"identityField-".concat(a.toString()))}))})]}),(0,P.jsx)("br",{}),(0,P.jsx)(h.ZP,{item:!0,xs:12,className:n.buttonContainer,children:(0,P.jsx)(m.zxk,{id:"add-additional-dns",type:"submit",variant:"callAction",disabled:!Sn||F,onClick:function(){return function(){T(!0);var e={};"AD"===z&&(e={user_dns:un.filter((function(e){return""!==e.trim()})),group_dns:xn.filter((function(e){return""!==e.trim()}))});k.Z.invoke("POST","/api/v1/namespaces/".concat(null===r||void 0===r?void 0:r.namespace,"/tenants/").concat(null===r||void 0===r?void 0:r.name,"/set-administrators"),e).then((function(){T(!1),vn([""]),mn([""]),In(),a((0,D.y1)("Administrators added successfully"))})).catch((function(e){a((0,D.Ih)(e)),T(!1)}))}()},label:"Add additional DNs"})})]})]})]})})))},42419:function(e,n,a){var t=a(64836);n.Z=void 0;var i=t(a(45649)),r=a(80184),s=(0,i.default)((0,r.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=s},27247:function(e,n,a){var t=a(64836);n.Z=void 0;var i=t(a(45649)),r=a(80184),s=(0,i.default)((0,r.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");n.Z=s}}]); -//# sourceMappingURL=21.53327062.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/21.53327062.chunk.js.map b/web-app/build/static/js/21.53327062.chunk.js.map deleted file mode 100644 index f6dddeb3aeb..00000000000 --- a/web-app/build/static/js/21.53327062.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/21.53327062.chunk.js","mappings":"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","sources":["screens/Console/Tenants/LogoComponents.tsx","screens/Console/Tenants/TenantDetails/TenantIdentityProvider.tsx","../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/icons-material/Delete.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Grid } from \"@mui/material\";\nimport { LDAPIcon, OIDCIcon, UsersIcon } from \"mds\";\n\nexport const OIDCLogoElement = () => {\n return (\n \n \n \n \n Open ID\n \n );\n};\n\nexport const LDAPLogoElement = () => {\n return (\n \n \n \n \n LDAP / Active Directory\n \n );\n};\n\nexport const BuiltInLogoElement = () => {\n return (\n \n \n \n \n Built-in\n \n );\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport {\n DialogContentText,\n IconButton,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button, ConfirmModalIcon, Loader } from \"mds\";\nimport Grid from \"@mui/material/Grid\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport {\n containerForHeader,\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n spacingUtils,\n tenantDetailsStyles,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n ITenantIdentityProviderResponse,\n ITenantSetAdministratorsRequest,\n} from \"../types\";\nimport {\n BuiltInLogoElement,\n LDAPLogoElement,\n OIDCLogoElement,\n} from \"../LogoComponents\";\nimport { clearValidationError } from \"../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../utils/validationFunctions\";\nimport {\n setErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport api from \"../../../../common/api\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport SectionTitle from \"../../Common/SectionTitle\";\n\ninterface ITenantIdentityProvider {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n adUserDnRows: {\n display: \"flex\",\n marginBottom: 10,\n },\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n ...tenantDetailsStyles,\n ...spacingUtils,\n loaderAlign: {\n textAlign: \"center\",\n },\n ...containerForHeader,\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nfunction FormHr() {\n return null;\n}\n\nconst TenantIdentityProvider = ({ classes }: ITenantIdentityProvider) => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [idpSelection, setIdpSelection] = useState(\"Built-in\");\n const [openIDConfigurationURL, setOpenIDConfigurationURL] =\n useState(\"\");\n const [openIDClientID, setOpenIDClientID] = useState(\"\");\n const [openIDSecretID, setOpenIDSecretID] = useState(\"\");\n const [showOIDCSecretID, setShowOIDCSecretID] = useState(false);\n const [openIDCallbackURL, setOpenIDCallbackURL] = useState(\"\");\n const [openIDClaimName, setOpenIDClaimName] = useState(\"\");\n const [openIDScopes, setOpenIDScopes] = useState(\"\");\n const [ADURL, setADURL] = useState(\"\");\n const [ADLookupBindDN, setADLookupBindDN] = useState(\"\");\n const [ADLookupBindPassword, setADLookupBindPassword] = useState(\"\");\n const [showADLookupBindPassword, setShowADLookupBindPassword] =\n useState(false);\n const [ADUserDNSearchBaseDN, setADUserDNSearchBaseDN] = useState(\"\");\n const [ADUserDNSearchFilter, setADUserDNSearchFilter] = useState(\"\");\n const [ADGroupSearchBaseDN, setADGroupSearchBaseDN] = useState(\"\");\n const [ADGroupSearchFilter, setADGroupSearchFilter] = useState(\"\");\n const [ADSkipTLS, setADSkipTLS] = useState(false);\n const [ADServerInsecure, setADServerInsecure] = useState(false);\n const [ADServerStartTLS, setADServerStartTLS] = useState(false);\n const [ADUserDNs, setADUserDNs] = useState([\"\"]);\n const [ADGroupDNs, setADGroupDNs] = useState([\"\"]);\n const [validationErrors, setValidationErrors] = useState({});\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n const [isFormValid, setIsFormValid] = useState(false);\n\n // Validation\n useEffect(() => {\n let identityProviderValidation: IValidation[] = [];\n\n if (idpSelection === \"OpenID\") {\n identityProviderValidation = [\n ...identityProviderValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: false,\n value: openIDClaimName,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n identityProviderValidation = [\n ...identityProviderValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_lookupBindDN\",\n required: true,\n value: ADLookupBindDN,\n },\n ];\n }\n\n const commonVal = commonFormValidation(identityProviderValidation);\n\n setIsFormValid(Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDConfigurationURL,\n openIDClientID,\n openIDSecretID,\n openIDClaimName,\n ADURL,\n ADLookupBindDN,\n ]);\n\n const getTenantIdentityProviderInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/identity-provider`,\n )\n .then((res: ITenantIdentityProviderResponse) => {\n if (res) {\n if (res.oidc) {\n setIdpSelection(\"OpenID\");\n setOpenIDConfigurationURL(res.oidc.configuration_url);\n setOpenIDClientID(res.oidc.client_id);\n setOpenIDSecretID(res.oidc.secret_id);\n setOpenIDCallbackURL(res.oidc.callback_url);\n setOpenIDClaimName(res.oidc.claim_name);\n setOpenIDScopes(res.oidc.scopes);\n } else if (res.active_directory) {\n setIdpSelection(\"AD\");\n setADURL(res.active_directory.url);\n setADLookupBindDN(res.active_directory.lookup_bind_dn);\n setADLookupBindPassword(res.active_directory.lookup_bind_password);\n setADUserDNSearchBaseDN(\n res.active_directory.user_dn_search_base_dn,\n );\n setADUserDNSearchFilter(res.active_directory.user_dn_search_filter);\n setADGroupSearchBaseDN(res.active_directory.group_search_base_dn);\n setADGroupSearchFilter(res.active_directory.group_search_filter);\n setADSkipTLS(res.active_directory.skip_tls_verification);\n setADServerInsecure(res.active_directory.server_insecure);\n setADServerStartTLS(res.active_directory.server_start_tls);\n }\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantIdentityProviderInfo();\n }\n }, [tenant, getTenantIdentityProviderInfo]);\n\n const updateTenantIdentityProvider = () => {\n setIsSending(true);\n let payload: ITenantIdentityProviderResponse = {};\n switch (idpSelection) {\n case \"AD\":\n payload.active_directory = {\n url: ADURL,\n lookup_bind_dn: ADLookupBindDN,\n lookup_bind_password: ADLookupBindPassword,\n user_dn_search_base_dn: ADUserDNSearchBaseDN,\n user_dn_search_filter: ADUserDNSearchFilter,\n group_search_base_dn: ADGroupSearchBaseDN,\n group_search_filter: ADGroupSearchFilter,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n server_start_tls: ADServerStartTLS,\n };\n break;\n case \"OpenID\":\n payload.oidc = {\n configuration_url: openIDConfigurationURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n callback_url: openIDCallbackURL,\n claim_name: openIDClaimName,\n scopes: openIDScopes,\n };\n break;\n default:\n // Built-in IDP will be used by default\n }\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/identity-provider`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n getTenantIdentityProviderInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n const setAdministrators = () => {\n setIsSending(true);\n let payload: ITenantSetAdministratorsRequest = {};\n switch (idpSelection) {\n case \"AD\":\n payload = {\n user_dns: ADUserDNs.filter((user) => user.trim() !== \"\"),\n group_dns: ADGroupDNs.filter((group) => group.trim() !== \"\"),\n };\n break;\n default:\n // Built-in IDP will be used by default\n }\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/set-administrators`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n setADGroupDNs([\"\"]);\n setADUserDNs([\"\"]);\n getTenantIdentityProviderInfo();\n dispatch(setSnackBarMessage(`Administrators added successfully`));\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantIdentityProvider}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n
\n \n
\n ) : (\n \n \n

Identity Provider

\n \n
\n \n {\n setIdpSelection(e.target.value);\n }}\n selectorOptions={[\n { label: , value: \"Built-in\" },\n { label: , value: \"OpenID\" },\n { label: , value: \"AD\" },\n ]}\n />\n \n\n {idpSelection === \"OpenID\" && (\n \n \n ) => {\n setOpenIDConfigurationURL(e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n setOpenIDClientID(e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n setOpenIDSecretID(e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n overlayIcon={\n showOIDCSecretID ? (\n \n ) : (\n \n )\n }\n overlayAction={() => setShowOIDCSecretID(!showOIDCSecretID)}\n />\n \n \n ) => {\n setOpenIDClaimName(e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n placeholder=\"policy\"\n error={validationErrors[\"openID_claimName\"] || \"\"}\n />\n \n \n ) => {\n setOpenIDScopes(e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n \n )}\n\n {idpSelection === \"AD\" && (\n \n \n ) => {\n setADURL(e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADSkipTLS(checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADServerInsecure(checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be\n unencrypted\n \n
\n
\n ) : null}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADServerStartTLS(checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n \n \n ) => {\n setADLookupBindDN(e.target.value);\n cleanValidation(\"ad_lookupBindDN\");\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n error={validationErrors[\"ad_lookupBindDN\"] || \"\"}\n required\n />\n \n \n ) => {\n setADLookupBindPassword(e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n overlayIcon={\n showADLookupBindPassword ? (\n \n ) : (\n \n )\n }\n overlayAction={() =>\n setShowADLookupBindPassword(!showADLookupBindPassword)\n }\n />\n \n \n ) => {\n setADUserDNSearchBaseDN(e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n \n \n ) => {\n setADUserDNSearchFilter(e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(sAMAcountName=%s)\"\n />\n \n \n ) => {\n setADGroupSearchBaseDN(e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n \n \n ) => {\n setADGroupSearchFilter(e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n
\n )}\n\n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n\n {idpSelection === \"AD\" && (\n \n User & Group management\n
\n
\n \n List of user DNs (Distinguished Names) to be added as Tenant\n Administrators\n \n \n {ADUserDNs.map((_, index) => {\n return (\n \n
\n ,\n ) => {\n setADUserDNs(\n ADUserDNs.map((group, i) =>\n i === index ? e.target.value : group,\n ),\n );\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={\n validationErrors[\n `ad-userdn-${index.toString()}`\n ] || \"\"\n }\n />\n
\n \n {\n setADUserDNs([...ADUserDNs, \"\"]);\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n setADUserDNs(\n ADUserDNs.filter((_, i) => i !== index),\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n })}\n
\n
\n
\n \n List of group DNs (Distinguished Names) to be added as Tenant\n Administrators\n \n \n {ADGroupDNs.map((_, index) => {\n return (\n \n
\n ,\n ) => {\n setADGroupDNs(\n ADGroupDNs.map((group, i) =>\n i === index ? e.target.value : group,\n ),\n );\n }}\n index={index}\n key={`csv-ad-groupdn-${index.toString()}`}\n error={\n validationErrors[\n `ad-groupdn-${index.toString()}`\n ] || \"\"\n }\n />\n
\n \n {\n setADGroupDNs([...ADGroupDNs, \"\"]);\n }}\n >\n \n \n \n \n {\n if (ADGroupDNs.length > 1) {\n setADGroupDNs(\n ADGroupDNs.filter((_, i) => i !== index),\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n })}\n
\n
\n
\n \n setAdministrators()}\n label={\"Add additional DNs\"}\n />\n \n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.loadingTenant,\n selectedTenant: state.tenants.currentTenant,\n tenant: state.tenants.tenantInfo,\n});\n\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(TenantIdentityProvider));\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\nexports.default = _default;"],"names":["OIDCLogoElement","_jsxs","Grid","container","columnGap","children","_jsx","OIDCIcon","width","height","item","LDAPLogoElement","LDAPIcon","BuiltInLogoElement","UsersIcon","FormHr","connector","connect","state","loadingTenant","tenants","selectedTenant","currentTenant","tenant","tenantInfo","withStyles","theme","createStyles","_objectSpread","adUserDnRows","display","marginBottom","buttonTray","marginLeft","background","tenantDetailsStyles","spacingUtils","loaderAlign","textAlign","containerForHeader","createTenantCommon","formFieldStyles","modalBasic","wizardCommon","_ref","classes","dispatch","useAppDispatch","useSelector","_useState","useState","_useState2","_slicedToArray","isSending","setIsSending","_useState3","_useState4","dialogOpen","setDialogOpen","_useState5","_useState6","idpSelection","setIdpSelection","_useState7","_useState8","openIDConfigurationURL","setOpenIDConfigurationURL","_useState9","_useState10","openIDClientID","setOpenIDClientID","_useState11","_useState12","openIDSecretID","setOpenIDSecretID","_useState13","_useState14","showOIDCSecretID","setShowOIDCSecretID","_useState15","_useState16","openIDCallbackURL","setOpenIDCallbackURL","_useState17","_useState18","openIDClaimName","setOpenIDClaimName","_useState19","_useState20","openIDScopes","setOpenIDScopes","_useState21","_useState22","ADURL","setADURL","_useState23","_useState24","ADLookupBindDN","setADLookupBindDN","_useState25","_useState26","ADLookupBindPassword","setADLookupBindPassword","_useState27","_useState28","showADLookupBindPassword","setShowADLookupBindPassword","_useState29","_useState30","ADUserDNSearchBaseDN","setADUserDNSearchBaseDN","_useState31","_useState32","ADUserDNSearchFilter","setADUserDNSearchFilter","_useState33","_useState34","ADGroupSearchBaseDN","setADGroupSearchBaseDN","_useState35","_useState36","ADGroupSearchFilter","setADGroupSearchFilter","_useState37","_useState38","ADSkipTLS","setADSkipTLS","_useState39","_useState40","ADServerInsecure","setADServerInsecure","_useState41","_useState42","ADServerStartTLS","setADServerStartTLS","_useState43","_useState44","ADUserDNs","setADUserDNs","_useState45","_useState46","ADGroupDNs","setADGroupDNs","_useState47","_useState48","validationErrors","setValidationErrors","cleanValidation","fieldName","clearValidationError","_useState49","_useState50","isFormValid","setIsFormValid","useEffect","identityProviderValidation","concat","_toConsumableArray","fieldKey","required","value","commonVal","commonFormValidation","Object","keys","length","getTenantIdentityProviderInfo","useCallback","api","invoke","namespace","name","then","res","oidc","configuration_url","client_id","secret_id","callback_url","claim_name","scopes","active_directory","url","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","group_search_base_dn","group_search_filter","skip_tls_verification","server_insecure","server_start_tls","catch","err","setErrorSnackMessage","React","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","payload","confirmationContent","DialogContentText","className","Loader","Fragment","xs","sectionTitle","protocolRadioOptions","paddingBottom","RadioGroupSelector","currentSelection","id","label","onChange","e","target","selectorOptions","formFieldRow","InputBoxWrapper","placeholder","error","type","overlayIcon","VisibilityOffIcon","RemoveRedEyeIcon","overlayAction","FormSwitchWrapper","checked","Typography","variant","gutterBottom","buttonContainer","Button","color","disabled","onClick","SectionTitle","fieldGroup","descriptionText","map","_","index","toString","group","i","Tooltip","IconButton","size","AddIcon","style","filter","DeleteIcon","user_dns","user","trim","group_dns","setSnackBarMessage","setAdministrators","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/21.736e7ab9.chunk.js b/web-app/build/static/js/21.736e7ab9.chunk.js new file mode 100644 index 00000000000..7a490a29cca --- /dev/null +++ b/web-app/build/static/js/21.736e7ab9.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[21],{3814:(e,a,t)=>{t.d(a,{I:()=>r,O:()=>n});const n={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},r={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},7021:(e,a,t)=>{t.r(a),t.d(a,{default:()=>h});var n=t(2791),r=t(9945),i=t(9434),s=t(3814),l=t(4741),o=t(968),d=t(7995),c=t(1320),u=t(3508),p=t(1207),g=t(184);const h=()=>{const e=(0,c.TL)(),a=(0,i.v9)((e=>e.tenants.tenantInfo)),t=(0,i.v9)((e=>e.tenants.loadingTenant)),[h,_]=(0,n.useState)(!1),[m,v]=(0,n.useState)(!1),[x,D]=(0,n.useState)("Built-in"),[j,S]=(0,n.useState)(""),[I,f]=(0,n.useState)(""),[b,y]=(0,n.useState)(""),[k,N]=(0,n.useState)(""),[C,A]=(0,n.useState)(""),[L,B]=(0,n.useState)(""),[w,T]=(0,n.useState)(""),[U,O]=(0,n.useState)(""),[R,F]=(0,n.useState)(""),[z,W]=(0,n.useState)(""),[G,P]=(0,n.useState)(""),[q,Z]=(0,n.useState)(""),[K,E]=(0,n.useState)(""),[J,V]=(0,n.useState)(!1),[Y,H]=(0,n.useState)(!1),[M,Q]=(0,n.useState)(!1),[X,$]=(0,n.useState)([""]),[ee,ae]=(0,n.useState)([""]),[te,ne]=(0,n.useState)({}),re=e=>{ne((0,l.h)(te,e))},[ie,se]=(0,n.useState)(!1);(0,n.useEffect)((()=>{let e=[];"OpenID"===x&&(e=[...e,{fieldKey:"openID_CONFIGURATION_URL",required:!0,value:j},{fieldKey:"openID_clientID",required:!0,value:I},{fieldKey:"openID_secretID",required:!0,value:b},{fieldKey:"openID_claimName",required:!1,value:C}]),"AD"===x&&(e=[...e,{fieldKey:"AD_URL",required:!0,value:w},{fieldKey:"ad_lookupBindDN",required:!0,value:U}]);const a=(0,o.R)(e);se(0===Object.keys(a).length),ne(a)}),[x,j,I,b,C,w,U]);const le=(0,n.useCallback)((()=>{p.Z.invoke("GET","/api/v1/namespaces/".concat(null===a||void 0===a?void 0:a.namespace,"/tenants/").concat(null===a||void 0===a?void 0:a.name,"/identity-provider")).then((e=>{e&&(e.oidc?(D("OpenID"),S(e.oidc.configuration_url),f(e.oidc.client_id),y(e.oidc.secret_id),N(e.oidc.callback_url),A(e.oidc.claim_name),B(e.oidc.scopes)):e.active_directory&&(D("AD"),T(e.active_directory.url),O(e.active_directory.lookup_bind_dn),F(e.active_directory.lookup_bind_password),W(e.active_directory.user_dn_search_base_dn),P(e.active_directory.user_dn_search_filter),Z(e.active_directory.group_search_base_dn),E(e.active_directory.group_search_filter),V(e.active_directory.skip_tls_verification),H(e.active_directory.server_insecure),Q(e.active_directory.server_start_tls)))})).catch((a=>{e((0,d.Ih)(a))}))}),[a,e]);(0,n.useEffect)((()=>{a&&le()}),[a,le]);return(0,g.jsxs)(n.Fragment,{children:[(0,g.jsx)(u.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,g.jsx)(r.EjK,{}),isLoading:h,onClose:()=>v(!1),isOpen:m,onConfirm:()=>{_(!0);let t={};switch(x){case"AD":t.active_directory={url:w,lookup_bind_dn:U,lookup_bind_password:R,user_dn_search_base_dn:z,user_dn_search_filter:G,group_search_base_dn:q,group_search_filter:K,skip_tls_verification:J,server_insecure:Y,server_start_tls:M};break;case"OpenID":t.oidc={configuration_url:j,client_id:I,secret_id:b,callback_url:k,claim_name:C,scopes:L}}p.Z.invoke("POST","/api/v1/namespaces/".concat(null===a||void 0===a?void 0:a.namespace,"/tenants/").concat(null===a||void 0===a?void 0:a.name,"/identity-provider"),t).then((()=>{_(!1),v(!1),le()})).catch((a=>{e((0,d.Ih)(a)),_(!1)}))},confirmationContent:(0,g.jsx)(n.Fragment,{children:"Are you sure you want to save the changes and restart the service?"})}),t?(0,g.jsx)(r.xuv,{sx:{textAlign:"center"},children:(0,g.jsx)(r.aNw,{})}):(0,g.jsxs)(n.Fragment,{children:[(0,g.jsx)(r.xuv,{children:(0,g.jsx)(r.NZf,{separator:!0,sx:{marginBottom:15},children:"Identity Provider"})}),(0,g.jsxs)(r.ltY,{children:[(0,g.jsx)(r.Eep,{currentValue:x,id:"idp-options",name:"idp-options",label:"Protocol",onChange:e=>{D(e.target.value)},selectorOptions:[{label:"Built-in",value:"Built-in",icon:(0,g.jsx)(r.oyc,{})},{label:"Open ID",value:"OpenID",icon:(0,g.jsx)(r.gyG,{})},{label:"LDAP / Active Directory",value:"AD",icon:(0,g.jsx)(r.vcZ,{})}]}),"OpenID"===x&&(0,g.jsxs)(n.Fragment,{children:[(0,g.jsx)(r.Wzg,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:e=>{S(e.target.value),re("openID_CONFIGURATION_URL")},label:"Configuration URL",value:j,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:te.openID_CONFIGURATION_URL||"",required:!0}),(0,g.jsx)(r.Wzg,{id:"openID_clientID",name:"openID_clientID",onChange:e=>{f(e.target.value),re("openID_clientID")},label:"Client ID",value:I,error:te.openID_clientID||"",required:!0}),(0,g.jsx)(r.Wzg,{type:"password",id:"openID_secretID",name:"openID_secretID",onChange:e=>{y(e.target.value),re("openID_secretID")},label:"Secret ID",value:b,error:te.openID_secretID||"",required:!0}),(0,g.jsx)(r.Wzg,{id:"openID_claimName",name:"openID_claimName",onChange:e=>{A(e.target.value),re("openID_claimName")},label:"Claim Name",value:C,placeholder:"policy",error:te.openID_claimName||""}),(0,g.jsx)(r.Wzg,{id:"openID_scopes",name:"openID_scopes",onChange:e=>{B(e.target.value),re("openID_scopes")},label:"Scopes",value:L})]}),"AD"===x&&(0,g.jsxs)(n.Fragment,{children:[(0,g.jsx)(r.Wzg,{id:"AD_URL",name:"AD_URL",onChange:e=>{T(e.target.value),re("AD_URL")},label:"LDAP Server Address",value:w,placeholder:"ldap-server:636",error:te.AD_URL||"",required:!0}),(0,g.jsx)(r.rsf,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:J,onChange:e=>{const a=e.target.checked;V(a)},label:"Skip TLS Verification"}),(0,g.jsx)(r.rsf,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:Y,onChange:e=>{const a=e.target.checked;H(a)},label:"Server Insecure"}),Y?(0,g.jsx)(r.J6i,{title:"Warning",message:"All traffic with Active Directory will be\n unencrypted",variant:"warning",sx:{marginBottom:15}}):null,(0,g.jsx)(r.rsf,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:M,onChange:e=>{const a=e.target.checked;Q(a)},label:"Start TLS connection to AD/LDAP server"}),(0,g.jsx)(r.Wzg,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:e=>{O(e.target.value),re("ad_lookupBindDN")},label:"Lookup Bind DN",value:U,placeholder:"cn=admin,dc=min,dc=io",error:te.ad_lookupBindDN||"",required:!0}),(0,g.jsx)(r.Wzg,{type:"password",id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:e=>{F(e.target.value)},label:"Lookup Bind Password",value:R,placeholder:"admin"}),(0,g.jsx)(r.Wzg,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:e=>{W(e.target.value)},label:"User DN Search Base DN",value:z,placeholder:"dc=min,dc=io"}),(0,g.jsx)(r.Wzg,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:e=>{P(e.target.value)},label:"User DN Search Filter",value:G,placeholder:"(sAMAcountName=%s)"}),(0,g.jsx)(r.Wzg,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:e=>{Z(e.target.value)},label:"Group Search Base DN",value:q,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"}),(0,g.jsx)(r.Wzg,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:e=>{E(e.target.value)},label:"Group Search Filter",value:K,placeholder:"(&(objectclass=groupOfNames)(member=%s))"})]}),(0,g.jsx)(r.xuv,{sx:s.I.modalButtonBar,children:(0,g.jsx)(r.zxk,{id:"save-idp",type:"submit",variant:"callAction",color:"primary",disabled:!ie||h,onClick:()=>v(!0),label:"Save"})}),"AD"===x&&(0,g.jsxs)(n.Fragment,{children:[(0,g.jsx)(r.NZf,{separator:!0,children:"User & Group management"}),(0,g.jsx)("br",{}),(0,g.jsxs)("fieldset",{className:"inputItem",children:[(0,g.jsx)("legend",{children:"List of user DNs (Distinguished Names) to be added as Tenant Administrators"}),(0,g.jsx)(r.rjZ,{item:!0,xs:12,children:X.map(((e,a)=>(0,g.jsx)(n.Fragment,{children:(0,g.jsxs)(r.xuv,{sx:{display:"flex",marginBottom:10},children:[(0,g.jsx)(r.Wzg,{id:"ad-userdn-".concat(a.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(a.toString()),value:X[a],onChange:e=>{$(X.map(((t,n)=>n===a?e.target.value:t)))},index:a,error:te["ad-userdn-".concat(a.toString())]||""},"csv-ad-userdn-".concat(a.toString())),(0,g.jsxs)(r.xuv,{sx:{marginLeft:10,display:"flex",height:38},children:[(0,g.jsx)(r.ua7,{tooltip:"Add User","aria-label":"add",children:(0,g.jsx)(r.hU,{size:"small",onClick:()=>{$([...X,""])},children:(0,g.jsx)(r.dtP,{})})}),(0,g.jsx)(r.ua7,{tooltip:"Remove","aria-label":"add",children:(0,g.jsx)(r.hU,{size:"small",style:{marginLeft:16},onClick:()=>{X.length>1&&$(X.filter(((e,t)=>t!==a)))},children:(0,g.jsx)(r.pJl,{})})})]})]})},"identityField-".concat(a.toString()))))})]}),(0,g.jsxs)("fieldset",{className:"inputItem",children:[(0,g.jsx)("legend",{children:"List of group DNs (Distinguished Names) to be added as Tenant Administrators"}),(0,g.jsx)(r.rjZ,{item:!0,xs:12,children:ee.map(((e,a)=>(0,g.jsx)(n.Fragment,{children:(0,g.jsxs)(r.xuv,{sx:{display:"flex",marginBottom:10},children:[(0,g.jsx)(r.Wzg,{id:"ad-groupdn-".concat(a.toString()),label:"",placeholder:"",name:"ad-groupdn-".concat(a.toString()),value:ee[a],onChange:e=>{ae(ee.map(((t,n)=>n===a?e.target.value:t)))},index:a,error:te["ad-groupdn-".concat(a.toString())]||""},"csv-ad-groupdn-".concat(a.toString())),(0,g.jsxs)(r.xuv,{sx:{marginLeft:10,display:"flex",height:38},children:[(0,g.jsx)(r.ua7,{tooltip:"Add Group","aria-label":"add",children:(0,g.jsx)(r.hU,{size:"small",onClick:()=>{ae([...ee,""])},children:(0,g.jsx)(r.dtP,{})})}),(0,g.jsx)(r.ua7,{tooltip:"Remove","aria-label":"add",children:(0,g.jsx)(r.hU,{size:"small",style:{marginLeft:16},onClick:()=>{ee.length>1&&ae(ee.filter(((e,t)=>t!==a)))},children:(0,g.jsx)(r.pJl,{})})})]})]})},"identityField-".concat(a.toString()))))})]}),(0,g.jsx)("br",{}),(0,g.jsx)(r.xuv,{sx:s.I.modalButtonBar,children:(0,g.jsx)(r.zxk,{id:"add-additional-dns",type:"submit",variant:"callAction",disabled:!ie||h,onClick:()=>(()=>{_(!0);let t={};"AD"===x&&(t={user_dns:X.filter((e=>""!==e.trim())),group_dns:ee.filter((e=>""!==e.trim()))});p.Z.invoke("POST","/api/v1/namespaces/".concat(null===a||void 0===a?void 0:a.namespace,"/tenants/").concat(null===a||void 0===a?void 0:a.name,"/set-administrators"),t).then((()=>{_(!1),ae([""]),$([""]),le(),e((0,d.y1)("Administrators added successfully"))})).catch((a=>{e((0,d.Ih)(a)),_(!1)}))})(),label:"Add additional DNs"})})]})]})]})]})}}}]); +//# sourceMappingURL=21.736e7ab9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/21.736e7ab9.chunk.js.map b/web-app/build/static/js/21.736e7ab9.chunk.js.map new file mode 100644 index 00000000000..db6e93e7ce1 --- /dev/null +++ b/web-app/build/static/js/21.736e7ab9.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/21.736e7ab9.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Tenants/TenantDetails/TenantIdentityProvider.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n AddIcon,\n Box,\n Button,\n ConfirmModalIcon,\n DeleteIcon,\n FormLayout,\n Grid,\n IconButton,\n InformativeMessage,\n InputBox,\n LDAPIcon,\n Loader,\n OIDCIcon,\n RadioGroup,\n SectionTitle,\n Switch,\n Tooltip,\n UsersIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n ITenantIdentityProviderResponse,\n ITenantSetAdministratorsRequest,\n} from \"../types\";\nimport { clearValidationError } from \"../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../utils/validationFunctions\";\nimport {\n setErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport api from \"../../../../common/api\";\n\nconst TenantIdentityProvider = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [idpSelection, setIdpSelection] = useState(\"Built-in\");\n const [openIDConfigurationURL, setOpenIDConfigurationURL] =\n useState(\"\");\n const [openIDClientID, setOpenIDClientID] = useState(\"\");\n const [openIDSecretID, setOpenIDSecretID] = useState(\"\");\n const [openIDCallbackURL, setOpenIDCallbackURL] = useState(\"\");\n const [openIDClaimName, setOpenIDClaimName] = useState(\"\");\n const [openIDScopes, setOpenIDScopes] = useState(\"\");\n const [ADURL, setADURL] = useState(\"\");\n const [ADLookupBindDN, setADLookupBindDN] = useState(\"\");\n const [ADLookupBindPassword, setADLookupBindPassword] = useState(\"\");\n const [ADUserDNSearchBaseDN, setADUserDNSearchBaseDN] = useState(\"\");\n const [ADUserDNSearchFilter, setADUserDNSearchFilter] = useState(\"\");\n const [ADGroupSearchBaseDN, setADGroupSearchBaseDN] = useState(\"\");\n const [ADGroupSearchFilter, setADGroupSearchFilter] = useState(\"\");\n const [ADSkipTLS, setADSkipTLS] = useState(false);\n const [ADServerInsecure, setADServerInsecure] = useState(false);\n const [ADServerStartTLS, setADServerStartTLS] = useState(false);\n const [ADUserDNs, setADUserDNs] = useState([\"\"]);\n const [ADGroupDNs, setADGroupDNs] = useState([\"\"]);\n const [validationErrors, setValidationErrors] = useState({});\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n const [isFormValid, setIsFormValid] = useState(false);\n\n // Validation\n useEffect(() => {\n let identityProviderValidation: IValidation[] = [];\n\n if (idpSelection === \"OpenID\") {\n identityProviderValidation = [\n ...identityProviderValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: false,\n value: openIDClaimName,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n identityProviderValidation = [\n ...identityProviderValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_lookupBindDN\",\n required: true,\n value: ADLookupBindDN,\n },\n ];\n }\n\n const commonVal = commonFormValidation(identityProviderValidation);\n\n setIsFormValid(Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDConfigurationURL,\n openIDClientID,\n openIDSecretID,\n openIDClaimName,\n ADURL,\n ADLookupBindDN,\n ]);\n\n const getTenantIdentityProviderInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/identity-provider`,\n )\n .then((res: ITenantIdentityProviderResponse) => {\n if (res) {\n if (res.oidc) {\n setIdpSelection(\"OpenID\");\n setOpenIDConfigurationURL(res.oidc.configuration_url);\n setOpenIDClientID(res.oidc.client_id);\n setOpenIDSecretID(res.oidc.secret_id);\n setOpenIDCallbackURL(res.oidc.callback_url);\n setOpenIDClaimName(res.oidc.claim_name);\n setOpenIDScopes(res.oidc.scopes);\n } else if (res.active_directory) {\n setIdpSelection(\"AD\");\n setADURL(res.active_directory.url);\n setADLookupBindDN(res.active_directory.lookup_bind_dn);\n setADLookupBindPassword(res.active_directory.lookup_bind_password);\n setADUserDNSearchBaseDN(\n res.active_directory.user_dn_search_base_dn,\n );\n setADUserDNSearchFilter(res.active_directory.user_dn_search_filter);\n setADGroupSearchBaseDN(res.active_directory.group_search_base_dn);\n setADGroupSearchFilter(res.active_directory.group_search_filter);\n setADSkipTLS(res.active_directory.skip_tls_verification);\n setADServerInsecure(res.active_directory.server_insecure);\n setADServerStartTLS(res.active_directory.server_start_tls);\n }\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantIdentityProviderInfo();\n }\n }, [tenant, getTenantIdentityProviderInfo]);\n\n const updateTenantIdentityProvider = () => {\n setIsSending(true);\n let payload: ITenantIdentityProviderResponse = {};\n switch (idpSelection) {\n case \"AD\":\n payload.active_directory = {\n url: ADURL,\n lookup_bind_dn: ADLookupBindDN,\n lookup_bind_password: ADLookupBindPassword,\n user_dn_search_base_dn: ADUserDNSearchBaseDN,\n user_dn_search_filter: ADUserDNSearchFilter,\n group_search_base_dn: ADGroupSearchBaseDN,\n group_search_filter: ADGroupSearchFilter,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n server_start_tls: ADServerStartTLS,\n };\n break;\n case \"OpenID\":\n payload.oidc = {\n configuration_url: openIDConfigurationURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n callback_url: openIDCallbackURL,\n claim_name: openIDClaimName,\n scopes: openIDScopes,\n };\n break;\n default:\n // Built-in IDP will be used by default\n }\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/identity-provider`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n getTenantIdentityProviderInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n const setAdministrators = () => {\n setIsSending(true);\n let payload: ITenantSetAdministratorsRequest = {};\n switch (idpSelection) {\n case \"AD\":\n payload = {\n user_dns: ADUserDNs.filter((user) => user.trim() !== \"\"),\n group_dns: ADGroupDNs.filter((group) => group.trim() !== \"\"),\n };\n break;\n default:\n // Built-in IDP will be used by default\n }\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/set-administrators`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n setADGroupDNs([\"\"]);\n setADUserDNs([\"\"]);\n getTenantIdentityProviderInfo();\n dispatch(setSnackBarMessage(`Administrators added successfully`));\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantIdentityProvider}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n \n \n \n ) : (\n \n \n \n Identity Provider\n \n \n \n {\n setIdpSelection(e.target.value);\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\", icon: },\n { label: \"Open ID\", value: \"OpenID\", icon: },\n {\n label: \"LDAP / Active Directory\",\n value: \"AD\",\n icon: ,\n },\n ]}\n />\n\n {idpSelection === \"OpenID\" && (\n \n ) => {\n setOpenIDConfigurationURL(e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n ) => {\n setOpenIDClientID(e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n ) => {\n setOpenIDSecretID(e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n ) => {\n setOpenIDClaimName(e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n placeholder=\"policy\"\n error={validationErrors[\"openID_claimName\"] || \"\"}\n />\n ) => {\n setOpenIDScopes(e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n )}\n\n {idpSelection === \"AD\" && (\n \n ) => {\n setADURL(e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADSkipTLS(checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADServerInsecure(checked);\n }}\n label={\"Server Insecure\"}\n />\n {ADServerInsecure ? (\n \n ) : null}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setADServerStartTLS(checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n ) => {\n setADLookupBindDN(e.target.value);\n cleanValidation(\"ad_lookupBindDN\");\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n error={validationErrors[\"ad_lookupBindDN\"] || \"\"}\n required\n />\n ) => {\n setADLookupBindPassword(e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n ) => {\n setADUserDNSearchBaseDN(e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n ) => {\n setADUserDNSearchFilter(e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(sAMAcountName=%s)\"\n />\n ) => {\n setADGroupSearchBaseDN(e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n ) => {\n setADGroupSearchFilter(e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n )}\n\n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n\n {idpSelection === \"AD\" && (\n \n User & Group management\n
\n
\n \n List of user DNs (Distinguished Names) to be added as Tenant\n Administrators\n \n \n {ADUserDNs.map((_, index) => {\n return (\n \n \n ,\n ) => {\n setADUserDNs(\n ADUserDNs.map((group, i) =>\n i === index ? e.target.value : group,\n ),\n );\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={\n validationErrors[\n `ad-userdn-${index.toString()}`\n ] || \"\"\n }\n />\n \n \n {\n setADUserDNs([...ADUserDNs, \"\"]);\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n setADUserDNs(\n ADUserDNs.filter((_, i) => i !== index),\n );\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n \n
\n
\n \n List of group DNs (Distinguished Names) to be added as\n Tenant Administrators\n \n \n {ADGroupDNs.map((_, index) => {\n return (\n \n \n ,\n ) => {\n setADGroupDNs(\n ADGroupDNs.map((group, i) =>\n i === index ? e.target.value : group,\n ),\n );\n }}\n index={index}\n key={`csv-ad-groupdn-${index.toString()}`}\n error={\n validationErrors[\n `ad-groupdn-${index.toString()}`\n ] || \"\"\n }\n />\n \n \n {\n setADGroupDNs([...ADGroupDNs, \"\"]);\n }}\n >\n \n \n \n \n {\n if (ADGroupDNs.length > 1) {\n setADGroupDNs(\n ADGroupDNs.filter(\n (_, i) => i !== index,\n ),\n );\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n \n
\n
\n \n setAdministrators()}\n label={\"Add additional DNs\"}\n />\n \n
\n )}\n
\n
\n )}\n
\n );\n};\n\nexport default TenantIdentityProvider;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","TenantIdentityProvider","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","loadingTenant","isSending","setIsSending","useState","dialogOpen","setDialogOpen","idpSelection","setIdpSelection","openIDConfigurationURL","setOpenIDConfigurationURL","openIDClientID","setOpenIDClientID","openIDSecretID","setOpenIDSecretID","openIDCallbackURL","setOpenIDCallbackURL","openIDClaimName","setOpenIDClaimName","openIDScopes","setOpenIDScopes","ADURL","setADURL","ADLookupBindDN","setADLookupBindDN","ADLookupBindPassword","setADLookupBindPassword","ADUserDNSearchBaseDN","setADUserDNSearchBaseDN","ADUserDNSearchFilter","setADUserDNSearchFilter","ADGroupSearchBaseDN","setADGroupSearchBaseDN","ADGroupSearchFilter","setADGroupSearchFilter","ADSkipTLS","setADSkipTLS","ADServerInsecure","setADServerInsecure","ADServerStartTLS","setADServerStartTLS","ADUserDNs","setADUserDNs","ADGroupDNs","setADGroupDNs","validationErrors","setValidationErrors","cleanValidation","fieldName","clearValidationError","isFormValid","setIsFormValid","useEffect","identityProviderValidation","fieldKey","required","value","commonVal","commonFormValidation","Object","keys","length","getTenantIdentityProviderInfo","useCallback","api","invoke","concat","namespace","name","then","res","oidc","configuration_url","client_id","secret_id","callback_url","claim_name","scopes","active_directory","url","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","group_search_base_dn","group_search_filter","skip_tls_verification","server_insecure","server_start_tls","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","updateTenantIdentityProvider","payload","confirmationContent","Box","sx","textAlign","Loader","SectionTitle","separator","FormLayout","RadioGroup","currentValue","id","onChange","e","target","selectorOptions","icon","UsersIcon","OIDCIcon","LDAPIcon","InputBox","placeholder","error","type","Switch","checked","InformativeMessage","message","variant","Button","disabled","onClick","className","Grid","item","xs","map","_","index","toString","group","i","height","Tooltip","tooltip","IconButton","size","AddIcon","style","filter","DeleteIcon","setAdministrators","user_dns","user","trim","group_dns","setSnackBarMessage"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/216.3a6753d9.chunk.js b/web-app/build/static/js/216.3a6753d9.chunk.js deleted file mode 100644 index 491312f1ffb..00000000000 --- a/web-app/build/static/js/216.3a6753d9.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[216],{3216:function(e,n,t){t.d(n,{Z:function(){return L}});var o=t(29439),i=t(93433),r=t(1413),l=t(72791),c=t(20890),a=t(13400),s=t(15473),d=t(61889),u=t(35527),h=t(57482),p=t(94454),x=t(57689),g=t(5171),v=t(26181),m=t.n(v),f=t(26769),w=t.n(f),b=t(11135),j=t(25787),C=t(97911),y=t(26759),S=t(70366),k=t(11087),Z=t(96040),N="#081C42",R="#081C42",T=t(80184),F=function(e){var n=e.active,t=void 0!==n&&n;return(0,T.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:(0,T.jsx)("path",{fill:t?R:N,d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"})})},B=function(e){var n=e.active,t=void 0!==n&&n;return(0,T.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:(0,T.jsx)("path",{fill:t?R:N,d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"})})},A=function(e){var n=e.active,t=void 0!==n&&n;return(0,T.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",children:(0,T.jsx)("path",{fill:t?R:N,d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"})})},z=function(e){return(0,T.jsx)("svg",(0,r.Z)((0,r.Z)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:"min-icon",fill:"currentcolor"},e),{},{children:(0,T.jsx)("path",{d:"M20 16h2v-2h-2v2zm0-9v5h2V7h-2zM10 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 10c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"})}))},I=t(75952),M=(0,j.Z)((function(){return(0,b.Z)({spacing:{margin:"0 8px"},buttonDisabled:{"&.MuiButtonBase-root.Mui-disabled":{cursor:"not-allowed",filter:"grayscale(100%)",opacity:"30%"}}})}))((function(e){var n=e.type,t=e.onClick,o=e.valueToSend,i=e.idField,r=e.selected,l=e.to,c=e.sendOnlyId,s=void 0!==c&&c,d=e.disabled,u=void 0!==d&&d,h=e.classes,p=e.label,x=s?o[i]:o,g="string"===typeof n?function(e,n){switch(e){case"view":case"preview":return(0,T.jsx)(I.P99,{});case"edit":return(0,T.jsx)(I.dY8,{});case"delete":return(0,T.jsx)(I.XHJ,{});case"description":return(0,T.jsx)(I.v42,{});case"share":return(0,T.jsx)(I.aAc,{});case"cloud":return(0,T.jsx)(F,{active:n});case"console":return(0,T.jsx)(B,{active:n});case"download":return(0,T.jsx)(I._8t,{});case"disable":return(0,T.jsx)(A,{active:n});case"format":return(0,T.jsx)(z,{})}return null}(n,r):n,v=(0,T.jsx)(a.Z,{"aria-label":"string"===typeof n?n:"",size:"small",className:"".concat(h.spacing," ").concat(u?h.buttonDisabled:""),disabled:u,onClick:t?function(e){e.stopPropagation(),u?e.preventDefault():t(x)}:function(){return null},sx:{width:"30px",height:"30px"},children:g});return p&&""!==p&&(v=(0,T.jsx)(Z.Z,{title:p,children:v})),t?v:w()(l)?u?v:(0,T.jsx)(k.rU,{to:"".concat(l,"/").concat(x),onClick:function(e){e.stopPropagation()},children:v}):null})),P=t(30829),_=t(23814),D=(0,j.Z)((function(e){return(0,b.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({},_.YI),_.Hr),_.lM),{},{fieldContainer:(0,r.Z)((0,r.Z)({},_.YI.fieldContainer),{},{display:"flex",justifyContent:"flex-start",alignItems:"center",margin:"15px 0",marginBottom:0,flexBasis:"initial",flexWrap:"nowrap"}),noTopMargin:{marginTop:0}}))}))((function(e){var n=e.label,t=e.onChange,o=e.value,i=e.id,r=e.name,c=e.checked,a=void 0!==c&&c,s=e.disabled,u=void 0!==s&&s,h=e.noTopMargin,x=void 0!==h&&h,g=e.tooltip,v=void 0===g?"":g,m=e.overrideLabelClasses,f=void 0===m?"":m,w=e.overrideCheckboxStyles,b=e.classes,j=e.className;return(0,T.jsx)(l.Fragment,{children:(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:"".concat(b.fieldContainer," ").concat(x?b.noTopMargin:""," ").concat(j||""),children:[(0,T.jsx)("div",{children:(0,T.jsx)(p.Z,{name:r,id:i,value:o,color:"primary",inputProps:{"aria-label":"secondary checkbox"},checked:a,onChange:t,checkedIcon:(0,T.jsx)("span",{className:b.checkedIcon}),icon:(0,T.jsx)("span",{className:b.unCheckedIcon}),disabled:u,disableRipple:!0,disableFocusRipple:!0,focusRipple:!1,centerRipple:!1,disableTouchRipple:!0,style:w||{}})}),""!==n&&(0,T.jsxs)(P.Z,{htmlFor:i,className:"".concat(b.noMinWidthLabel," ").concat(f),children:[(0,T.jsx)("span",{children:n}),""!==v&&(0,T.jsx)("div",{className:b.tooltipContainer,children:(0,T.jsx)(Z.Z,{title:v,placement:"top-start",children:(0,T.jsx)("div",{className:b.tooltip,children:(0,T.jsx)(I.byK,{})})})})]})]})})})),H=t(27454),K=function(e,n,t,o,r,c,a,s,d,u,h){var p=function(e,n,t,o,r,l,c){var a=(0,i.Z)(e);l&&(a=e.filter((function(e){return c.includes(e.elementKey)})));var s=n;return o&&(s-=45),r&&(s-=t),a.reduce((function(e,n){return n.width?e-n.width:e}),s)/a.filter((function(e){return!e.width})).length}(e,n,t,o,r,s,d);return e.map((function(e,n){if(s&&!d.includes(e.elementKey))return null;var t=!e.enableSort||!e.enableSort;return(0,T.jsx)(g.sg,{dataKey:e.elementKey,headerClassName:"titleHeader ".concat(e.headerTextAlign?"text-".concat(e.headerTextAlign):""),headerRenderer:function(){return(0,T.jsxs)(l.Fragment,{children:[u===e.elementKey&&(0,T.jsx)(l.Fragment,{children:"ASC"===h?(0,T.jsx)(S.Z,{}):(0,T.jsx)(y.Z,{})}),e.label]})},className:e.contentTextAlign?"text-".concat(e.contentTextAlign):"",cellRenderer:function(n){var t=n.rowData,o=!!c&&c.includes(w()(t)?t:t[a]);return function(e,n,t){var o=w()(e)?e:m()(e,n.elementKey,null),i=n.renderFullObject?e:o,r=n.renderFunction?n.renderFunction(i):i;return(0,T.jsx)(l.Fragment,{children:(0,T.jsx)("span",{className:t?"selected":"",children:r})})}(t,e,o)},width:e.width||p,disableSort:t,defaultSortDirection:"ASC"},"col-tb-".concat(n.toString()))}))},L=(0,j.Z)((function(){return(0,b.Z)((0,r.Z)((0,r.Z)({paper:{display:"flex",overflow:"auto",flexDirection:"column",padding:"0 16px 8px",boxShadow:"none",border:"#EAEDEE 1px solid",borderRadius:3,minHeight:200,overflowY:"scroll",position:"relative","&::-webkit-scrollbar":{width:0,height:3}},noBackground:{backgroundColor:"transparent",border:0},disabled:{backgroundColor:"#fbfafa",color:"#cccccc"},defaultPaperHeight:{height:"calc(100vh - 205px)"},loadingBox:{paddingTop:"100px",paddingBottom:"100px"},overlayColumnSelection:{position:"absolute",right:0,top:0},popoverContent:{maxHeight:250,overflowY:"auto",padding:"0 10px 10px"},shownColumnsLabel:{color:"#9c9c9c",fontSize:12,padding:10,borderBottom:"#eaeaea 1px solid",width:"100%"},checkAllWrapper:{marginTop:-16},"@global":{".rowLine":{borderBottom:"1px solid ".concat("#9c9c9c80"),height:40,fontSize:14,transitionDuration:.3,"&:focus":{outline:"initial"},"&:hover:not(.ReactVirtualized__Table__headerRow)":{userSelect:"none",backgroundColor:"#ececec",fontWeight:600,"&.canClick":{cursor:"pointer"},"&.canSelectText":{userSelect:"text"}},"& .selected":{fontWeight:600},"&:not(.deleted) .selected":{color:"#081C42"},"&.deleted .selected":{color:"#C51B3F"}},".headerItem":{userSelect:"none",fontWeight:700,fontSize:14,fontStyle:"initial",display:"flex",alignItems:"center",outline:"none"},".ReactVirtualized__Table__row":{width:"100% !important"},".ReactVirtualized__Table__headerRow":{fontWeight:700,fontSize:14,borderColor:"#39393980",textTransform:"initial"},".optionsAlignment":{textAlign:"center","& .min-icon":{width:16,height:16}},".text-center":{textAlign:"center"},".text-right":{textAlign:"right"},".progress-enabled":{paddingTop:3,display:"inline-block",margin:"0 10px",position:"relative",width:18,height:18},".progress-enabled > .MuiCircularProgress-root":{position:"absolute",left:0,top:3}}},_.lM),_.FU))}))((function(e){var n=e.itemActions,t=e.columns,i=e.onSelect,r=e.records,v=e.isLoading,f=e.loadingMessage,b=void 0===f?(0,T.jsx)(c.Z,{component:"h3",children:"Loading..."}):f,j=e.entityName,y=e.selectedItems,S=e.idField,k=e.classes,Z=e.radioSelection,N=void 0!==Z&&Z,R=e.customEmptyMessage,F=void 0===R?"":R,B=e.customPaperHeight,A=void 0===B?"":B,z=e.noBackground,P=void 0!==z&&z,L=e.columnsSelector,W=void 0!==L&&L,O=e.textSelectable,E=void 0!==O&&O,V=e.columnsShown,Y=void 0===V?[]:V,U=e.onColumnChange,q=void 0===U?function(e,n){}:U,G=e.infiniteScrollConfig,J=e.sortConfig,X=e.autoScrollToBottom,Q=void 0!==X&&X,$=e.disabled,ee=void 0!==$&&$,ne=e.onSelectAll,te=e.rowStyle,oe=e.parentClassName,ie=void 0===oe?"":oe,re=e.tooltip,le=(0,x.s0)(),ce=(0,l.useState)(!1),ae=(0,o.Z)(ce,2),se=ae[0],de=ae[1],ue=l.useState(null),he=(0,o.Z)(ue,2),pe=he[0],xe=he[1],ge=n?n.find((function(e){return"view"===e.type})):null,ve=function(e){de(!se),xe(e.currentTarget)},me=function(){de(!1),xe(null)};return(0,T.jsx)(d.ZP,{item:!0,xs:12,className:ie,children:(0,T.jsx)(H.Z,{tooltip:re||"",children:(0,T.jsxs)(u.Z,{style:{overflow:"hidden"},className:"".concat(k.paper," ").concat(P?k.noBackground:"","\n ").concat(ee?k.disabled:""," \n ").concat(""!==A?A:k.defaultPaperHeight),children:[v&&(0,T.jsxs)(d.ZP,{container:!0,className:k.loadingBox,children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,style:{textAlign:"center"},children:b}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(h.Z,{})})]}),W&&!v&&r.length>0&&(0,T.jsx)("div",{className:k.overlayColumnSelection,children:function(e){return(0,T.jsxs)(l.Fragment,{children:[(0,T.jsx)(a.Z,{"aria-describedby":"columnsSelector",color:"primary",onClick:ve,size:"large",children:(0,T.jsx)(C.Z,{fontSize:"inherit"})}),(0,T.jsxs)(s.ZP,{anchorEl:pe,id:"columnsSelector",open:se,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:me,children:[(0,T.jsx)("div",{className:k.shownColumnsLabel,children:"Shown Columns"}),(0,T.jsx)("div",{className:k.popoverContent,children:e.map((function(e){return(0,T.jsx)(D,{label:e.label,checked:Y.includes(e.elementKey),onChange:function(n){q(e.elementKey,n.target.checked)},id:"chbox-".concat(e.label),name:"chbox-".concat(e.label),value:e.label},"tableColumns-".concat(e.label))}))})]})]})}(t)}),r&&!v&&r.length>0?(0,T.jsx)(g.b2,{isRowLoaded:function(e){var n=e.index;return!!r[n]},loadMoreRows:G?G.loadMoreRecords:function(){return new Promise((function(){return!0}))},rowCount:G?G.recordsCount:r.length,children:function(e){var o=e.onRowsRendered,c=e.registerChild;return(0,T.jsx)(g.qj,{children:function(e){var a=e.width,s=e.height,d=function(e,n){var t=45*n+15;return t<80?80:t>e?e:t}(a,n?n.filter((function(e){return"view"!==e.type})).length:0),u=!(!i||!y),h=!!(n&&n.length>1||n&&1===n.length&&"view"!==n[0].type);return(0,T.jsxs)(g.iA,{ref:c,disableHeader:!1,headerClassName:"headerItem",headerHeight:40,height:s+8,noRowsRenderer:function(){return(0,T.jsx)(l.Fragment,{children:""!==F?F:"There are no ".concat(j," yet.")})},overscanRowCount:10,rowHeight:40,width:a,rowCount:r.length,rowGetter:function(e){var n=e.index;return r[n]},onRowClick:function(e){!function(e){if(ge){var n=ge.sendOnlyId?e[S]:e,t=!1;if(ge.disableButtonFunction&&ge.disableButtonFunction(n)&&(t=!0),ge.to&&!t)return void le("".concat(ge.to,"/").concat(n));ge.onClick&&!t&&ge.onClick(n)}}(e.rowData)},rowClassName:function(e){return"rowLine ".concat(ge?"canClick":""," ").concat(!ge&&E?"canSelectText":""," ").concat(te?te(e):"")},onRowsRendered:o,sort:J?J.triggerSort:void 0,sortBy:J?J.currentSort:void 0,sortDirection:J?J.currentDirection:void 0,scrollToIndex:Q?r.length-1:-1,rowStyle:function(e){if(te){var n=te(e);return"string"===typeof n?m()(_.xS,n,{}):n}return{}},children:[u&&(0,T.jsx)(g.sg,{headerRenderer:function(){return(0,T.jsx)(l.Fragment,{children:ne?(0,T.jsx)("div",{className:k.checkAllWrapper,children:(0,T.jsx)(D,{label:"",onChange:ne,value:"all",id:"selectAll",name:"selectAll",checked:(null===y||void 0===y?void 0:y.length)===r.length})}):(0,T.jsx)(l.Fragment,{children:"Select"})})},dataKey:"select-".concat(S),width:45,disableSort:!0,cellRenderer:function(e){var n=e.rowData,t=!!y&&y.includes(w()(n)?n:n[S]);return(0,T.jsx)(p.Z,{value:w()(n)?n:n[S],color:"primary",inputProps:{"aria-label":"secondary checkbox"},className:"TableCheckbox",checked:t,onChange:i,onClick:function(e){e.stopPropagation()},checkedIcon:(0,T.jsx)("span",{className:N?k.radioSelectedIcon:k.checkedIcon}),icon:(0,T.jsx)("span",{className:N?k.radioUnselectedIcon:k.unCheckedIcon})})}}),K(t,a,d,u,h,y||[],S,W,Y,J?J.currentSort:"",J?J.currentDirection:void 0),h&&(0,T.jsx)(g.sg,{dataKey:S,width:d,headerClassName:"optionsAlignment",className:"optionsAlignment",cellRenderer:function(e){var t=e.rowData,o=!!y&&y.includes(w()(t)?t:t[S]);return function(e,n,t,o){return e.map((function(e,i){if("view"===e.type)return null;var r="string"===typeof n?n:n[o],l=!1;return e.disableButtonFunction&&e.disableButtonFunction(r)&&(l=!0),e.showLoaderFunction&&e.showLoaderFunction(r)?(0,T.jsx)("div",{className:"progress-enabled",children:(0,T.jsx)(I.aNw,{style:{width:18,height:18}},"actions-loader-".concat(e.type,"-").concat(i.toString()))}):(0,T.jsx)(M,{label:e.label,type:e.type,onClick:e.onClick,to:e.to,valueToSend:n,selected:t,idField:o,sendOnlyId:!!e.sendOnlyId,disabled:l},"actions-".concat(e.type,"-").concat(i.toString()))}))}(n||[],t,o,S)}})]})}})}}):(0,T.jsx)(l.Fragment,{children:!v&&(0,T.jsx)("div",{id:"empty-results",children:""!==F?F:"There are no ".concat(j," yet.")})})]})})})}))}}]); -//# sourceMappingURL=216.3a6753d9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/216.3a6753d9.chunk.js.map b/web-app/build/static/js/216.3a6753d9.chunk.js.map deleted file mode 100644 index 3cd06c1d290..00000000000 --- a/web-app/build/static/js/216.3a6753d9.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/216.3a6753d9.chunk.js","mappings":"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","sources":["screens/Console/Common/TableWrapper/TableActionIcons/common.ts","screens/Console/Common/TableWrapper/TableActionIcons/CloudIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ConsoleIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DisableIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/FormatDriveIcon.tsx","screens/Console/Common/TableWrapper/TableActionButton.tsx","screens/Console/Common/FormComponents/CheckboxWrapper/CheckboxWrapper.tsx","screens/Console/Common/TableWrapper/TableWrapper.tsx"],"sourcesContent":["export interface IIcon {\n active: boolean;\n}\n\nexport const unSelected = \"#081C42\";\nexport const selected = \"#081C42\";\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst CloudIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default CloudIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ConsoleIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default ConsoleIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DescriptionIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default DescriptionIcon;\n","import React, { SVGProps } from \"react\";\n\nconst FormatDriveIcon = (props: SVGProps) => (\n \n \n \n);\n\nexport default FormatDriveIcon;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport isString from \"lodash/isString\";\nimport { Link } from \"react-router-dom\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { IconButton, Tooltip } from \"@mui/material\";\nimport CloudIcon from \"./TableActionIcons/CloudIcon\";\nimport ConsoleIcon from \"./TableActionIcons/ConsoleIcon\";\nimport DisableIcon from \"./TableActionIcons/DisableIcon\";\nimport FormatDriveIcon from \"./TableActionIcons/FormatDriveIcon\";\nimport {\n DownloadIcon,\n EditIcon,\n IAMPoliciesIcon,\n PreviewIcon,\n ShareIcon,\n TrashIcon,\n} from \"mds\";\n\nconst styles = () =>\n createStyles({\n spacing: {\n margin: \"0 8px\",\n },\n buttonDisabled: {\n \"&.MuiButtonBase-root.Mui-disabled\": {\n cursor: \"not-allowed\",\n filter: \"grayscale(100%)\",\n opacity: \"30%\",\n },\n },\n });\n\ninterface IActionButton {\n label?: string;\n type: string | React.ReactNode;\n onClick?: (id: string) => any;\n to?: string;\n valueToSend: any;\n selected: boolean;\n sendOnlyId?: boolean;\n idField: string;\n disabled: boolean;\n classes: any;\n}\n\nconst defineIcon = (type: string, selected: boolean) => {\n switch (type) {\n case \"view\":\n return ;\n case \"edit\":\n return ;\n case \"delete\":\n return ;\n case \"description\":\n return ;\n case \"share\":\n return ;\n case \"cloud\":\n return ;\n case \"console\":\n return ;\n case \"download\":\n return ;\n case \"disable\":\n return ;\n case \"format\":\n return ;\n case \"preview\":\n return ;\n }\n\n return null;\n};\n\nconst TableActionButton = ({\n type,\n onClick,\n valueToSend,\n idField,\n selected,\n to,\n sendOnlyId = false,\n disabled = false,\n classes,\n label,\n}: IActionButton) => {\n const valueClick = sendOnlyId ? valueToSend[idField] : valueToSend;\n\n const icon = typeof type === \"string\" ? defineIcon(type, selected) : type;\n let buttonElement = (\n {\n e.stopPropagation();\n if (!disabled) {\n onClick(valueClick);\n } else {\n e.preventDefault();\n }\n }\n : () => null\n }\n sx={{\n width: \"30px\",\n height: \"30px\",\n }}\n >\n {icon}\n \n );\n\n if (label && label !== \"\") {\n buttonElement = {buttonElement};\n }\n\n if (onClick) {\n return buttonElement;\n }\n\n if (isString(to)) {\n if (!disabled) {\n return (\n {\n e.stopPropagation();\n }}\n >\n {buttonElement}\n \n );\n }\n\n return buttonElement;\n }\n\n return null;\n};\n\nexport default withStyles(styles)(TableActionButton);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Checkbox, Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n checkboxIcons,\n fieldBasic,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\n\ninterface CheckBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n overrideLabelClasses?: string;\n overrideCheckboxStyles?: React.CSSProperties;\n index?: number;\n noTopMargin?: boolean;\n checked: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n ...checkboxIcons,\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n margin: \"15px 0\",\n marginBottom: 0,\n flexBasis: \"initial\",\n flexWrap: \"nowrap\",\n },\n noTopMargin: {\n marginTop: 0,\n },\n });\n\nconst CheckboxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n noTopMargin = false,\n tooltip = \"\",\n overrideLabelClasses = \"\",\n overrideCheckboxStyles,\n classes,\n className,\n}: CheckBoxProps) => {\n return (\n \n \n
\n }\n icon={}\n disabled={disabled}\n disableRipple\n disableFocusRipple\n focusRipple={false}\n centerRipple={false}\n disableTouchRipple\n style={overrideCheckboxStyles || {}}\n />\n
\n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(CheckboxWrapper);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { Fragment, useState } from \"react\";\nimport {\n Checkbox,\n Grid,\n IconButton,\n LinearProgress,\n Paper,\n Popover,\n Typography,\n} from \"@mui/material\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AutoSizer, Column, InfiniteLoader, Table } from \"react-virtualized\";\nimport get from \"lodash/get\";\nimport isString from \"lodash/isString\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport ViewColumnIcon from \"@mui/icons-material/ViewColumn\";\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\nimport ArrowDropUpIcon from \"@mui/icons-material/ArrowDropUp\";\nimport TableActionButton from \"./TableActionButton\";\nimport CheckboxWrapper from \"../FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport {\n checkboxIcons,\n radioIcons,\n TableRowPredefStyles,\n} from \"../FormComponents/common/styleLibrary\";\nimport { Loader } from \"mds\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\n//Interfaces for table Items\n\nexport interface ItemActions {\n label?: string;\n type: string | any;\n to?: string;\n sendOnlyId?: boolean;\n disableButtonFunction?: (itemValue: any) => boolean;\n showLoaderFunction?: (itemValue: any) => boolean;\n\n onClick?(valueToSend: any): any;\n}\n\ninterface IColumns {\n label: string;\n elementKey?: string;\n renderFunction?: (input: any) => any;\n renderFullObject?: boolean;\n globalClass?: any;\n rowClass?: any;\n width?: number;\n headerTextAlign?: string;\n contentTextAlign?: string;\n enableSort?: boolean;\n}\n\ninterface IInfiniteScrollConfig {\n loadMoreRecords: (indexElements: {\n startIndex: number;\n stopIndex: number;\n }) => Promise;\n recordsCount: number;\n}\n\ninterface ISortConfig {\n triggerSort: (val: any) => any;\n currentSort: string;\n currentDirection: \"ASC\" | \"DESC\" | undefined;\n}\n\ninterface TableWrapperProps {\n itemActions?: ItemActions[] | null;\n columns: IColumns[];\n onSelect?: (e: React.ChangeEvent) => any;\n idField: string;\n isLoading: boolean;\n loadingMessage?: React.ReactNode;\n records: any[];\n classes: any;\n entityName: string;\n selectedItems?: string[];\n radioSelection?: boolean;\n customEmptyMessage?: string;\n customPaperHeight?: string;\n noBackground?: boolean;\n columnsSelector?: boolean;\n textSelectable?: boolean;\n columnsShown?: string[];\n onColumnChange?: (column: string, state: boolean) => any;\n autoScrollToBottom?: boolean;\n infiniteScrollConfig?: IInfiniteScrollConfig;\n sortConfig?: ISortConfig;\n disabled?: boolean;\n onSelectAll?: () => void;\n rowStyle?: ({\n index,\n }: {\n index: number;\n }) => \"deleted\" | \"\" | React.CSSProperties;\n parentClassName?: string;\n tooltip?: any;\n}\n\nconst borderColor = \"#9c9c9c80\";\n\nconst styles = () =>\n createStyles({\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n padding: \"0 16px 8px\",\n boxShadow: \"none\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n minHeight: 200,\n overflowY: \"scroll\",\n position: \"relative\",\n \"&::-webkit-scrollbar\": {\n width: 0,\n height: 3,\n },\n },\n noBackground: {\n backgroundColor: \"transparent\",\n border: 0,\n },\n disabled: {\n backgroundColor: \"#fbfafa\",\n color: \"#cccccc\",\n },\n defaultPaperHeight: {\n height: \"calc(100vh - 205px)\",\n },\n loadingBox: {\n paddingTop: \"100px\",\n paddingBottom: \"100px\",\n },\n overlayColumnSelection: {\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n popoverContent: {\n maxHeight: 250,\n overflowY: \"auto\",\n padding: \"0 10px 10px\",\n },\n shownColumnsLabel: {\n color: \"#9c9c9c\",\n fontSize: 12,\n padding: 10,\n borderBottom: \"#eaeaea 1px solid\",\n width: \"100%\",\n },\n checkAllWrapper: {\n marginTop: -16,\n },\n \"@global\": {\n \".rowLine\": {\n borderBottom: `1px solid ${borderColor}`,\n height: 40,\n fontSize: 14,\n transitionDuration: 0.3,\n \"&:focus\": {\n outline: \"initial\",\n },\n \"&:hover:not(.ReactVirtualized__Table__headerRow)\": {\n userSelect: \"none\",\n backgroundColor: \"#ececec\",\n fontWeight: 600,\n \"&.canClick\": {\n cursor: \"pointer\",\n },\n \"&.canSelectText\": {\n userSelect: \"text\",\n },\n },\n \"& .selected\": {\n fontWeight: 600,\n },\n \"&:not(.deleted) .selected\": {\n color: \"#081C42\",\n },\n \"&.deleted .selected\": {\n color: \"#C51B3F\",\n },\n },\n \".headerItem\": {\n userSelect: \"none\",\n fontWeight: 700,\n fontSize: 14,\n fontStyle: \"initial\",\n display: \"flex\",\n alignItems: \"center\",\n outline: \"none\",\n },\n \".ReactVirtualized__Table__row\": {\n width: \"100% !important\",\n },\n \".ReactVirtualized__Table__headerRow\": {\n fontWeight: 700,\n fontSize: 14,\n borderColor: \"#39393980\",\n textTransform: \"initial\",\n },\n \".optionsAlignment\": {\n textAlign: \"center\",\n \"& .min-icon\": {\n width: 16,\n height: 16,\n },\n },\n \".text-center\": {\n textAlign: \"center\",\n },\n \".text-right\": {\n textAlign: \"right\",\n },\n \".progress-enabled\": {\n paddingTop: 3,\n display: \"inline-block\",\n margin: \"0 10px\",\n position: \"relative\",\n width: 18,\n height: 18,\n },\n \".progress-enabled > .MuiCircularProgress-root\": {\n position: \"absolute\",\n left: 0,\n top: 3,\n },\n },\n ...checkboxIcons,\n ...radioIcons,\n });\n\nconst selectWidth = 45;\n\n// Function to render elements in table\nconst subRenderFunction = (\n rowData: any,\n column: IColumns,\n isSelected: boolean,\n) => {\n const itemElement = isString(rowData)\n ? rowData\n : get(rowData, column.elementKey!, null); // If the element is just a string, we render it as it is\n const renderConst = column.renderFullObject ? rowData : itemElement;\n\n const renderElement = column.renderFunction\n ? column.renderFunction(renderConst)\n : renderConst; // If render function is set, we send the value to the function.\n\n return (\n \n {renderElement}\n \n );\n};\n\n// Function to calculate common column width for elements with no with size\nconst calculateColumnRest = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n columnsSelector: boolean,\n columnsShown: string[],\n) => {\n let colsItems = [...columns];\n\n if (columnsSelector) {\n colsItems = columns.filter((column) =>\n columnsShown.includes(column.elementKey!),\n );\n }\n\n let initialValue = containerWidth;\n\n if (hasSelect) {\n initialValue -= selectWidth;\n }\n\n if (hasActions) {\n initialValue -= actionsWidth;\n }\n\n let freeSpacing = colsItems.reduce((total, currValue) => {\n return currValue.width ? total - currValue.width : total;\n }, initialValue);\n\n return freeSpacing / colsItems.filter((el) => !el.width).length;\n};\n\n// Function that renders Columns in table\nconst generateColumnsMap = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n selectedItems: string[],\n idField: string,\n columnsSelector: boolean,\n columnsShown: string[],\n sortColumn: string,\n sortDirection: \"ASC\" | \"DESC\" | undefined,\n) => {\n const commonRestWidth = calculateColumnRest(\n columns,\n containerWidth,\n actionsWidth,\n hasSelect,\n hasActions,\n columnsSelector,\n columnsShown,\n );\n return columns.map((column: IColumns, index: number) => {\n if (columnsSelector && !columnsShown.includes(column.elementKey!)) {\n return null;\n }\n\n const disableSort = column.enableSort ? !column.enableSort : true;\n\n return (\n // @ts-ignore\n (\n \n {sortColumn === column.elementKey && (\n \n {sortDirection === \"ASC\" ? (\n \n ) : (\n \n )}\n \n )}\n {column.label}\n \n )}\n className={\n column.contentTextAlign ? `text-${column.contentTextAlign}` : \"\"\n }\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField],\n )\n : false;\n return subRenderFunction(rowData, column, isSelected);\n }}\n width={column.width || commonRestWidth}\n disableSort={disableSort}\n defaultSortDirection={\"ASC\"}\n />\n );\n });\n};\n\n// Function to render the action buttons\nconst elementActions = (\n actions: ItemActions[],\n valueToSend: any,\n selected: boolean,\n idField: string,\n) => {\n return actions.map((action: ItemActions, index: number) => {\n if (action.type === \"view\") {\n return null;\n }\n\n const vlSend =\n typeof valueToSend === \"string\" ? valueToSend : valueToSend[idField];\n\n let disabled = false;\n\n if (action.disableButtonFunction) {\n if (action.disableButtonFunction(vlSend)) {\n disabled = true;\n }\n }\n\n if (action.showLoaderFunction) {\n if (action.showLoaderFunction(vlSend)) {\n return (\n
\n \n
\n );\n }\n }\n\n return (\n \n );\n });\n};\n\n// Function to calculate the options column width according elements inside\nconst calculateOptionsSize = (containerWidth: number, totalOptions: number) => {\n const minContainerSize = 80;\n const sizeOptions = totalOptions * 45 + 15;\n\n if (sizeOptions < minContainerSize) {\n return minContainerSize;\n }\n\n if (sizeOptions > containerWidth) {\n return containerWidth;\n }\n\n return sizeOptions;\n};\n\n// Main function to render the Table Wrapper\nconst TableWrapper = ({\n itemActions,\n columns,\n onSelect,\n records,\n isLoading,\n loadingMessage = Loading...,\n entityName,\n selectedItems,\n idField,\n classes,\n radioSelection = false,\n customEmptyMessage = \"\",\n customPaperHeight = \"\",\n noBackground = false,\n columnsSelector = false,\n textSelectable = false,\n columnsShown = [],\n onColumnChange = (column: string, state: boolean) => {},\n infiniteScrollConfig,\n sortConfig,\n autoScrollToBottom = false,\n disabled = false,\n onSelectAll,\n rowStyle,\n parentClassName = \"\",\n tooltip,\n}: TableWrapperProps) => {\n const navigate = useNavigate();\n\n const [columnSelectorOpen, setColumnSelectorOpen] = useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const findView = itemActions\n ? itemActions.find((el) => el.type === \"view\")\n : null;\n\n const clickAction = (rowItem: any) => {\n if (findView) {\n const valueClick = findView.sendOnlyId ? rowItem[idField] : rowItem;\n\n let disabled = false;\n\n if (findView.disableButtonFunction) {\n if (findView.disableButtonFunction(valueClick)) {\n disabled = true;\n }\n }\n\n if (findView.to && !disabled) {\n navigate(`${findView.to}/${valueClick}`);\n return;\n }\n\n if (findView.onClick && !disabled) {\n findView.onClick(valueClick);\n }\n }\n };\n\n const openColumnsSelector = (event: { currentTarget: any }) => {\n setColumnSelectorOpen(!columnSelectorOpen);\n setAnchorEl(event.currentTarget);\n };\n\n const closeColumnSelector = () => {\n setColumnSelectorOpen(false);\n setAnchorEl(null);\n };\n\n const columnsSelection = (columns: IColumns[]) => {\n return (\n \n \n \n \n \n
Shown Columns
\n
\n {columns.map((column: IColumns) => {\n return (\n {\n onColumnChange(column.elementKey!, e.target.checked);\n }}\n id={`chbox-${column.label}`}\n name={`chbox-${column.label}`}\n value={column.label}\n />\n );\n })}\n
\n \n
\n );\n };\n\n return (\n \n \n \n {isLoading && (\n \n \n {loadingMessage}\n \n \n \n \n \n )}\n {columnsSelector && !isLoading && records.length > 0 && (\n
\n {columnsSelection(columns)}\n
\n )}\n {records && !isLoading && records.length > 0 ? (\n // @ts-ignore\n !!records[index]}\n loadMoreRows={\n infiniteScrollConfig\n ? infiniteScrollConfig.loadMoreRecords\n : () => new Promise(() => true)\n }\n rowCount={\n infiniteScrollConfig\n ? infiniteScrollConfig.recordsCount\n : records.length\n }\n >\n {({ onRowsRendered, registerChild }) => (\n // @ts-ignore\n \n {({ width, height }: any) => {\n const optionsWidth = calculateOptionsSize(\n width,\n itemActions\n ? itemActions.filter((el) => el.type !== \"view\").length\n : 0,\n );\n const hasSelect: boolean = !!(onSelect && selectedItems);\n const hasOptions: boolean = !!(\n (itemActions && itemActions.length > 1) ||\n (itemActions &&\n itemActions.length === 1 &&\n itemActions[0].type !== \"view\")\n );\n return (\n // @ts-ignore\n (\n \n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n \n )}\n overscanRowCount={10}\n rowHeight={40}\n width={width}\n rowCount={records.length}\n rowGetter={({ index }) => records[index]}\n onRowClick={({ rowData }) => {\n clickAction(rowData);\n }}\n rowClassName={(r) =>\n `rowLine ${findView ? \"canClick\" : \"\"} ${\n !findView && textSelectable ? \"canSelectText\" : \"\"\n } ${rowStyle ? rowStyle(r) : \"\"}`\n }\n onRowsRendered={onRowsRendered}\n sort={sortConfig ? sortConfig.triggerSort : undefined}\n sortBy={sortConfig ? sortConfig.currentSort : undefined}\n sortDirection={\n sortConfig ? sortConfig.currentDirection : undefined\n }\n scrollToIndex={\n autoScrollToBottom ? records.length - 1 : -1\n }\n rowStyle={(r) => {\n if (rowStyle) {\n const returnElement = rowStyle(r);\n\n if (typeof returnElement === \"string\") {\n return get(\n TableRowPredefStyles,\n returnElement,\n {},\n );\n }\n\n return returnElement;\n }\n\n return {};\n }}\n >\n {hasSelect && (\n // @ts-ignore\n (\n \n {onSelectAll ? (\n
\n \n
\n ) : (\n Select\n )}\n
\n )}\n dataKey={`select-${idField}`}\n width={selectWidth}\n disableSort\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData)\n ? rowData\n : rowData[idField],\n )\n : false;\n\n return (\n {\n e.stopPropagation();\n }}\n checkedIcon={\n \n }\n icon={\n \n }\n />\n );\n }}\n />\n )}\n {generateColumnsMap(\n columns,\n width,\n optionsWidth,\n hasSelect,\n hasOptions,\n selectedItems || [],\n idField,\n columnsSelector,\n columnsShown,\n sortConfig ? sortConfig.currentSort : \"\",\n sortConfig ? sortConfig.currentDirection : undefined,\n )}\n {hasOptions && (\n // @ts-ignore\n {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData)\n ? rowData\n : rowData[idField],\n )\n : false;\n return elementActions(\n itemActions || [],\n rowData,\n isSelected,\n idField,\n );\n }}\n />\n )}\n \n );\n }}\n
\n )}\n \n ) : (\n \n {!isLoading && (\n
\n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n
\n )}\n
\n )}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(TableWrapper);\n"],"names":["unSelected","selected","_ref","_ref$active","active","_jsx","xmlns","width","height","viewBox","children","fill","d","props","_objectSpread","className","withStyles","createStyles","spacing","margin","buttonDisabled","cursor","filter","opacity","type","onClick","valueToSend","idField","to","_ref$sendOnlyId","sendOnlyId","_ref$disabled","disabled","classes","label","valueClick","icon","PreviewIcon","EditIcon","TrashIcon","IAMPoliciesIcon","ShareIcon","CloudIcon","ConsoleIcon","DownloadIcon","DisableIcon","FormatDriveIcon","defineIcon","buttonElement","IconButton","size","concat","e","stopPropagation","preventDefault","sx","Tooltip","title","isString","Link","theme","fieldBasic","tooltipHelper","checkboxIcons","fieldContainer","display","justifyContent","alignItems","marginBottom","flexBasis","flexWrap","noTopMargin","marginTop","onChange","value","id","name","_ref$checked","checked","_ref$noTopMargin","_ref$tooltip","tooltip","_ref$overrideLabelCla","overrideLabelClasses","overrideCheckboxStyles","React","_jsxs","Grid","item","xs","Checkbox","color","inputProps","checkedIcon","unCheckedIcon","disableRipple","disableFocusRipple","focusRipple","centerRipple","disableTouchRipple","style","InputLabel","htmlFor","noMinWidthLabel","tooltipContainer","placement","HelpIcon","generateColumnsMap","columns","containerWidth","actionsWidth","hasSelect","hasActions","selectedItems","columnsSelector","columnsShown","sortColumn","sortDirection","commonRestWidth","colsItems","_toConsumableArray","column","includes","elementKey","initialValue","reduce","total","currValue","el","length","calculateColumnRest","map","index","disableSort","enableSort","Column","dataKey","headerClassName","headerTextAlign","headerRenderer","Fragment","ArrowDropUpIcon","ArrowDropDownIcon","contentTextAlign","cellRenderer","rowData","isSelected","itemElement","get","renderConst","renderFullObject","renderElement","renderFunction","subRenderFunction","defaultSortDirection","toString","paper","overflow","flexDirection","padding","boxShadow","border","borderRadius","minHeight","overflowY","position","noBackground","backgroundColor","defaultPaperHeight","loadingBox","paddingTop","paddingBottom","overlayColumnSelection","right","top","popoverContent","maxHeight","shownColumnsLabel","fontSize","borderBottom","checkAllWrapper","transitionDuration","outline","userSelect","fontWeight","fontStyle","borderColor","textTransform","textAlign","left","radioIcons","_ref2","itemActions","onSelect","records","isLoading","_ref2$loadingMessage","loadingMessage","Typography","component","entityName","_ref2$radioSelection","radioSelection","_ref2$customEmptyMess","customEmptyMessage","_ref2$customPaperHeig","customPaperHeight","_ref2$noBackground","_ref2$columnsSelector","_ref2$textSelectable","textSelectable","_ref2$columnsShown","_ref2$onColumnChange","onColumnChange","state","infiniteScrollConfig","sortConfig","_ref2$autoScrollToBot","autoScrollToBottom","_ref2$disabled","onSelectAll","rowStyle","_ref2$parentClassName","parentClassName","navigate","useNavigate","_useState","useState","_useState2","_slicedToArray","columnSelectorOpen","setColumnSelectorOpen","_React$useState","_React$useState2","anchorEl","setAnchorEl","findView","find","openColumnsSelector","event","currentTarget","closeColumnSelector","TooltipWrapper","Paper","container","LinearProgress","ViewColumnIcon","Popover","open","anchorOrigin","vertical","horizontal","transformOrigin","onClose","CheckboxWrapper","target","columnsSelection","InfiniteLoader","isRowLoaded","_ref3","loadMoreRows","loadMoreRecords","Promise","rowCount","recordsCount","_ref4","onRowsRendered","registerChild","AutoSizer","_ref5","optionsWidth","totalOptions","sizeOptions","calculateOptionsSize","hasOptions","Table","ref","disableHeader","headerHeight","noRowsRenderer","overscanRowCount","rowHeight","rowGetter","_ref6","onRowClick","_ref7","rowItem","disableButtonFunction","clickAction","rowClassName","r","sort","triggerSort","undefined","sortBy","currentSort","currentDirection","scrollToIndex","returnElement","TableRowPredefStyles","_ref8","radioSelectedIcon","radioUnselectedIcon","_ref9","actions","action","vlSend","showLoaderFunction","Loader","TableActionButton","elementActions"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/223.1d2c84fb.chunk.js b/web-app/build/static/js/223.1d2c84fb.chunk.js deleted file mode 100644 index 3690e7ec041..00000000000 --- a/web-app/build/static/js/223.1d2c84fb.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[223],{75223:function(e,n,t){t.r(n);t(72791);var i=t(56028),s=t(64554),l=t(75952),o=t(78290),a=t(88824),r=t(33713),c=t(80184);n.default=function(e){var n=e.isOpen,t=e.onClose;return(0,c.jsx)(i.Z,{modalOpen:n,title:"License",onClose:function(){t()},children:(0,c.jsxs)(s.Z,{sx:{display:"flex",flexFlow:"column","& .link-text":{color:"#2781B0",fontWeight:600}},children:[(0,c.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",marginBottom:"40px",justifyContent:"center","& .min-icon":{fill:"blue",width:"188px",height:"62px"}},children:(0,c.jsx)(l.BKr,{})}),(0,c.jsxs)(s.Z,{sx:{marginBottom:"27px"},children:["By using this software, you acknowledge that MinIO software is licensed under the ",(0,c.jsx)(a.Z,{}),", for which, the full text can be found here:"," ",(0,c.jsx)("a",{href:"https://www.gnu.org/licenses/agpl-3.0.html",rel:"noopener",className:"link-text",children:"https://www.gnu.org/licenses/agpl-3.0.html."})]}),(0,c.jsxs)(s.Z,{sx:{paddingBottom:"23px"},children:["Please review the terms carefully and ensure you are in compliance with the obligations of the license. If you are not able to satisfy the license obligations, we offer a commercial license which is available here:"," ",(0,c.jsx)("a",{href:"https://min.io/signup?ref=op",rel:"noopener",className:"link-text",children:"https://min.io/signup."})]}),(0,c.jsx)(r.Z,{}),(0,c.jsx)(s.Z,{sx:{marginTop:"19px",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,c.jsx)(l.zxk,{id:"confirm",type:"button",variant:"callAction",onClick:function(){(0,o.NI)(),t()},label:"Acknowledge"})})]})})}}}]); -//# sourceMappingURL=223.1d2c84fb.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/223.1d2c84fb.chunk.js.map b/web-app/build/static/js/223.1d2c84fb.chunk.js.map deleted file mode 100644 index f155ff9b7a7..00000000000 --- a/web-app/build/static/js/223.1d2c84fb.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/223.1d2c84fb.chunk.js","mappings":"yMA8HA,UAtG4B,SAAHA,GAMlB,IALLC,EAAMD,EAANC,OACAC,EAAOF,EAAPE,QAUA,OACEC,EAAAA,EAAAA,KAACC,EAAAA,EAAY,CACXC,UAAWJ,EACXK,MAAM,UACNJ,QAAS,WACPA,GACF,EAAEK,UAEFC,EAAAA,EAAAA,MAACC,EAAAA,EAAG,CACFC,GAAI,CACFC,QAAS,OACTC,SAAU,SACV,eAAgB,CACdC,MAAO,UACPC,WAAY,MAEdP,SAAA,EAEFJ,EAAAA,EAAAA,KAACM,EAAAA,EAAG,CACFC,GAAI,CACFC,QAAS,OACTI,WAAY,SACZC,aAAc,OACdC,eAAgB,SAChB,cAAe,CACbC,KAAM,OACNC,MAAO,QACPC,OAAQ,SAEVb,UAEFJ,EAAAA,EAAAA,KAACkB,EAAAA,IAAc,OAEjBb,EAAAA,EAAAA,MAACC,EAAAA,EAAG,CACFC,GAAI,CACFM,aAAc,QACdT,SAAA,CACH,sFAEoBJ,EAAAA,EAAAA,KAACmB,EAAAA,EAAW,IAAI,gDACvB,KACZnB,EAAAA,EAAAA,KAAA,KACEoB,KAAI,6CACJC,IAAI,WACJC,UAAW,YAAYlB,SACxB,oDAIHC,EAAAA,EAAAA,MAACC,EAAAA,EAAG,CACFC,GAAI,CACFgB,cAAe,QACfnB,SAAA,CACH,yNAIiB,KAChBJ,EAAAA,EAAAA,KAAA,KACEoB,KAAI,+BACJC,IAAI,WACJC,UAAW,YAAYlB,SACxB,+BAKHJ,EAAAA,EAAAA,KAACwB,EAAAA,EAAU,KAEXxB,EAAAA,EAAAA,KAACM,EAAAA,EAAG,CACFC,GAAI,CACFkB,UAAW,OACXjB,QAAS,OACTI,WAAY,SACZE,eAAgB,UAChBV,UAEFJ,EAAAA,EAAAA,KAAC0B,EAAAA,IAAM,CACLC,GAAI,UACJC,KAAK,SACLC,QAAQ,aACRC,QAtFgB,YACxBC,EAAAA,EAAAA,MACAhC,GACF,EAoFUiC,MAAO,sBAMnB,C","sources":["screens/Console/License/LicenseConsentModal.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport { Box } from \"@mui/material\";\nimport { AGPLV3DarkLogo, Button } from \"mds\";\nimport { setLicenseConsent } from \"./utils\";\nimport LicenseLink from \"./LicenseLink\";\nimport LicenseFAQ from \"./LicenseFAQ\";\n\nconst LicenseConsentModal = ({\n isOpen,\n onClose,\n}: {\n onClose: () => void;\n isOpen: boolean;\n}) => {\n const recordAgplConsent = () => {\n setLicenseConsent(); //to Local storage.\n onClose();\n };\n\n return (\n {\n onClose();\n }}\n >\n \n \n \n \n \n By using this software, you acknowledge that MinIO software is\n licensed under the , for which, the full text can be\n found here:{\" \"}\n \n https://www.gnu.org/licenses/agpl-3.0.html.\n \n \n \n Please review the terms carefully and ensure you are in compliance\n with the obligations of the license. If you are not able to satisfy\n the license obligations, we offer a commercial license which is\n available here:{\" \"}\n \n https://min.io/signup.\n \n \n\n \n\n \n \n \n \n \n );\n};\n\nexport default LicenseConsentModal;\n"],"names":["_ref","isOpen","onClose","_jsx","ModalWrapper","modalOpen","title","children","_jsxs","Box","sx","display","flexFlow","color","fontWeight","alignItems","marginBottom","justifyContent","fill","width","height","AGPLV3DarkLogo","LicenseLink","href","rel","className","paddingBottom","LicenseFAQ","marginTop","Button","id","type","variant","onClick","setLicenseConsent","label"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/223.5c1551c2.chunk.js b/web-app/build/static/js/223.5c1551c2.chunk.js new file mode 100644 index 00000000000..75cee8b162e --- /dev/null +++ b/web-app/build/static/js/223.5c1551c2.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[223],{5223:(e,n,t)=>{t.r(n),t.d(n,{default:()=>c});t(2791);var s=t(6028),i=t(9945),l=t(8290),o=t(8824),a=t(3713),r=t(184);const c=e=>{let{isOpen:n,onClose:t}=e;return(0,r.jsx)(s.Z,{modalOpen:n,title:"License",onClose:()=>{t()},children:(0,r.jsxs)(i.xuv,{sx:{display:"flex",flexFlow:"column","& .link-text":{color:"#2781B0",fontWeight:600}},children:[(0,r.jsx)(i.xuv,{sx:{display:"flex",alignItems:"center",marginBottom:"40px",justifyContent:"center","& .min-icon":{fill:"blue",width:"188px",height:"62px"}},children:(0,r.jsx)(i.BKr,{})}),(0,r.jsxs)(i.xuv,{sx:{marginBottom:"27px"},children:["By using this software, you acknowledge that MinIO software is licensed under the ",(0,r.jsx)(o.Z,{}),", for which, the full text can be found here:"," ",(0,r.jsx)("a",{href:"https://www.gnu.org/licenses/agpl-3.0.html",rel:"noopener",className:"link-text",children:"https://www.gnu.org/licenses/agpl-3.0.html."})]}),(0,r.jsxs)(i.xuv,{sx:{paddingBottom:"23px"},children:["Please review the terms carefully and ensure you are in compliance with the obligations of the license. If you are not able to satisfy the license obligations, we offer a commercial license which is available here:"," ",(0,r.jsx)("a",{href:"https://min.io/signup?ref=op",rel:"noopener",className:"link-text",children:"https://min.io/signup."})]}),(0,r.jsx)(a.Z,{}),(0,r.jsx)(i.xuv,{sx:{marginTop:"19px",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,r.jsx)(i.zxk,{id:"confirm",type:"button",variant:"callAction",onClick:()=>{(0,l.NI)(),t()},label:"Acknowledge"})})]})})}}}]); +//# sourceMappingURL=223.5c1551c2.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/223.5c1551c2.chunk.js.map b/web-app/build/static/js/223.5c1551c2.chunk.js.map new file mode 100644 index 00000000000..8e7afa8b9cf --- /dev/null +++ b/web-app/build/static/js/223.5c1551c2.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/223.5c1551c2.chunk.js","mappings":"sMAuBA,MAsGA,EAtG4BA,IAMrB,IANsB,OAC3BC,EAAM,QACNC,GAIDF,EAMC,OACEG,EAAAA,EAAAA,KAACC,EAAAA,EAAY,CACXC,UAAWJ,EACXK,MAAM,UACNJ,QAASA,KACPA,GAAS,EACTK,UAEFC,EAAAA,EAAAA,MAACC,EAAAA,IAAG,CACFC,GAAI,CACFC,QAAS,OACTC,SAAU,SACV,eAAgB,CACdC,MAAO,UACPC,WAAY,MAEdP,SAAA,EAEFJ,EAAAA,EAAAA,KAACM,EAAAA,IAAG,CACFC,GAAI,CACFC,QAAS,OACTI,WAAY,SACZC,aAAc,OACdC,eAAgB,SAChB,cAAe,CACbC,KAAM,OACNC,MAAO,QACPC,OAAQ,SAEVb,UAEFJ,EAAAA,EAAAA,KAACkB,EAAAA,IAAc,OAEjBb,EAAAA,EAAAA,MAACC,EAAAA,IAAG,CACFC,GAAI,CACFM,aAAc,QACdT,SAAA,CACH,sFAEoBJ,EAAAA,EAAAA,KAACmB,EAAAA,EAAW,IAAI,gDACvB,KACZnB,EAAAA,EAAAA,KAAA,KACEoB,KAAI,6CACJC,IAAI,WACJC,UAAW,YAAYlB,SACxB,oDAIHC,EAAAA,EAAAA,MAACC,EAAAA,IAAG,CACFC,GAAI,CACFgB,cAAe,QACfnB,SAAA,CACH,yNAIiB,KAChBJ,EAAAA,EAAAA,KAAA,KACEoB,KAAI,+BACJC,IAAI,WACJC,UAAW,YAAYlB,SACxB,+BAKHJ,EAAAA,EAAAA,KAACwB,EAAAA,EAAU,KAEXxB,EAAAA,EAAAA,KAACM,EAAAA,IAAG,CACFC,GAAI,CACFkB,UAAW,OACXjB,QAAS,OACTI,WAAY,SACZE,eAAgB,UAChBV,UAEFJ,EAAAA,EAAAA,KAAC0B,EAAAA,IAAM,CACLC,GAAI,UACJC,KAAK,SACLC,QAAQ,aACRC,QAtFgBC,MACxBC,EAAAA,EAAAA,MACAjC,GAAS,EAqFDkC,MAAO,sBAIA,C","sources":["screens/Console/License/LicenseConsentModal.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport { AGPLV3DarkLogo, Button, Box } from \"mds\";\nimport { setLicenseConsent } from \"./utils\";\nimport LicenseLink from \"./LicenseLink\";\nimport LicenseFAQ from \"./LicenseFAQ\";\n\nconst LicenseConsentModal = ({\n isOpen,\n onClose,\n}: {\n onClose: () => void;\n isOpen: boolean;\n}) => {\n const recordAgplConsent = () => {\n setLicenseConsent(); //to Local storage.\n onClose();\n };\n\n return (\n {\n onClose();\n }}\n >\n \n \n \n \n \n By using this software, you acknowledge that MinIO software is\n licensed under the , for which, the full text can be\n found here:{\" \"}\n \n https://www.gnu.org/licenses/agpl-3.0.html.\n \n \n \n Please review the terms carefully and ensure you are in compliance\n with the obligations of the license. If you are not able to satisfy\n the license obligations, we offer a commercial license which is\n available here:{\" \"}\n \n https://min.io/signup.\n \n \n\n \n\n \n \n \n \n \n );\n};\n\nexport default LicenseConsentModal;\n"],"names":["_ref","isOpen","onClose","_jsx","ModalWrapper","modalOpen","title","children","_jsxs","Box","sx","display","flexFlow","color","fontWeight","alignItems","marginBottom","justifyContent","fill","width","height","AGPLV3DarkLogo","LicenseLink","href","rel","className","paddingBottom","LicenseFAQ","marginTop","Button","id","type","variant","onClick","recordAgplConsent","setLicenseConsent","label"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/260.0a6c9eba.chunk.js b/web-app/build/static/js/260.0a6c9eba.chunk.js deleted file mode 100644 index 6d59c5417c4..00000000000 --- a/web-app/build/static/js/260.0a6c9eba.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[260],{1260:function(t,e,n){n.r(e);var o=n(72791),a=n(57689),c=n(41320),u=n(45248),l=n(87995),r=n(46078),s=n(81207),f=n(7241),i=n(80184);e.default=function(){var t=(0,c.TL)(),e=(0,a.s0)();return(0,o.useEffect)((function(){!function(){var n=function(){(0,u.Ov)(),t((0,l.wr)(!1)),localStorage.setItem("userLoggedIn",""),localStorage.setItem("redirect-path",""),t((0,r.lX)()),e("/login")},o=localStorage.getItem("auth-state");s.Z.invoke("POST","/api/v1/logout",{state:o}).then((function(){n()})).catch((function(t){console.log(t),n()}))}()}),[t,e]),(0,i.jsx)(f.Z,{})}}}]); -//# sourceMappingURL=260.0a6c9eba.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/260.0a6c9eba.chunk.js.map b/web-app/build/static/js/260.0a6c9eba.chunk.js.map deleted file mode 100644 index 402ead68f24..00000000000 --- a/web-app/build/static/js/260.0a6c9eba.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/260.0a6c9eba.chunk.js","mappings":"oNAuDA,UA7BmB,WACjB,IAAMA,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAwBjB,OAvBAC,EAAAA,EAAAA,YAAU,YACO,WACb,IAAMC,EAAgB,YACpBC,EAAAA,EAAAA,MACAN,GAASO,EAAAA,EAAAA,KAAW,IACpBC,aAAaC,QAAQ,eAAgB,IACrCD,aAAaC,QAAQ,gBAAiB,IACtCT,GAASU,EAAAA,EAAAA,OACTR,EAAS,SACX,EACMS,EAAQH,aAAaI,QAAQ,cACnCC,EAAAA,EACGC,OAAO,OAAO,iBAAmB,CAAEH,MAAAA,IACnCI,MAAK,WACJV,GACF,IACCW,OAAM,SAACC,GACNC,QAAQC,IAAIF,GACZZ,GACF,GACJ,CACAe,EACF,GAAG,CAACpB,EAAUE,KACPmB,EAAAA,EAAAA,KAACC,EAAAA,EAAgB,GAC1B,C","sources":["screens/LogoutPage/LogoutPage.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../store\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport { clearSession } from \"../../common/utils\";\nimport { userLogged } from \"../../systemSlice\";\nimport { resetSession } from \"../Console/consoleSlice\";\nimport api from \"../../common/api\";\nimport LoadingComponent from \"../../common/LoadingComponent\";\n\nconst LogoutPage = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useEffect(() => {\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n dispatch(userLogged(false));\n localStorage.setItem(\"userLoggedIn\", \"\");\n localStorage.setItem(\"redirect-path\", \"\");\n dispatch(resetSession());\n navigate(`/login`);\n };\n const state = localStorage.getItem(\"auth-state\");\n api\n .invoke(\"POST\", `/api/v1/logout`, { state })\n .then(() => {\n deleteSession();\n })\n .catch((err: ErrorResponseHandler) => {\n console.log(err);\n deleteSession();\n });\n };\n logout();\n }, [dispatch, navigate]);\n return ;\n};\n\nexport default LogoutPage;\n"],"names":["dispatch","useAppDispatch","navigate","useNavigate","useEffect","deleteSession","clearSession","userLogged","localStorage","setItem","resetSession","state","getItem","api","invoke","then","catch","err","console","log","logout","_jsx","LoadingComponent"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/260.0cefb6d3.chunk.js b/web-app/build/static/js/260.0cefb6d3.chunk.js new file mode 100644 index 00000000000..4a1fa864a54 --- /dev/null +++ b/web-app/build/static/js/260.0cefb6d3.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[260],{1260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var o=a(2791),s=a(7689),c=a(1320),l=a(5248),r=a(7995),n=a(6078),u=a(1207),g=a(7241),p=a(184);const h=()=>{const e=(0,c.TL)(),t=(0,s.s0)();return(0,o.useEffect)((()=>{(()=>{const a=()=>{(0,l.Ov)(),e((0,r.wr)(!1)),localStorage.setItem("userLoggedIn",""),localStorage.setItem("redirect-path",""),e((0,n.lX)()),t("/login")},o=localStorage.getItem("auth-state");u.Z.invoke("POST","/api/v1/logout",{state:o}).then((()=>{a()})).catch((e=>{console.log(e),a()}))})()}),[e,t]),(0,p.jsx)(g.Z,{})}}}]); +//# sourceMappingURL=260.0cefb6d3.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/260.0cefb6d3.chunk.js.map b/web-app/build/static/js/260.0cefb6d3.chunk.js.map new file mode 100644 index 00000000000..32c5b402257 --- /dev/null +++ b/web-app/build/static/js/260.0cefb6d3.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/260.0cefb6d3.chunk.js","mappings":"4NA0BA,MA6BA,EA7BmBA,KACjB,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAwBjB,OAvBAC,EAAAA,EAAAA,YAAU,KACOC,MACb,MAAMC,EAAgBA,MACpBC,EAAAA,EAAAA,MACAP,GAASQ,EAAAA,EAAAA,KAAW,IACpBC,aAAaC,QAAQ,eAAgB,IACrCD,aAAaC,QAAQ,gBAAiB,IACtCV,GAASW,EAAAA,EAAAA,OACTT,EAAS,SAAS,EAEdU,EAAQH,aAAaI,QAAQ,cACnCC,EAAAA,EACGC,OAAO,OAAO,iBAAmB,CAAEH,UACnCI,MAAK,KACJV,GAAe,IAEhBW,OAAOC,IACNC,QAAQC,IAAIF,GACZZ,GAAe,GACf,EAEND,EAAQ,GACP,CAACL,EAAUE,KACPmB,EAAAA,EAAAA,KAACC,EAAAA,EAAgB,GAAG,C","sources":["screens/LogoutPage/LogoutPage.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../store\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport { clearSession } from \"../../common/utils\";\nimport { userLogged } from \"../../systemSlice\";\nimport { resetSession } from \"../Console/consoleSlice\";\nimport api from \"../../common/api\";\nimport LoadingComponent from \"../../common/LoadingComponent\";\n\nconst LogoutPage = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useEffect(() => {\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n dispatch(userLogged(false));\n localStorage.setItem(\"userLoggedIn\", \"\");\n localStorage.setItem(\"redirect-path\", \"\");\n dispatch(resetSession());\n navigate(`/login`);\n };\n const state = localStorage.getItem(\"auth-state\");\n api\n .invoke(\"POST\", `/api/v1/logout`, { state })\n .then(() => {\n deleteSession();\n })\n .catch((err: ErrorResponseHandler) => {\n console.log(err);\n deleteSession();\n });\n };\n logout();\n }, [dispatch, navigate]);\n return ;\n};\n\nexport default LogoutPage;\n"],"names":["LogoutPage","dispatch","useAppDispatch","navigate","useNavigate","useEffect","logout","deleteSession","clearSession","userLogged","localStorage","setItem","resetSession","state","getItem","api","invoke","then","catch","err","console","log","_jsx","LoadingComponent"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/292.5b893eb9.chunk.js b/web-app/build/static/js/292.5b893eb9.chunk.js deleted file mode 100644 index d33139169a1..00000000000 --- a/web-app/build/static/js/292.5b893eb9.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[292],{37798:function(e,n,t){t.r(n),t.d(n,{default:function(){return Z}});var i=t(1413),a=t(72791),r=t(26181),s=t.n(r),o=t(75952),l=t(11135),c=t(25787),d=t(56028),u=t(61889),m=t(28029),f=t(63466),p=t(78029),x=t.n(p),h=t(23814),v=t(27454),g=t(80184),y=(0,c.Z)((function(e){return(0,l.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},h.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var n=e.label,t=void 0===n?"":n,i=e.value,a=void 0===i?"":i,r=e.classes,s=void 0===r?{}:r;return(0,g.jsxs)("div",{className:s.container,children:[(0,g.jsxs)("div",{className:s.inputLabel,children:[t,":"]}),(0,g.jsx)("div",{className:s.inputWithCopy,children:(0,g.jsx)(m.Z,{value:a,readOnly:!0,endAdornment:(0,g.jsx)(f.Z,{position:"end",children:(0,g.jsx)(v.Z,{tooltip:"Copy",children:(0,g.jsx)(x(),{text:a,children:(0,g.jsx)(o.zxk,{id:"copy-clipboard","aria-label":"copy",onClick:function(){},onMouseDown:function(){},style:{width:"28px",height:"28px",padding:"0px"},icon:(0,g.jsx)(o.TIy,{})})})})})})})]})})),j=function(e,n){var t=document.createElement("a");t.setAttribute("href","data:text/plain;charset=utf-8,"+n),t.setAttribute("download",e),t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t)},Z=(0,c.Z)((function(e){return(0,l.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{display:"flex",justifyContent:"flex-end",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"}})}))((function(e){var n=e.classes,t=e.newServiceAccount,r=e.open,l=e.closeModal,c=e.entity;if(!t)return null;var m=s()(t,"console",null),f=s()(t,"idp",!1);return(0,g.jsx)(d.Z,{modalOpen:r,onClose:function(){l()},title:(0,g.jsx)("div",{className:n.promptTitle,children:(0,g.jsxs)("div",{children:["New ",c," Created"]})}),titleIcon:(0,g.jsx)(o.tVY,{}),children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:n.formScrollable,children:["A new ",c," has been created with the following details:",!f&&m&&(0,g.jsx)(a.Fragment,{children:(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:n.credentialsPanel,children:[(0,g.jsx)("div",{className:n.credentialTitle,children:"Console Credentials"}),Array.isArray(m)&&m.map((function(e,n){return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(y,{label:"Access Key",value:e.accessKey}),(0,g.jsx)(y,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(m)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(y,{label:"Access Key",value:m.accessKey}),(0,g.jsx)(y,{label:"Secret Key",value:m.secretKey})]})]})}),(null===m||void 0===m)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(y,{label:"Access Key",value:t.accessKey||""}),(0,g.jsx)(y,{label:"Secret Key",value:t.secretKey||""})]}),f?(0,g.jsx)("div",{className:n.warningBlock,children:"Please Login via the configured external identity provider."}):(0,g.jsxs)("div",{className:n.warningBlock,children:[(0,g.jsx)(o.e6P,{}),(0,g.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:n.buttonContainer,children:!f&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(v.Z,{tooltip:"Download credentials in a JSON file formatted for import using mc alias import. This will only include the default login credentials.",children:(0,g.jsx)(o.zxk,{id:"download-button",label:"Download for import",className:n.buttonSpacer,onClick:function(){var e={};m?e=Array.isArray(m)?m.map((function(e){return{url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"}}))[0]:{url:m.url,accessKey:m.accessKey,secretKey:m.secretKey,api:"s3v4",path:"auto"}:e={url:t.url,accessKey:t.accessKey,secretKey:t.secretKey,api:"s3v4",path:"auto"};j("credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(o._8t,{}),variant:"callAction"})}),Array.isArray(m)&&m.length>1&&(0,g.jsx)(v.Z,{tooltip:"Download all access credentials to a JSON file. NOTE: This file is not formatted for import using mc alias import. If you plan to import this alias from the file, please use the Download for Import button. ",children:(0,g.jsx)(o.zxk,{id:"download-all-button",label:"Download all access credentials",className:n.buttonSpacer,onClick:function(){var e={};m&&Array.isArray(m)&&m.length>1&&(e=m.map((function(e){return{accessKey:e.accessKey,secretKey:e.secretKey}})));j("all_credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(o._8t,{}),variant:"callAction",color:"primary"})})]})})]})})}))},92217:function(e,n,t){var i=t(1413),a=t(72791),r=t(61889),s=t(30829),o=t(96040),l=t(64554),c=t(11135),d=t(25787),u=t(75952),m=t(23814),f=t(78029),p=t.n(f),x=t(9534),h=t(27454),v=t(80184);n.Z=(0,d.Z)((function(e){return(0,c.Z)((0,i.Z)({},m.YI))}))((function(e){var n=e.value,t=e.label,i=void 0===t?"":t,c=e.tooltip,d=void 0===c?"":c,m=e.mode,f=void 0===m?"json":m,g=e.classes,y=e.onBeforeChange,j=(e.readOnly,e.editorHeight),Z=void 0===j?"250px":j;return(0,v.jsxs)(a.Fragment,{children:[(0,v.jsx)(r.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,v.jsxs)(s.Z,{className:g.inputLabel,children:[(0,v.jsx)("span",{children:i}),""!==d&&(0,v.jsx)("div",{className:g.tooltipContainer,children:(0,v.jsx)(o.Z,{title:d,placement:"top-start",children:(0,v.jsx)("div",{className:g.tooltip,children:(0,v.jsx)(u.byK,{})})})})]})}),(0,v.jsx)(r.ZP,{item:!0,xs:12,style:{maxHeight:Z,overflow:"auto",border:"1px solid #eaeaea"},children:(0,v.jsx)(x.Z,{value:n,language:f,onChange:function(e){y(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:Z||"initial",color:"#000000"}})}),(0,v.jsx)(r.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,v.jsx)(l.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,v.jsx)(h.Z,{tooltip:"Copy to Clipboard",children:(0,v.jsx)(p(),{text:n,children:(0,v.jsx)(u.zxk,{type:"button",id:"copy-code-mirror",icon:(0,v.jsx)(u.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},54639:function(e,n,t){t.d(n,{Z:function(){return j}});var i=t(29439),a=t(1413),r=t(72791),s=t(26181),o=t.n(s),l=t(61889),c=t(30829),d=t(96040),u=t(13400),m=t(99663),f=t(86711),p=t(11135),x=t(25787),h=t(23814),v=t(75952),g=t(22512),y=t(80184),j=(0,x.Z)((function(e){return(0,p.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},h.YI),h.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},h.bV),{},{inputLabel:(0,a.Z)((0,a.Z)({},h.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,a.Z)((0,a.Z)({},h.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var n=e.label,t=e.classes,a=e.onChange,s=e.id,p=e.name,x=e.disabled,h=void 0!==x&&x,j=e.tooltip,Z=void 0===j?"":j,b=e.required,C=e.error,N=void 0===C?"":C,S=e.accept,_=void 0===S?"":S,T=e.value,A=void 0===T?"":T,k=(0,r.useState)(!1),w=(0,i.Z)(k,2),P=w[0],I=w[1];return(0,y.jsx)(r.Fragment,{children:(0,y.jsxs)(l.ZP,{item:!0,xs:12,className:"".concat(t.fileInputField," ").concat(t.fieldBottom," ").concat(t.fieldContainer," ").concat(""!==N?t.errorInField:""),children:[""!==n&&(0,y.jsxs)(c.Z,{htmlFor:s,className:"".concat(""!==N?t.fieldLabelError:""," ").concat(t.inputLabel),children:[(0,y.jsxs)("span",{children:[n,b?"*":""]}),""!==Z&&(0,y.jsx)("div",{className:t.tooltipContainer,children:(0,y.jsx)(d.Z,{title:Z,placement:"top-start",children:(0,y.jsx)("div",{className:t.tooltip,children:(0,y.jsx)(v.byK,{})})})})]}),P||""===A?(0,y.jsxs)("div",{className:t.textBoxContainer,children:[(0,y.jsx)("input",{type:"file",name:p,onChange:function(e){var n=o()(e,"target.files[0].name","");!function(e,n){var t=e.target.files[0],i=new FileReader;i.readAsDataURL(t),i.onload=function(){var e=i.result;if(e){var t=e.toString().split("base64,");2===t.length&&n(t[1])}}}(e,(function(e){a(e,n)}))},accept:_,required:b,disabled:h,className:t.fileInputField}),""!==A&&(0,y.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){I(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(f.Z,{})}),""!==N&&(0,y.jsx)(g.Z,{errorMessage:N})]}):(0,y.jsxs)("div",{className:t.fileReselect,children:[(0,y.jsx)("div",{className:t.valueString,children:A}),(0,y.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){I(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(m.Z,{})})]})]})})}))},13871:function(e,n,t){var i,a=t(30168),r=(0,t(26088).Z)("hr")(i||(i=(0,a.Z)(["\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n"])));n.Z=r},56028:function(e,n,t){var i=t(29439),a=t(1413),r=t(72791),s=t(78687),o=t(13400),l=t(48888),c=t(5289),d=t(65661),u=t(39157),m=t(11135),f=t(25787),p=t(23814),x=t(41320),h=t(29823),v=t(86352),g=t(87995),y=t(80184);n.Z=(0,f.Z)((function(e){return(0,m.Z)((0,a.Z)((0,a.Z)({},p.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},p.sN))}))((function(e){var n=e.onClose,t=e.modalOpen,m=e.title,f=e.children,p=e.classes,j=e.wideLimit,Z=void 0===j||j,b=e.noContentPadding,C=e.titleIcon,N=void 0===C?null:C,S=(0,x.TL)(),_=(0,r.useState)(!1),T=(0,i.Z)(_,2),A=T[0],k=T[1],w=(0,s.v9)((function(e){return e.system.modalSnackBar}));(0,r.useEffect)((function(){S((0,g.MK)(""))}),[S]),(0,r.useEffect)((function(){if(w){if(""===w.message)return void k(!1);"error"!==w.type&&k(!0)}}),[w]);var P=Z?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},I="";return w&&(I=w.detailedErrorMsg,(""===w.detailedErrorMsg||w.detailedErrorMsg.length<5)&&(I=w.message)),(0,y.jsxs)(c.Z,(0,a.Z)((0,a.Z)({open:t,classes:p},P),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&n()},className:p.root,children:[(0,y.jsxs)(d.Z,{className:p.title,children:[(0,y.jsxs)("div",{className:p.titleText,children:[N," ",m]}),(0,y.jsx)("div",{className:p.closeContainer,children:(0,y.jsx)(o.Z,{"aria-label":"close",id:"close",className:p.closeButton,onClick:n,disableRipple:!0,size:"small",children:(0,y.jsx)(h.Z,{})})})]}),(0,y.jsx)(v.Z,{isModal:!0}),(0,y.jsx)(l.Z,{open:A,className:p.snackBarModal,onClose:function(){k(!1),S((0,g.MK)(""))},message:I,ContentProps:{className:"".concat(p.snackBar," ").concat(w&&"error"===w.type?p.errorSnackBar:"")},autoHideDuration:w&&"error"===w.type?1e4:5e3}),(0,y.jsx)(u.Z,{className:b?"":p.content,children:f})]}))}))},27454:function(e,n,t){var i=t(1413),a=t(72791),r=t(96040),s=t(80184);n.Z=function(e){var n=e.tooltip,t=e.children,o=e.errorProps,l=void 0===o?null:o,c=e.placement;return(0,s.jsx)(r.Z,{title:n,placement:c,children:(0,s.jsx)("span",{children:l?(0,a.cloneElement)(t,(0,i.Z)({},l)):t})})}},80505:function(e,n,t){t.r(n),t.d(n,{default:function(){return Ue}});var i=t(29439),a=t(1413),r=t(72791),s=t(26181),o=t.n(s),l=t(78687),c=t(61889),d=t(57482),u=t(11135),m=t(23814),f=t(28371),p=t(41320),x=t(93433),h=t(25787),v=t(35527),g=t(13400),y=t(94721),j=t(84741),Z=t(40968),b=t(37516),C=t(21435),N=t(42419),S=t(75952),_=t(76773),T=t(90673),A=t(80007),k=t(80184),w=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)({configSectionItem:{marginRight:15,marginBottom:15,"& .multiContainer":{border:"1px solid red"}},tenantCustomizationFields:{marginLeft:30,width:"88%",margin:"auto"},containerItem:{marginRight:15},fieldGroup:(0,a.Z)((0,a.Z)({},m.QV.fieldGroup),{},{paddingTop:15,marginBottom:25}),responsiveSectionItem:{"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}},wrapperContainer:{display:"flex",marginBottom:15},envVarRow:{display:"flex",alignItems:"center",justifyContent:"flex-start","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},fileItem:{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}},rowActions:{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}}},m.oO),m.AK),m.DF))}))((function(e){var n=e.classes,t=(0,p.TL)(),s=(0,l.v9)((function(e){return e.createTenant.fields.configure.exposeMinIO})),o=(0,l.v9)((function(e){return e.createTenant.fields.configure.exposeConsole})),d=(0,l.v9)((function(e){return e.createTenant.fields.configure.exposeSFTP})),u=(0,l.v9)((function(e){return e.createTenant.fields.configure.setDomains})),m=(0,l.v9)((function(e){return e.createTenant.fields.configure.consoleDomain})),f=(0,l.v9)((function(e){return e.createTenant.fields.configure.minioDomains})),h=(0,l.v9)((function(e){return e.createTenant.fields.configure.tenantCustom})),w=(0,l.v9)((function(e){return e.createTenant.fields.configure.envVars})),P=(0,l.v9)((function(e){return e.createTenant.fields.configure.tenantSecurityContext})),I=(0,l.v9)((function(e){return e.createTenant.fields.configure.customRuntime})),R=(0,l.v9)((function(e){return e.createTenant.fields.configure.runtimeClassName})),D=(0,r.useState)({}),F=(0,i.Z)(D,2),K=F[0],E=F[1],L=(0,r.useCallback)((function(e,n){t((0,_.HM)({pageName:"configure",field:e,value:n}))}),[t]);(0,r.useEffect)((function(){var e=[];if(h&&(e=[{fieldKey:"tenant_securityContext_runAsUser",required:!0,value:P.runAsUser,customValidation:""===P.runAsUser||parseInt(P.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"tenant_securityContext_runAsGroup",required:!0,value:P.runAsGroup,customValidation:""===P.runAsGroup||parseInt(P.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"tenant_securityContext_fsGroup",required:!0,value:P.fsGroup,customValidation:""===P.fsGroup||parseInt(P.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]),u){var n=f.map((function(e,n){return{fieldKey:"minio-domain-".concat(n.toString()),required:!1,value:e,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/,customPatternMessage:"MinIO domain is not in the form of http|https://subdomain.domain"}}));e=[].concat((0,x.Z)(e),(0,x.Z)(n),[{fieldKey:"console_domain",required:!1,value:m,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/,customPatternMessage:"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2"}])}var i=(0,Z.R)(e);t((0,_.NO)({pageName:"configure",valid:0===Object.keys(i).length})),E(i)}),[t,h,P,u,m,f]);var z=function(e){E((0,j.h)(K,e))};return(0,k.jsxs)(v.Z,{className:n.paperWrapper,children:[(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)(A.Z,{children:"Configure"}),(0,k.jsx)("span",{className:n.descriptionText,children:"Basic configurations for tenant management"})]}),(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)("h4",{className:n.h3Section,children:"Services"}),(0,k.jsx)("span",{className:n.descriptionText,children:"Whether the tenant's services should request an external IP via LoadBalancer service type."})]}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:s,onChange:function(e){var n=e.target.checked;L("exposeMinIO",n)},label:"Expose MinIO Service"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"expose_console",id:"expose_console",name:"expose_console",checked:o,onChange:function(e){var n=e.target.checked;L("exposeConsole",n)},label:"Expose Console Service"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"expose_sftp",id:"expose_sftp",name:"expose_sftp",checked:d,onChange:function(e){var n=e.target.checked;L("exposeSFTP",n)},label:"Expose SFTP Service"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"custom_domains",id:"custom_domains",name:"custom_domains",checked:u,onChange:function(e){var n=e.target.checked;L("setDomains",n)},label:"Set Custom Domains"})}),u&&(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.tenantCustomizationFields,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"Custom Domains for MinIO"}),(0,k.jsxs)(c.ZP,{item:!0,xs:12,className:"".concat(n.configSectionItem),children:[(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)(C.Z,{id:"console_domain",name:"console_domain",onChange:function(e){L("consoleDomain",e.target.value),z("tenant_securityContext_runAsUser")},label:"Console Domain",value:m,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",error:K.console_domain||""})}),(0,k.jsxs)("div",{children:[(0,k.jsx)("h4",{children:"MinIO Domains"}),(0,k.jsx)("div",{className:"".concat(n.responsiveSectionItem),children:f.map((function(e,i){return(0,k.jsxs)("div",{className:"".concat(n.containerItem," ").concat(n.wrapperContainer),children:[(0,k.jsx)(C.Z,{id:"minio-domain-".concat(i.toString()),name:"minio-domain-".concat(i.toString()),onChange:function(e){!function(e,n){var t=(0,x.Z)(f);t[n]=e,L("minioDomains",t)}(e.target.value,i)},label:"MinIO Domain ".concat(i+1),value:e,placeholder:"Eg. http://subdomain.domain",error:K["minio-domain-".concat(i.toString())]||""}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){return t((0,_.x_)())},disabled:i!==f.length-1,children:(0,k.jsx)(N.Z,{})})}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){return t((0,_.JL)(i))},disabled:f.length<=1,children:(0,k.jsx)(S.HFL,{})})})]},"minio-domain-key-".concat(i.toString()))}))})]})]})]})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"tenantConfig",id:"tenant_configuration",name:"tenant_configuration",checked:h,onChange:function(e){var n=e.target.checked;L("tenantCustom",n)},label:"Security Context"})}),h&&(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.tenantCustomizationFields,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"SecurityContext for MinIO"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:"".concat(n.configSectionItem),children:(0,k.jsxs)("div",{className:"".concat(n.multiContainer," ").concat(n.responsiveSectionItem),children:[(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)(C.Z,{type:"number",id:"tenant_securityContext_runAsUser",name:"tenant_securityContext_runAsUser",onChange:function(e){L("tenantSecurityContext",(0,a.Z)((0,a.Z)({},P),{},{runAsUser:e.target.value})),z("tenant_securityContext_runAsUser")},label:"Run As User",value:P.runAsUser,required:!0,error:K.tenant_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)(C.Z,{type:"number",id:"tenant_securityContext_runAsGroup",name:"tenant_securityContext_runAsGroup",onChange:function(e){L("tenantSecurityContext",(0,a.Z)((0,a.Z)({},P),{},{runAsGroup:e.target.value})),z("tenant_securityContext_runAsGroup")},label:"Run As Group",value:P.runAsGroup,required:!0,error:K.tenant_securityContext_runAsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:"".concat(n.configSectionItem),children:(0,k.jsxs)("div",{className:"".concat(n.multiContainer," ").concat(n.responsiveSectionItem),children:[(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)(C.Z,{type:"number",id:"tenant_securityContext_fsGroup",name:"tenant_securityContext_fsGroup",onChange:function(e){L("tenantSecurityContext",(0,a.Z)((0,a.Z)({},P),{},{fsGroup:e.target.value})),z("tenant_securityContext_fsGroup")},label:"FsGroup",value:P.fsGroup,required:!0,error:K.tenant_securityContext_fsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)("div",{className:n.configSectionItem,children:(0,k.jsx)(T.Z,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:P.fsGroupChangePolicy,onChange:function(e){L("tenantSecurityContext",(0,a.Z)((0,a.Z)({},P),{},{fsGroupChangePolicy:e.target.value}))},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)("div",{className:n.multiContainer,children:(0,k.jsx)(b.Z,{value:"tenantSecurityContextRunAsNonRoot",id:"tenant_securityContext_runAsNonRoot",name:"tenant_securityContext_runAsNonRoot",checked:P.runAsNonRoot,onChange:function(e){var n=e.target.checked;L("tenantSecurityContext",(0,a.Z)((0,a.Z)({},P),{},{runAsNonRoot:n}))},label:"Do not run as Root"})})})]})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.configSectionItem,children:(0,k.jsx)(b.Z,{value:"customRuntime",id:"tenant_custom_runtime",name:"tenant_custom_runtime",checked:I,onChange:function(e){var n=e.target.checked;L("customRuntime",n)},label:"Custom Runtime Configurations"})}),I&&(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.tenantCustomizationFields,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"Custom Runtime Configurations"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:"".concat(n.configSectionItem),children:(0,k.jsx)("div",{className:n.containerItem,children:(0,k.jsx)(C.Z,{id:"tenant_runtime_runtimeClassName",name:"tenant_runtime_runtimeClassName",onChange:function(e){L("runtimeClassName",e.target.value),z("tenant_runtime_runtimeClassName")},label:"Runtime Class Name",value:R,error:K.tenant_runtime_runtimeClassName||""})})})]})}),(0,k.jsx)(y.Z,{}),(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)(A.Z,{children:"Additional Environment Variables"}),(0,k.jsx)("span",{className:n.descriptionText,children:"Define additional environment variables to be used by your MinIO pods"})]}),(0,k.jsx)(c.ZP,{container:!0,children:w.map((function(e,i){return(0,k.jsxs)(c.ZP,{item:!0,xs:12,className:"".concat(n.formFieldRow," ").concat(n.envVarRow),children:[(0,k.jsx)(c.ZP,{item:!0,xs:5,className:n.fileItem,children:(0,k.jsx)(C.Z,{id:"env_var_key",name:"env_var_key",label:"Key",value:e.key,onChange:function(e){var n=(0,x.Z)(w);t((0,_.Ct)(n.map((function(n,t){return t===i?{key:e.target.value,value:n.value}:n}))))},index:i},"env_var_key_".concat(i.toString()))}),(0,k.jsx)(c.ZP,{item:!0,xs:5,className:n.fileItem,children:(0,k.jsx)(C.Z,{id:"env_var_value",name:"env_var_value",label:"Value",value:e.value,onChange:function(e){var n=(0,x.Z)(w);t((0,_.Ct)(n.map((function(n,t){return t===i?{key:n.key,value:e.target.value}:n}))))},index:i},"env_var_value_".concat(i.toString()))}),(0,k.jsxs)(c.ZP,{item:!0,xs:2,className:n.rowActions,children:[(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){var e=(0,x.Z)(w);e.push({key:"",value:""}),t((0,_.Ct)(e))},disabled:i!==w.length-1,children:(0,k.jsx)(N.Z,{})})}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){var e=w.filter((function(e,n){return n!==i}));t((0,_.Ct)(e))},disabled:w.length<=1,children:(0,k.jsx)(S.HFL,{})})})]})]},"tenant-envVar-".concat(i.toString()))}))})]})})),P=t(83679),I=t(20890),R=t(96040),D=t(72455),F=t(27247),K=(0,D.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({adUserDnRows:{display:"flex",marginBottom:10},buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}}},m.QV),m.DF),m.oO),m.AK))})),E=function(){var e=(0,p.TL)(),n=K(),t=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.idpSelection})),a=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADURL})),s=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADSkipTLS})),o=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADServerInsecure})),d=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADGroupSearchBaseDN})),u=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADGroupSearchFilter})),m=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADUserDNs})),f=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADGroupDNs})),h=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADLookupBindDN})),v=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADLookupBindPassword})),y=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADUserDNSearchBaseDN})),S=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADUserDNSearchFilter})),T=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.ADServerStartTLS})),A=(0,r.useState)({}),w=(0,i.Z)(A,2),P=w[0],D=w[1],E=(0,r.useCallback)((function(n,t){e((0,_.HM)({pageName:"identityProvider",field:n,value:t}))}),[e]),L=function(e){D((0,j.h)(P,e))};return(0,r.useEffect)((function(){var n=[];"AD"===t&&(n=[].concat((0,x.Z)(n),[{fieldKey:"AD_URL",required:!0,value:a},{fieldKey:"ad_lookupBindDN",required:!0,value:h}]));var i=(0,Z.R)(n);e((0,_.NO)({pageName:"identityProvider",valid:0===Object.keys(i).length})),D(i)}),[h,t,a,d,u,m,f,e]),(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"AD_URL",name:"AD_URL",onChange:function(e){E("ADURL",e.target.value),L("AD_URL")},label:"LDAP Server Address",value:a,placeholder:"ldap-server:636",error:P.AD_URL||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(b.Z,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:s,onChange:function(e){var n=e.target.checked;E("ADSkipTLS",n)},label:"Skip TLS Verification"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(b.Z,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:o,onChange:function(e){var n=e.target.checked;E("ADServerInsecure",n)},label:"Server Insecure"})}),o?(0,k.jsxs)(c.ZP,{item:!0,xs:12,children:[(0,k.jsx)(I.Z,{className:n.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,k.jsx)("br",{})]}):null,(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(b.Z,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:T,onChange:function(e){var n=e.target.checked;E("ADServerStartTLS",n)},label:"Start TLS connection to AD/LDAP server"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:function(e){E("ADLookupBindDN",e.target.value),L("ad_lookupBindDN")},label:"Lookup Bind DN",value:h,placeholder:"cn=admin,dc=min,dc=io",error:P.ad_lookupBindDN||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:function(e){E("ADLookupBindPassword",e.target.value)},label:"Lookup Bind Password",value:v,placeholder:"admin"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:function(e){E("ADUserDNSearchBaseDN",e.target.value)},label:"User DN Search Base DN",value:y,placeholder:"dc=min,dc=io"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:function(e){E("ADUserDNSearchFilter",e.target.value)},label:"User DN Search Filter",value:S,placeholder:"(sAMAcountName=%s)"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:function(e){E("ADGroupSearchBaseDN",e.target.value)},label:"Group Search Base DN",value:d,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){E("ADGroupSearchFilter",e.target.value)},label:"Group Search Filter",value:u,placeholder:"(&(objectclass=groupOfNames)(member=%s))"})}),(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"List of user DNs (Distinguished Names) to be Tenant Administrators"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:m.map((function(t,i){return(0,k.jsx)(r.Fragment,{children:(0,k.jsxs)("div",{className:n.adUserDnRows,children:[(0,k.jsx)(C.Z,{id:"ad-userdn-".concat(i.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(i.toString()),value:m[i],onChange:function(n){e((0,_.hK)({index:i,userDN:n.target.value})),L("ad-userdn-".concat(i.toString()))},index:i,error:P["ad-userdn-".concat(i.toString())]||""},"csv-ad-userdn-".concat(i.toString())),(0,k.jsxs)("div",{className:n.buttonTray,children:[(0,k.jsx)(R.Z,{title:"Add User","aria-label":"add",children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){e((0,_.Y$)())},children:(0,k.jsx)(N.Z,{})})}),(0,k.jsx)(R.Z,{title:"Remove","aria-label":"add",children:(0,k.jsx)(g.Z,{size:"small",style:{marginLeft:16},onClick:function(){m.length>1&&e((0,_.GU)(i))},children:(0,k.jsx)(F.Z,{})})})]})]})},"identityField-".concat(i.toString()))}))})]}),(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"List of group DNs (Distinguished Names) to be Tenant Administrators"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:f.map((function(t,i){return(0,k.jsx)(r.Fragment,{children:(0,k.jsxs)("div",{className:n.adUserDnRows,children:[(0,k.jsx)(C.Z,{id:"ad-groupdn-".concat(i.toString()),label:"",placeholder:"",name:"ad-groupdn-".concat(i.toString()),value:f[i],onChange:function(n){e((0,_.in)({index:i,userDN:n.target.value})),L("ad-groupdn-".concat(i.toString()))},index:i,error:P["ad-groupdn-".concat(i.toString())]||""},"csv-ad-groupdn-".concat(i.toString())),(0,k.jsxs)("div",{className:n.buttonTray,children:[(0,k.jsx)(R.Z,{title:"Add Group","aria-label":"add",children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){e((0,_.Fe)())},children:(0,k.jsx)(N.Z,{})})}),(0,k.jsx)(R.Z,{title:"Remove","aria-label":"add",children:(0,k.jsx)(g.Z,{size:"small",style:{marginLeft:16},onClick:function(){f.length>1&&e((0,_.Hu)(i))},children:(0,k.jsx)(F.Z,{})})})]})]})},"identityField-".concat(i.toString()))}))})]})]})},L=(0,D.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}}},m.QV),m.DF),m.oO),m.AK))})),z=function(){var e=(0,p.TL)(),n=L(),t=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.idpSelection})),a=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.openIDConfigurationURL})),s=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.openIDClientID})),o=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.openIDSecretID})),d=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.openIDClaimName})),u=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.openIDScopes})),m=(0,r.useState)({}),f=(0,i.Z)(m,2),h=f[0],v=f[1],g=(0,r.useCallback)((function(n,t){e((0,_.HM)({pageName:"identityProvider",field:n,value:t}))}),[e]),y=function(e){v((0,j.h)(h,e))};return(0,r.useEffect)((function(){var n=[];"OpenID"===t&&(n=[].concat((0,x.Z)(n),[{fieldKey:"openID_CONFIGURATION_URL",required:!0,value:a},{fieldKey:"openID_clientID",required:!0,value:s},{fieldKey:"openID_secretID",required:!0,value:o},{fieldKey:"openID_claimName",required:!1,value:d}]));var i=(0,Z.R)(n);e((0,_.NO)({pageName:"identityProvider",valid:0===Object.keys(i).length})),v(i)}),[t,s,o,a,d,e]),(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:function(e){g("openIDConfigurationURL",e.target.value),y("openID_CONFIGURATION_URL")},label:"Configuration URL",value:a,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:h.openID_CONFIGURATION_URL||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){g("openIDClientID",e.target.value),y("openID_clientID")},label:"Client ID",value:s,error:h.openID_clientID||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"openID_secretID",name:"openID_secretID",onChange:function(e){g("openIDSecretID",e.target.value),y("openID_secretID")},label:"Secret ID",value:o,error:h.openID_secretID||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"openID_claimName",name:"openID_claimName",onChange:function(e){g("openIDClaimName",e.target.value),y("openID_claimName")},label:"Claim Name",value:d,placeholder:"policy",error:h.openID_claimName||""})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"openID_scopes",name:"openID_scopes",onChange:function(e){g("openIDScopes",e.target.value),y("openID_scopes")},label:"Scopes",value:u})})]})},O=t(22918),M=(0,D.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},shortened:{gridTemplateColumns:"auto auto 50px 50px",display:"grid",gridGap:15,marginBottom:10,"& input":{fontWeight:400}}},m.QV),m.DF),m.oO),m.AK))})),G=function(){var e=(0,p.TL)(),n=M(),t=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.idpSelection})),a=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.accessKeys})),s=(0,l.v9)((function(e){return e.createTenant.fields.identityProvider.secretKeys})),o=(0,r.useState)({}),c=(0,i.Z)(o,2),d=c[0],u=c[1],m=function(e){u((0,j.h)(d,e))};return(0,r.useEffect)((function(){var n=[];if("Built-in"===t){n=(0,x.Z)(n);for(var i=0;i.amanzonaws.com",value:a,error:v.aws_endpoint||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"aws_region",name:"aws_region",onChange:function(e){y("awsRegion",e.target.value),b("aws_region")},label:"Region",tooltip:"Region is the AWS region the SecretsManager is located",value:s,error:v.aws_region||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){y("awsKMSKey",e.target.value)},label:"KMS Key",tooltip:"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used",value:o})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"Credentials"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){y("awsAccessKey",e.target.value),b("aws_accessKey")},label:"Access Key",tooltip:"AccessKey is the access key for authenticating to AWS",value:d,error:v.aws_accessKey||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){y("awsSecretKey",e.target.value),b("aws_secretKey")},label:"Secret Key",tooltip:"SecretKey is the secret key for authenticating to AWS",value:u,error:v.aws_secretKey||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"aws_token",name:"aws_token",tooltip:"SessionToken is an optional session token for authenticating to AWS when using STS",onChange:function(e){y("awsToken",e.target.value)},label:"Token",value:m})})]})})]})},se=t(25228),oe=t(43896),le=t(92217),ce=t(13871),de=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({encryptionTypeOptions:{marginBottom:15},mutualTlsConfig:{marginTop:15,"& fieldset":{flex:1}},rightSpacer:{marginRight:15},responsiveContainer:{"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}}},m.QV),m.DF),m.oO),m.AK))}))((function(e){var n=e.classes,t=(0,p.TL)(),s=(0,l.v9)((function(e){return e.createTenant.fields.encryption.replicas})),o=(0,l.v9)((function(e){return e.createTenant.fields.encryption.rawConfiguration})),d=(0,l.v9)((function(e){return e.createTenant.fields.encryption.encryptionTab})),u=(0,l.v9)((function(e){return e.createTenant.fields.encryption.enableEncryption})),m=(0,l.v9)((function(e){return e.createTenant.fields.encryption.encryptionType})),f=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpProjectID})),h=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpEndpoint})),g=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpClientEmail})),y=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpClientID})),N=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpPrivateKeyID})),S=(0,l.v9)((function(e){return e.createTenant.fields.encryption.gcpPrivateKey})),A=(0,l.v9)((function(e){return e.createTenant.fields.encryption.enableCustomCertsForKES})),w=(0,l.v9)((function(e){return e.createTenant.fields.security.enableAutoCert})),I=(0,l.v9)((function(e){return e.createTenant.fields.security.enableTLS})),R=(0,l.v9)((function(e){return e.createTenant.certificates.minioServerCertificates})),D=(0,l.v9)((function(e){return e.createTenant.certificates.kesServerCertificate})),F=(0,l.v9)((function(e){return e.createTenant.certificates.minioMTLSCertificate})),K=(0,l.v9)((function(e){return e.createTenant.certificates.kmsMTLSCertificate})),E=(0,l.v9)((function(e){return e.createTenant.certificates.kmsCA})),L=(0,l.v9)((function(e){return e.createTenant.fields.security.enableCustomCerts})),z=(0,l.v9)((function(e){return e.createTenant.fields.encryption.kesSecurityContext})),O=(0,r.useState)({}),M=(0,i.Z)(O,2),G=M[0],B=M[1],V=!1;I&&(w||R&&R.filter((function(e){return e.encoded_key&&e.encoded_cert})).length>0)&&(V=!0);var q=(0,r.useCallback)((function(e,n){t((0,_.HM)({pageName:"encryption",field:e,value:n}))}),[t]),H=function(e){B((0,j.h)(G,e))};return(0,r.useEffect)((function(){var e=[];u&&(e=[{fieldKey:"rawConfiguration",required:d>0,value:o},{fieldKey:"replicas",required:!0,value:s,customValidation:parseInt(s)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:z.runAsUser,customValidation:""===z.runAsUser||parseInt(z.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:z.runAsGroup,customValidation:""===z.runAsGroup||parseInt(z.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:z.fsGroup,customValidation:""===z.fsGroup||parseInt(z.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}],L&&(e=[].concat((0,x.Z)(e),[{fieldKey:"serverKey",required:!w,value:D.encoded_key},{fieldKey:"serverCert",required:!w,value:D.encoded_cert},{fieldKey:"clientKey",required:!w,value:F.encoded_key},{fieldKey:"clientCert",required:!w,value:F.encoded_cert}])));var n=(0,Z.R)(e);t((0,_.NO)({pageName:"encryption",valid:0===Object.keys(n).length})),B(n)}),[o,d,u,m,f,h,g,y,N,S,t,w,L,D.encoded_key,D.encoded_cert,F.encoded_key,F.encoded_cert,z,s]),(0,k.jsxs)(v.Z,{className:n.paperWrapper,children:[(0,k.jsxs)(c.ZP,{container:!0,alignItems:"center",children:[(0,k.jsx)(c.ZP,{item:!0,xs:!0,children:(0,k.jsx)(Q,{children:"Encryption"})}),(0,k.jsx)(c.ZP,{item:!0,xs:4,justifyContent:"end",textAlign:"right",children:(0,k.jsx)(b.Z,{label:"",indicatorLabels:["Enabled","Disabled"],checked:u,value:"tenant_encryption",id:"tenant-encryption",name:"tenant-encryption",onChange:function(e){var n=e.target.checked;q("enableEncryption",n)},description:"",disabled:!V})})]}),(0,k.jsxs)(c.ZP,{container:!0,spacing:1,children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)("span",{className:n.descriptionText,children:"MinIO Server-Side Encryption (SSE) protects objects as part of write operations, allowing clients to take advantage of server processing power to secure objects at the storage layer (encryption-at-rest). SSE also provides key functionality to regulatory and compliance requirements around secure locking and erasure."})}),(0,k.jsx)(c.ZP,{xs:12,children:(0,k.jsx)(ce.Z,{})}),u&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsxs)(se.Z,{value:d,onChange:function(e,n){q("encryptionTab",n)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",variant:"scrollable",scrollButtons:"auto",children:[(0,k.jsx)(oe.Z,{id:"kms-options",label:"Options"}),(0,k.jsx)(oe.Z,{id:"kms-raw-configuration",label:"Raw Edit"})]})}),d?(0,k.jsx)(r.Fragment,{children:(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)(le.Z,{value:o,mode:"yaml",onBeforeChange:function(e,n,t){q("rawConfiguration",t)},editorHeight:"550px"})})}):(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.encryptionTypeOptions,children:(0,k.jsx)(P.Z,{currentSelection:m,id:"encryptionType",name:"encryptionType",label:"KMS",onChange:function(e){q("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]})}),"vault"===m&&(0,k.jsx)(Y,{}),"azure"===m&&(0,k.jsx)(X,{}),"gcp"===m&&(0,k.jsx)(ne,{}),"aws"===m&&(0,k.jsx)(re,{}),"gemalto"===m&&(0,k.jsx)(ie,{})]}),(0,k.jsx)("div",{className:n.headerElement,children:(0,k.jsx)("h4",{className:n.h3Section,children:"Additional Configurations"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)(b.Z,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:A||!w,onChange:function(e){var n=e.target.checked;q("enableCustomCertsForKES",n)},label:"Custom Certificates",disabled:!w})}),(A||!w)&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{container:!0,children:(0,k.jsx)(c.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"Encryption server certificates"}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.uN)({key:"key",fileName:n,value:e})),H("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:G.serverKey||"",value:D.key,required:!w}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.uN)({key:"cert",fileName:n,value:e})),H("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:G.serverCert||"",value:D.cert,required:!w})]})})}),(0,k.jsx)(c.ZP,{container:!0,style:{marginBottom:15},children:(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"MinIO mTLS certificates (connection between MinIO and the Encryption server)"}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.Ud)({key:"key",fileName:n,value:e})),H("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:G.clientKey||"",value:F.key,required:!w}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.Ud)({key:"cert",fileName:n,value:e})),H("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:G.clientCert||"",value:F.cert,required:!w})]})})}),(0,k.jsx)(c.ZP,{container:!0,className:n.mutualTlsConfig,children:(0,k.jsxs)("fieldset",{className:n.fieldGroup,children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"KMS mTLS certificates (connection between the Encryption server and the KMS)"}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.Tr)({key:"key",fileName:n,value:e})),H("vault_key")},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:K.key}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.Tr)({key:"cert",fileName:n,value:e})),H("vault_cert")},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:K.cert}),(0,k.jsx)(U.Z,{onChange:function(e,n){t((0,_.b9)({fileName:n,value:e})),H("vault_ca")},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:E.cert})]})})]}),(0,k.jsxs)(c.ZP,{item:!0,xs:12,children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,classes:n.formFieldRow,children:(0,k.jsx)(C.Z,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:function(e){q("replicas",e.target.value),H("replicas")},label:"Replicas",value:s,required:!0,error:G.replicas||""})}),(0,k.jsxs)("fieldset",{className:n.fieldGroup,style:{marginTop:15},children:[(0,k.jsx)("legend",{className:n.descriptionText,children:"SecurityContext for KES pods"}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.kesSecurityContext,children:(0,k.jsxs)("div",{className:"".concat(n.multiContainer," ").concat(n.responsiveContainer),children:[(0,k.jsx)("div",{className:"".concat(n.formFieldRow," ").concat(n.rightSpacer),children:(0,k.jsx)(C.Z,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:function(e){q("kesSecurityContext",(0,a.Z)((0,a.Z)({},z),{},{runAsUser:e.target.value})),H("kes_securityContext_runAsUser")},label:"Run As User",value:z.runAsUser,required:!0,error:G.kes_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:"".concat(n.formFieldRow," ").concat(n.rightSpacer),children:(0,k.jsx)(C.Z,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:function(e){q("kesSecurityContext",(0,a.Z)((0,a.Z)({},z),{},{runAsGroup:e.target.value})),H("kes_securityContext_runAsGroup")},label:"Run As Group",value:z.runAsGroup,required:!0,error:G.kes_securityContext_runAsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.kesSecurityContext,children:(0,k.jsxs)("div",{className:"".concat(n.multiContainer," ").concat(n.responsiveContainer),children:[(0,k.jsx)("div",{className:"".concat(n.formFieldRow," ").concat(n.rightSpacer),children:(0,k.jsx)(C.Z,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:function(e){q("kesSecurityContext",(0,a.Z)((0,a.Z)({},z),{},{fsGroup:e.target.value})),H("kes_securityContext_fsGroup")},label:"FsGroup",value:z.fsGroup,required:!0,error:G.kes_securityContext_fsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:"".concat(n.formFieldRow," ").concat(n.rightSpacer),children:(0,k.jsx)(T.Z,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:z.fsGroupChangePolicy,onChange:function(e){q("kesSecurityContext",(0,a.Z)((0,a.Z)({},z),{},{fsGroupChangePolicy:e.target.value}))},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:n.multiContainer,children:(0,k.jsx)(b.Z,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:z.runAsNonRoot,onChange:function(e){var n=e.target.checked;q("kesSecurityContext",(0,a.Z)((0,a.Z)({},z),{},{runAsNonRoot:n}))},label:"Do not run as Root"})})})]})]})]})]})]})})),ue=t(4942),me=t(81207),fe=t(45660),pe=t(87995),xe=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)({overlayAction:{marginLeft:10,display:"flex",alignItems:"center","& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},affinityConfigField:{display:"flex"},affinityFieldLabel:{display:"flex",flexFlow:"column",flex:1},radioField:{display:"flex",alignItems:"flex-start",marginTop:10,"& div:first-child":{display:"flex",flexFlow:"column",alignItems:"baseline",textAlign:"left !important"}},affinityLabelKey:{"& div:first-child":{marginBottom:0}},affinityLabelValue:{marginLeft:10,"& div:first-child":{marginBottom:0}},rowActions:{display:"flex",alignItems:"center"},affinityRow:{marginBottom:10,display:"flex"}},m.oO),m.AK))}))((function(e){var n=e.classes,t=(0,p.TL)(),s=(0,l.v9)((function(e){return e.createTenant.fields.affinity.podAffinity})),o=(0,l.v9)((function(e){return e.createTenant.fields.affinity.nodeSelectorLabels})),d=(0,l.v9)((function(e){return e.createTenant.fields.affinity.withPodAntiAffinity})),u=(0,l.v9)((function(e){return e.createTenant.nodeSelectorPairs})),m=(0,l.v9)((function(e){return e.createTenant.tolerations})),f=(0,r.useState)({}),h=(0,i.Z)(f,2),y=h[0],j=h[1],N=(0,r.useState)(!0),w=(0,i.Z)(N,2),I=w[0],R=w[1],D=(0,r.useState)({}),F=(0,i.Z)(D,2),K=F[0],E=F[1],L=(0,r.useState)([]),z=(0,i.Z)(L,2),O=z[0],M=z[1],G=(0,r.useCallback)((function(e,n){t((0,_.HM)({pageName:"affinity",field:e,value:n}))}),[t]);(0,r.useEffect)((function(){I&&me.Z.invoke("GET","/api/v1/nodes/labels").then((function(e){R(!1),E(e);var n=[];for(var t in e)n.push({label:t,value:t});M(n)})).catch((function(e){R(!1),t((0,pe.zb)(e)),E({})}))}),[t,I]),(0,r.useEffect)((function(){if(u){var e=u.filter((function(e){return""!==e.key})).map((function(e){return"".concat(e.key,"=").concat(e.value)})).filter((function(e,n,t){return t.indexOf(e)===n})).join("&");G("nodeSelectorLabels",e)}}),[u,G]),(0,r.useEffect)((function(){var e=[];if("nodeSelector"===s){var n=!0,i=o.split("&");1===i.length&&""===i[0]&&(n=!1),i.forEach((function(e,t){var a=e.split("=");2!==a.length&&(n=!1),t+1!==i.length&&(""!==a[0]&&""!==a[1]||(n=!1))})),e=[].concat((0,x.Z)(e),[{fieldKey:"labels",required:!0,value:o,customValidation:!n,customValidationMessage:"You need to add at least one label key-pair"}])}var a=(0,Z.R)(e);t((0,_.NO)({pageName:"affinity",valid:0===Object.keys(a).length})),j(a)}),[t,s,o]);var B=function(e,n,i){var r=(0,a.Z)((0,a.Z)({},m[e]),{},(0,ue.Z)({},n,i));t((0,_.iU)({index:e,tolerationValue:r}))};return(0,k.jsxs)(v.Z,{className:n.paperWrapper,children:[(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)(A.Z,{children:"Pod Placement"}),(0,k.jsx)("span",{className:n.descriptionText,children:"Configure how pods will be assigned to nodes"})]}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.affinityConfigField,children:(0,k.jsxs)(c.ZP,{item:!0,className:n.affinityFieldLabel,children:[(0,k.jsx)("div",{className:n.label,children:"Type"}),(0,k.jsx)("div",{className:"".concat(n.descriptionText," ").concat(n.affinityHelpText),children:"MinIO supports multiple configurations for Pod Affinity"}),(0,k.jsx)(c.ZP,{item:!0,className:n.radioField,children:(0,k.jsx)(P.Z,{currentSelection:s,id:"affinity-options",name:"affinity-options",label:" ",onChange:function(e){G("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}]})})]})}),"nodeSelector"===s&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)("br",{}),(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)(b.Z,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:d,onChange:function(e){var n=e.target.checked;G("withPodAntiAffinity",n)},label:"With Pod Anti-Affinity"})}),(0,k.jsxs)(c.ZP,{item:!0,xs:12,children:[(0,k.jsx)("h3",{children:"Labels"}),(0,k.jsx)("span",{className:n.error,children:y.labels}),(0,k.jsx)(c.ZP,{container:!0,children:u&&u.map((function(e,i){return(0,k.jsxs)(c.ZP,{item:!0,xs:12,className:n.affinityRow,children:[(0,k.jsxs)(c.ZP,{item:!0,xs:5,className:n.affinityLabelKey,children:[O.length>0&&(0,k.jsx)(T.Z,{onChange:function(e){var n=e.target.value,a={key:n,value:K[n][0]},r=(0,x.Z)(u);r[i]=a,t((0,_.i$)(r))},id:"select-access-policy",name:"select-access-policy",label:"",value:e.key,options:O}),0===O.length&&(0,k.jsx)(C.Z,{id:"nodeselector-key-".concat(i.toString()),label:"",name:"nodeselector-".concat(i.toString()),value:e.key,onChange:function(e){var n=(0,x.Z)(u);n[i]={key:n[i].key,value:e.target.value},t((0,_.i$)(n))},index:i,placeholder:"Key"})]}),(0,k.jsxs)(c.ZP,{item:!0,xs:5,className:n.affinityLabelValue,children:[O.length>0&&(0,k.jsx)(T.Z,{onChange:function(e){var n=(0,x.Z)(u);n[i]={key:n[i].key,value:e.target.value},t((0,_.i$)(n))},id:"select-access-policy",name:"select-access-policy",label:"",value:e.value,options:K[e.key]?K[e.key].map((function(e){return{label:e,value:e}})):[]}),0===O.length&&(0,k.jsx)(C.Z,{id:"nodeselector-value-".concat(i.toString()),label:"",name:"nodeselector-".concat(i.toString()),value:e.value,onChange:function(e){var n=(0,x.Z)(u);n[i]={key:n[i].key,value:e.target.value},t((0,_.i$)(n))},index:i,placeholder:"value"})]}),(0,k.jsxs)(c.ZP,{item:!0,xs:2,className:n.rowActions,children:[(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){var e=(0,x.Z)(u);O.length>0?e.push({key:O[0].value,value:K[O[0].value][0]}):e.push({key:"",value:""}),t((0,_.i$)(e))},disabled:i!==u.length-1,children:(0,k.jsx)(S.dtP,{})})}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){var e=u.filter((function(e,n){return n!==i}));t((0,_.i$)(e))},disabled:u.length<=1,children:(0,k.jsx)(S.HFL,{})})})]})]},"affinity-keyVal-".concat(i.toString()))}))})]})]}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.affinityConfigField,children:(0,k.jsxs)(c.ZP,{item:!0,className:n.affinityFieldLabel,children:[(0,k.jsx)("h3",{children:"Tolerations"}),(0,k.jsx)("span",{className:n.error,children:y.tolerations}),(0,k.jsx)(c.ZP,{container:!0,children:m&&m.map((function(e,i){var a;return(0,k.jsxs)(c.ZP,{item:!0,xs:12,className:n.affinityRow,children:[(0,k.jsx)(fe.Z,{effect:e.effect,onEffectChange:function(e){B(i,"effect",e)},tolerationKey:e.key,onTolerationKeyChange:function(e){B(i,"key",e)},operator:e.operator,onOperatorChange:function(e){B(i,"operator",e)},value:e.value,onValueChange:function(e){B(i,"value",e)},tolerationSeconds:(null===(a=e.tolerationSeconds)||void 0===a?void 0:a.seconds)||0,onSecondsChange:function(e){B(i,"tolerationSeconds",{seconds:e})},index:i}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){t((0,_.ly)())},disabled:i!==m.length-1,children:(0,k.jsx)(S.dtP,{})})}),(0,k.jsx)("div",{className:n.overlayAction,children:(0,k.jsx)(g.Z,{size:"small",onClick:function(){return t((0,_.JX)(i))},disabled:m.length<=1,children:(0,k.jsx)(S.HFL,{})})})]},"affinity-keyVal-".concat(i.toString()))}))})]})})]})})),he=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)({},m.DF),m.AK))}))((function(e){var n=e.classes,t=(0,p.TL)(),a=(0,l.v9)((function(e){return e.createTenant.fields.configure.customImage})),s=(0,l.v9)((function(e){return e.createTenant.fields.configure.imageName})),o=(0,l.v9)((function(e){return e.createTenant.fields.configure.customDockerhub})),d=(0,l.v9)((function(e){return e.createTenant.fields.configure.imageRegistry})),u=(0,l.v9)((function(e){return e.createTenant.fields.configure.imageRegistryUsername})),m=(0,l.v9)((function(e){return e.createTenant.fields.configure.imageRegistryPassword})),f=(0,l.v9)((function(e){return e.createTenant.fields.configure.tenantCustom})),h=(0,l.v9)((function(e){return e.createTenant.fields.configure.kesImage})),g=(0,r.useState)({}),y=(0,i.Z)(g,2),N=y[0],S=y[1],T=(0,r.useCallback)((function(e,n){t((0,_.HM)({pageName:"configure",field:e,value:n}))}),[t]);(0,r.useEffect)((function(){var e=[];a&&(e=[].concat((0,x.Z)(e),[{fieldKey:"image",required:!1,value:s,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"kesImage",required:!1,value:h,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"}]),o&&(e=[].concat((0,x.Z)(e),[{fieldKey:"registry",required:!0,value:d},{fieldKey:"registryUsername",required:!0,value:u},{fieldKey:"registryPassword",required:!0,value:m}])));var n=(0,Z.R)(e);t((0,_.NO)({pageName:"configure",valid:0===Object.keys(n).length})),S(n)}),[a,s,h,o,d,u,m,t,f]);var w=function(e){S((0,j.h)(N,e))};return(0,k.jsxs)(v.Z,{className:n.paperWrapper,children:[(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)(A.Z,{children:"Container Images"}),(0,k.jsx)("span",{className:n.descriptionText,children:"Specify the container images used by the Tenant and its features."})]}),(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"image",name:"image",onChange:function(e){T("imageName",e.target.value),w("image")},label:"MinIO",value:s,error:N.image||"",placeholder:"minio/minio:RELEASE.2023-09-07T02-05-02Z"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"kesImage",name:"kesImage",onChange:function(e){T("kesImage",e.target.value),w("kesImage")},label:"KES",value:h,error:N.kesImage||"",placeholder:"minio/kes:2023-08-19T17-27-47Z"})})]}),a&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)("h4",{children:"Custom Container Registry"})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(b.Z,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:o,onChange:function(e){var n=e.target.checked;T("customDockerhub",n)},label:"Use a private container registry"})})]}),o&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"registry",name:"registry",onChange:function(e){T("imageRegistry",e.target.value)},label:"Endpoint",value:d,error:N.registry||"",placeholder:"https://index.docker.io/v1/",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"registryUsername",name:"registryUsername",onChange:function(e){T("imageRegistryUsername",e.target.value)},label:"Username",value:u,error:N.registryUsername||"",required:!0})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(C.Z,{id:"registryPassword",name:"registryPassword",onChange:function(e){T("imageRegistryPassword",e.target.value)},label:"Password",value:m,error:N.registryPassword||"",required:!0})})]})]})})),ve=t(74794),ge=t(79836),ye=t(53382),je=t(53994),Ze=t(35855),be=t(45248),Ce=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)({root:{margin:4},table:{"& .MuiTableCell-root":{fontSize:13}}},m.oO),m.AK))}))((function(e){var n=e.classes,t=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.nodes})),i=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.resourcesMemoryRequest})),a=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.ecParity})),s=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.distribution})),o=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.ecParityCalc})),c=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.resourcesCPURequest})),d=(0,l.v9)((function(e){return e.createTenant.fields.tenantSize.integrationSelection})),u=o.storageFactors.find((function(e){return e.erasureCode===a}));return(0,k.jsxs)("div",{className:n.root,children:[(0,k.jsx)("h4",{children:"Resource Allocation"}),(0,k.jsx)(y.Z,{}),(0,k.jsx)(ge.Z,{className:n.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(ye.Z,{children:[(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Number of Servers"}),(0,k.jsx)(je.Z,{align:"right",children:parseInt(t)>0?t:"-"})]}),""===d.typeSelection&&""===d.storageClass&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Drives per Server"}),(0,k.jsx)(je.Z,{align:"right",children:s?s.disks:"-"})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Drive Capacity"}),(0,k.jsx)(je.Z,{align:"right",children:s?(0,be.ae)(s.pvSize):"-"})]})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Total Volumes"}),(0,k.jsx)(je.Z,{align:"right",children:s?s.persistentVolumes:"-"})]}),""===d.typeSelection&&""===d.storageClass&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Memory per Node"}),(0,k.jsxs)(je.Z,{align:"right",children:[i," Gi"]})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{style:{borderBottom:0},scope:"row",children:"CPU Selection"}),(0,k.jsx)(je.Z,{style:{borderBottom:0},align:"right",children:c})]})]})]})}),0===o.error&&u&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)("h4",{children:"Erasure Code Configuration"}),(0,k.jsx)(y.Z,{}),(0,k.jsx)(ge.Z,{className:n.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(ye.Z,{children:[(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"EC Parity"}),(0,k.jsx)(je.Z,{align:"right",children:""!==a?a:"-"})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Raw Capacity"}),(0,k.jsx)(je.Z,{align:"right",children:(0,be.ae)(o.rawCapacity)})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Usable Capacity"}),(0,k.jsx)(je.Z,{align:"right",children:(0,be.ae)(u.maxCapacity)})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{style:{borderBottom:0},scope:"row",children:"Server Failures Tolerated"}),(0,k.jsx)(je.Z,{style:{borderBottom:0},align:"right",children:s?Math.floor(u.maxFailureTolerations/s.disks):"-"})]})]})})]}),""!==d.typeSelection&&""!==d.storageClass&&(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)("h4",{children:"Single Instance Configuration"}),(0,k.jsx)(y.Z,{}),(0,k.jsx)(ge.Z,{className:n.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(ye.Z,{children:[(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"CPU"}),(0,k.jsx)(je.Z,{align:"right",children:0!==d.CPU?d.CPU:"-"})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Memory"}),(0,k.jsx)(je.Z,{align:"right",children:0!==d.memory?"".concat(d.memory," Gi"):"-"})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{scope:"row",children:"Drives per Server"}),(0,k.jsx)(je.Z,{align:"right",children:0!==d.drivesPerServer?"".concat(d.drivesPerServer):"-"})]}),(0,k.jsxs)(Ze.Z,{children:[(0,k.jsx)(je.Z,{style:{borderBottom:0},scope:"row",children:"Drive Size"}),(0,k.jsxs)(je.Z,{style:{borderBottom:0},align:"right",children:[d.driveSize.driveSize,d.driveSize.sizeUnit]})]})]})})]})]})})),Ne=t(19720),Se=t(45884),_e=t(46078),Te=t(51691),Ae=t(40306),ke=t(98222),we=(0,D.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}},m.oO),m.Qw))})),Pe=function(){var e=(0,p.TL)(),n=we(),t=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.namespace})),i=(0,l.v9)((function(e){return e.createTenant.addNSLoading})),a=(0,l.v9)((function(e){return e.createTenant.addNSOpen}));return(0,k.jsx)(Ae.Z,{title:"New namespace",confirmText:"Create",confirmButtonProps:{variant:"callAction"},isOpen:a,titleIcon:(0,k.jsx)(S.EjK,{}),isLoading:i,onConfirm:function(){e((0,ke.QD)())},onClose:function(){e((0,_.pb)())},confirmationContent:(0,k.jsxs)(r.Fragment,{children:[i&&(0,k.jsx)(d.Z,{}),(0,k.jsxs)(Te.Z,{children:["Are you sure you want to add a namespace called",(0,k.jsx)("br",{}),(0,k.jsx)("b",{className:n.wrapText,children:t}),"?"]})]})})},Ie=t(48573),Re=t.n(Ie),De=function(e){e.formToRender;var n=(0,p.TL)(),t=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.namespace})),i=(0,l.v9)((function(e){return e.createTenant.showNSCreateButton})),a=(0,l.v9)((function(e){return e.createTenant.validationErrors.namespace})),s=(0,l.v9)((function(e){return e.createTenant.addNSOpen})),o=(0,r.useMemo)((function(){return Re()((function(){n((0,ke.IO)())}),500)}),[n]);(0,r.useEffect)((function(){if(""!==t)return o(),o.cancel}),[o,t]);return(0,k.jsxs)(r.Fragment,{children:[s&&(0,k.jsx)(Pe,{}),(0,k.jsx)(C.Z,{id:"namespace",name:"namespace",onChange:function(e){n((0,_.Zx)(e.target.value))},label:"Namespace",value:t,error:a||"",overlayId:"add-namespace",overlayIcon:i?(0,k.jsx)(S.dtP,{}):null,overlayAction:function(){n((0,_.Oj)())},required:!0})]})},Fe=function(){var e=(0,p.TL)(),n=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.tenantName})),t=(0,l.v9)((function(e){return e.createTenant.validationErrors["tenant-name"]}));return(0,k.jsx)(C.Z,{id:"tenant-name",name:"tenant-name",onChange:function(n){e((0,_.V7)(n.target.value))},label:"Name",value:n,required:!0,error:t||""})},Ke=(0,h.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)({sizePreview:{marginLeft:10,background:"#FFFFFF",border:"1px solid #EAEAEA",padding:2,marginTop:20}},m.DF),m.oO),m.AK))}))((function(e){var n=e.classes,t=e.formToRender,i=(0,p.TL)(),a=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.selectedStorageClass})),s=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.selectedStorageType})),d=(0,l.v9)((function(e){return e.createTenant.storageClasses})),u=(0,l.v9)(_e.$4),m=(0,r.useCallback)((function(e,n){i((0,_.HM)({pageName:"nameTenant",field:e,value:n}))}),[i]);return(0,r.useEffect)((function(){var e=t===Se.cy.default&&d.length>0||t!==Se.cy.default&&""!==s;i((0,_.NO)({pageName:"nameTenant",valid:e}))}),[d,i,s,t]),(0,k.jsx)(r.Fragment,{children:(0,k.jsxs)(c.ZP,{container:!0,children:[(0,k.jsx)(c.ZP,{item:!0,sx:{width:"calc(100% - 320px)"},children:(0,k.jsx)(v.Z,{className:n.paperWrapper,sx:{minHeight:550},children:(0,k.jsxs)(c.ZP,{container:!0,children:[(0,k.jsxs)(c.ZP,{item:!0,xs:12,children:[(0,k.jsxs)("div",{className:n.headerElement,children:[(0,k.jsx)(A.Z,{children:"Name"}),(0,k.jsx)("span",{className:n.descriptionText,children:"How would you like to name this new tenant?"})]}),(0,k.jsx)("div",{className:n.formFieldRow,children:(0,k.jsx)(Fe,{})})]}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(De,{formToRender:t})}),t===Se.cy.default?(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(T.Z,{id:"storage_class",name:"storage_class",onChange:function(e){m("selectedStorageClass",e.target.value)},label:"Storage Class",value:a,options:d,disabled:d.length<1})}):(0,k.jsx)(c.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,k.jsx)(T.Z,{id:"storage_type",name:"storage_type",onChange:function(e){i((0,_.Qy)({storageType:e.target.value,features:u}))},label:o()(Se.Hd,"".concat(t,".variantSelectorLabel"),"Storage Type"),value:s,options:o()(Se.Hd,"".concat(t,".variantSelectorValues"),[])})}),t===Se.cy.default?(0,k.jsx)(Ne.Z,{}):o()(Se.Hd,"".concat(t,".sizingComponent"),null)]})})}),(0,k.jsx)(c.ZP,{item:!0,children:(0,k.jsx)("div",{className:n.sizePreview,children:(0,k.jsx)(Ce,{})})})]})})})),Ee=function(){var e=(0,l.v9)(_e.$4),n=(0,r.useState)(null),t=(0,i.Z)(n,2),a=t[0],s=t[1];return(0,r.useEffect)((function(){var n=Se.cy.default;e&&0!==e.length&&Object.keys(Se.I8).forEach((function(t){e.includes(t)&&(n=o()(Se.I8,t,Se.cy.default))}));s(n)}),[e]),null===a?null:(0,k.jsx)(Ke,{formToRender:a})},Le=["nameTenant","tenantSize","configure","affinity","identityProvider","security","encryption"],ze=t(84218),Oe=function(){var e=(0,p.TL)(),n=(0,l.v9)((function(e){return e.createTenant.addingTenant})),t=(0,l.v9)((function(e){return e.createTenant.validPages})),i=(0,l.v9)((function(e){return e.createTenant.fields.nameTenant.selectedStorageClass})),a=!n&&""!==i&&Le.every((function(e){return t.includes(e)}));return(0,k.jsx)(S.zxk,{id:"wizard-button-Create",variant:"callAction",color:"primary",onClick:function(){e((0,ze.e)())},disabled:!a,label:"Create"},"button-AddTenant-Create")},Me=t(37798),Ge=t(57689),Be=function(){var e=(0,p.TL)(),n=(0,Ge.s0)(),t=(0,l.v9)((function(e){return e.createTenant.showNewCredentials})),i=(0,l.v9)((function(e){return e.createTenant.createdAccount}));return(0,k.jsx)(r.Fragment,{children:t&&(0,k.jsx)(Me.default,{newServiceAccount:i,open:t,closeModal:function(){e((0,_.dS)()),n("/tenants")},entity:"Tenant"})})},Ve=t(47974),qe=(0,D.Z)((function(e){return(0,u.Z)((0,a.Z)((0,a.Z)((0,a.Z)({pageBox:{border:"1px solid #EAEAEA"}},m.oO),m.AK),m.Je))})),Ue=function(){var e=(0,p.TL)(),n=(0,Ge.s0)(),t=qe(),a=(0,l.v9)(_e.$4),s=(0,l.v9)((function(e){return e.createTenant.addingTenant})),u=(0,r.useState)(null),m=(0,i.Z)(u,2),x=m[0],h=m[1];(0,r.useEffect)((function(){var e=Se.cy.default;a&&0!==a.length&&Object.keys(Se.I8).forEach((function(n){a.includes(n)&&(e=o()(Se.I8,n,Se.cy.default))}));h(e)}),[a]);var v={label:"Cancel",type:"other",enabled:!0,action:function(){e((0,_.dS)()),n("/tenants")}},g={componentRender:(0,k.jsx)(Oe,{},"create-tenant")},y=[{label:"Setup",componentRender:(0,k.jsx)(Ee,{}),buttons:[v,g]},{label:"Configure",advancedOnly:!0,componentRender:(0,k.jsx)(w,{}),buttons:[v,g]},{label:"Images",advancedOnly:!0,componentRender:(0,k.jsx)(he,{}),buttons:[v,g]},{label:"Pod Placement",advancedOnly:!0,componentRender:(0,k.jsx)(xe,{}),buttons:[v,g]},{label:"Identity Provider",advancedOnly:!0,componentRender:(0,k.jsx)(q,{}),buttons:[v,g]},{label:"Security",advancedOnly:!0,componentRender:(0,k.jsx)(W,{}),buttons:[v,g]},{label:"Encryption",advancedOnly:!0,componentRender:(0,k.jsx)(de,{}),buttons:[v,g]}];return(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)(Be,{}),(0,k.jsx)(Ve.Z,{label:(0,k.jsx)(S.hbI,{onClick:function(){e((0,_.dS)()),n("/tenants")},label:"Tenants"})}),(0,k.jsxs)(ve.Z,{children:[s&&(0,k.jsx)(c.ZP,{item:!0,xs:12,children:(0,k.jsx)(d.Z,{})}),(0,k.jsx)(c.ZP,{item:!0,xs:12,className:t.pageBox,children:(0,k.jsx)(f.Z,{wizardSteps:y})}),x===Se.cy.aws&&(0,k.jsx)(c.ZP,{item:!0,xs:12,style:{marginTop:16},children:(0,k.jsx)(S.KfX,{title:"EBS Volume Configuration.",iconComponent:(0,k.jsx)(S.idV,{}),help:(0,k.jsxs)(r.Fragment,{children:[(0,k.jsx)("b",{children:"Performance Optimized"}),": Uses the ",(0,k.jsx)("i",{children:"gp3"})," EBS storage class class configured at 1,000Mi/s throughput and 16,000 IOPS, however the minimum volume size for this type of EBS volume is ",(0,k.jsx)("b",{children:"32Gi"}),".",(0,k.jsx)("br",{}),(0,k.jsx)("br",{}),(0,k.jsx)("b",{children:"Storage Optimized"}),": Uses the ",(0,k.jsx)("i",{children:"sc1"})," EBS storage class, however the minimum volume size for this type of EBS volume is \xa0",(0,k.jsx)("b",{children:"16Ti"})," to unlock their maximum throughput speed of 250Mi/s."]})})})]})]})}},88070:function(e,n,t){t(72791);var i=t(78687),a=t(64554),r=t(75952),s=t(57689),o=t(80184),l=function(e){var n=e.icon,t=e.description;return(0,o.jsxs)(a.Z,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[n," ",(0,o.jsx)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:t})]})};n.Z=function(){var e=(0,s.UO)(),n=e.tenantName||"",t=e.tenantNamespace||"",c=(0,i.v9)((function(e){return""!==t?t:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:""})),d=(0,i.v9)((function(e){return""!==n?n:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""}));return(0,o.jsx)(a.Z,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",marginTop:{xs:"0px"}},children:(0,o.jsxs)(a.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,o.jsx)(l,{icon:(0,o.jsx)(r.Baz,{}),description:"TLS Certificates Warning"}),(0,o.jsxs)(a.Z,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),"If you wish to continue only with ",(0,o.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),(0,o.jsxs)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:["minio.",c,(0,o.jsx)("br",{}),"minio.",c,".svc",(0,o.jsx)("br",{}),"minio.",c,".svc.",(0,o.jsx)("br",{}),"*.",d,"-hl.",c,".svc.",(0,o.jsx)("br",{}),"*.",c,".svc."]}),(0,o.jsx)("br",{}),"Replace ",(0,o.jsx)("em",{children:""}),","," ",(0,o.jsx)("em",{children:""})," and",(0,o.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),"You can learn more at our"," ",(0,o.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}},68456:function(e,n,t){t.d(n,{QT:function(){return o},YH:function(){return l},mo:function(){return s}});var i=t(61889),a=t(75952),r=t(80184),s=function(){return(0,r.jsxs)(i.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(i.ZP,{children:(0,r.jsx)(a.gyG,{width:"16px",height:"16px"})}),(0,r.jsx)(i.ZP,{item:!0,children:"Open ID"})]})},o=function(){return(0,r.jsxs)(i.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(i.ZP,{children:(0,r.jsx)(a.vcZ,{width:"16px",height:"16px"})}),(0,r.jsx)(i.ZP,{item:!0,children:"LDAP / Active Directory"})]})},l=function(){return(0,r.jsxs)(i.ZP,{container:!0,columnGap:1,children:[(0,r.jsx)(i.ZP,{children:(0,r.jsx)(a.oyc,{width:"16px",height:"16px"})}),(0,r.jsx)(i.ZP,{item:!0,children:"Built-in"})]})}},22512:function(e,n,t){var i=t(72791),a=t(20890),r=t(11135),s=t(25787),o=t(80184);n.Z=(0,s.Z)((function(e){var n;return(0,r.Z)({errorBlock:{color:(null===(n=e.palette)||void 0===n?void 0:n.error.main)||"#C83B51"}})}))((function(e){var n=e.classes,t=e.errorMessage,r=e.withBreak,s=void 0===r||r;return(0,o.jsxs)(i.Fragment,{children:[s&&(0,o.jsx)("br",{}),(0,o.jsx)(a.Z,{component:"p",variant:"body1",className:n.errorBlock,children:t})]})}))},42419:function(e,n,t){var i=t(64836);n.Z=void 0;var a=i(t(45649)),r=t(80184),s=(0,a.default)((0,r.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=s},99663:function(e,n,t){var i=t(64836);n.Z=void 0;var a=i(t(45649)),r=t(80184),s=(0,a.default)((0,r.jsx)("path",{d:"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"}),"AttachFile");n.Z=s},86711:function(e,n,t){var i=t(64836);n.Z=void 0;var a=i(t(45649)),r=t(80184),s=(0,a.default)((0,r.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}),"Cancel");n.Z=s},22918:function(e,n,t){var i=t(64836);n.Z=void 0;var a=i(t(45649)),r=t(80184),s=(0,a.default)((0,r.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM7.5 18c-.83 0-1.5-.67-1.5-1.5S6.67 15 7.5 15s1.5.67 1.5 1.5S8.33 18 7.5 18zm0-9C6.67 9 6 8.33 6 7.5S6.67 6 7.5 6 9 6.67 9 7.5 8.33 9 7.5 9zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm0-9c-.83 0-1.5-.67-1.5-1.5S15.67 6 16.5 6s1.5.67 1.5 1.5S17.33 9 16.5 9z"}),"Casino");n.Z=s},27247:function(e,n,t){var i=t(64836);n.Z=void 0;var a=i(t(45649)),r=t(80184),s=(0,a.default)((0,r.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");n.Z=s},94721:function(e,n,t){var i=t(63366),a=t(87462),r=t(72791),s=t(28182),o=t(94419),l=t(12065),c=t(66934),d=t(31402),u=t(90133),m=t(80184),f=["absolute","children","className","component","flexItem","light","orientation","role","textAlign","variant"],p=(0,c.ZP)("div",{name:"MuiDivider",slot:"Root",overridesResolver:function(e,n){var t=e.ownerState;return[n.root,t.absolute&&n.absolute,n[t.variant],t.light&&n.light,"vertical"===t.orientation&&n.vertical,t.flexItem&&n.flexItem,t.children&&n.withChildren,t.children&&"vertical"===t.orientation&&n.withChildrenVertical,"right"===t.textAlign&&"vertical"!==t.orientation&&n.textAlignRight,"left"===t.textAlign&&"vertical"!==t.orientation&&n.textAlignLeft]}})((function(e){var n=e.theme,t=e.ownerState;return(0,a.Z)({margin:0,flexShrink:0,borderWidth:0,borderStyle:"solid",borderColor:(n.vars||n).palette.divider,borderBottomWidth:"thin"},t.absolute&&{position:"absolute",bottom:0,left:0,width:"100%"},t.light&&{borderColor:n.vars?"rgba(".concat(n.vars.palette.dividerChannel," / 0.08)"):(0,l.Fq)(n.palette.divider,.08)},"inset"===t.variant&&{marginLeft:72},"middle"===t.variant&&"horizontal"===t.orientation&&{marginLeft:n.spacing(2),marginRight:n.spacing(2)},"middle"===t.variant&&"vertical"===t.orientation&&{marginTop:n.spacing(1),marginBottom:n.spacing(1)},"vertical"===t.orientation&&{height:"100%",borderBottomWidth:0,borderRightWidth:"thin"},t.flexItem&&{alignSelf:"stretch",height:"auto"})}),(function(e){var n=e.ownerState;return(0,a.Z)({},n.children&&{display:"flex",whiteSpace:"nowrap",textAlign:"center",border:0,"&::before, &::after":{content:'""',alignSelf:"center"}})}),(function(e){var n=e.theme,t=e.ownerState;return(0,a.Z)({},t.children&&"vertical"!==t.orientation&&{"&::before, &::after":{width:"100%",borderTop:"thin solid ".concat((n.vars||n).palette.divider)}})}),(function(e){var n=e.theme,t=e.ownerState;return(0,a.Z)({},t.children&&"vertical"===t.orientation&&{flexDirection:"column","&::before, &::after":{height:"100%",borderLeft:"thin solid ".concat((n.vars||n).palette.divider)}})}),(function(e){var n=e.ownerState;return(0,a.Z)({},"right"===n.textAlign&&"vertical"!==n.orientation&&{"&::before":{width:"90%"},"&::after":{width:"10%"}},"left"===n.textAlign&&"vertical"!==n.orientation&&{"&::before":{width:"10%"},"&::after":{width:"90%"}})})),x=(0,c.ZP)("span",{name:"MuiDivider",slot:"Wrapper",overridesResolver:function(e,n){var t=e.ownerState;return[n.wrapper,"vertical"===t.orientation&&n.wrapperVertical]}})((function(e){var n=e.theme,t=e.ownerState;return(0,a.Z)({display:"inline-block",paddingLeft:"calc(".concat(n.spacing(1)," * 1.2)"),paddingRight:"calc(".concat(n.spacing(1)," * 1.2)")},"vertical"===t.orientation&&{paddingTop:"calc(".concat(n.spacing(1)," * 1.2)"),paddingBottom:"calc(".concat(n.spacing(1)," * 1.2)")})})),h=r.forwardRef((function(e,n){var t=(0,d.Z)({props:e,name:"MuiDivider"}),r=t.absolute,l=void 0!==r&&r,c=t.children,h=t.className,v=t.component,g=void 0===v?c?"div":"hr":v,y=t.flexItem,j=void 0!==y&&y,Z=t.light,b=void 0!==Z&&Z,C=t.orientation,N=void 0===C?"horizontal":C,S=t.role,_=void 0===S?"hr"!==g?"separator":void 0:S,T=t.textAlign,A=void 0===T?"center":T,k=t.variant,w=void 0===k?"fullWidth":k,P=(0,i.Z)(t,f),I=(0,a.Z)({},t,{absolute:l,component:g,flexItem:j,light:b,orientation:N,role:_,textAlign:A,variant:w}),R=function(e){var n=e.absolute,t=e.children,i=e.classes,a=e.flexItem,r=e.light,s=e.orientation,l=e.textAlign,c={root:["root",n&&"absolute",e.variant,r&&"light","vertical"===s&&"vertical",a&&"flexItem",t&&"withChildren",t&&"vertical"===s&&"withChildrenVertical","right"===l&&"vertical"!==s&&"textAlignRight","left"===l&&"vertical"!==s&&"textAlignLeft"],wrapper:["wrapper","vertical"===s&&"wrapperVertical"]};return(0,o.Z)(c,u.V,i)}(I);return(0,m.jsx)(p,(0,a.Z)({as:g,className:(0,s.Z)(R.root,h),role:_,ref:n,ownerState:I},P,{children:c?(0,m.jsx)(x,{className:R.wrapper,ownerState:I,children:c}):null}))}));n.Z=h},63466:function(e,n,t){t.d(n,{Z:function(){return C}});var i=t(4942),a=t(63366),r=t(87462),s=t(72791),o=t(28182),l=t(94419),c=t(14036),d=t(20890),u=t(93840),m=t(52930),f=t(66934),p=t(75878),x=t(21217);function h(e){return(0,x.Z)("MuiInputAdornment",e)}var v,g=(0,p.Z)("MuiInputAdornment",["root","filled","standard","outlined","positionStart","positionEnd","disablePointerEvents","hiddenLabel","sizeSmall"]),y=t(31402),j=t(80184),Z=["children","className","component","disablePointerEvents","disableTypography","position","variant"],b=(0,f.ZP)("div",{name:"MuiInputAdornment",slot:"Root",overridesResolver:function(e,n){var t=e.ownerState;return[n.root,n["position".concat((0,c.Z)(t.position))],!0===t.disablePointerEvents&&n.disablePointerEvents,n[t.variant]]}})((function(e){var n=e.theme,t=e.ownerState;return(0,r.Z)({display:"flex",height:"0.01em",maxHeight:"2em",alignItems:"center",whiteSpace:"nowrap",color:(n.vars||n).palette.action.active},"filled"===t.variant&&(0,i.Z)({},"&.".concat(g.positionStart,"&:not(.").concat(g.hiddenLabel,")"),{marginTop:16}),"start"===t.position&&{marginRight:8},"end"===t.position&&{marginLeft:8},!0===t.disablePointerEvents&&{pointerEvents:"none"})})),C=s.forwardRef((function(e,n){var t=(0,y.Z)({props:e,name:"MuiInputAdornment"}),i=t.children,f=t.className,p=t.component,x=void 0===p?"div":p,g=t.disablePointerEvents,C=void 0!==g&&g,N=t.disableTypography,S=void 0!==N&&N,_=t.position,T=t.variant,A=(0,a.Z)(t,Z),k=(0,m.Z)()||{},w=T;T&&k.variant,k&&!w&&(w=k.variant);var P=(0,r.Z)({},t,{hiddenLabel:k.hiddenLabel,size:k.size,disablePointerEvents:C,position:_,variant:w}),I=function(e){var n=e.classes,t=e.disablePointerEvents,i=e.hiddenLabel,a=e.position,r=e.size,s=e.variant,o={root:["root",t&&"disablePointerEvents",a&&"position".concat((0,c.Z)(a)),s,i&&"hiddenLabel",r&&"size".concat((0,c.Z)(r))]};return(0,l.Z)(o,h,n)}(P);return(0,j.jsx)(u.Z.Provider,{value:null,children:(0,j.jsx)(b,(0,r.Z)({as:x,ownerState:P,className:(0,o.Z)(I.root,f),ref:n},A,{children:"string"!==typeof i||S?(0,j.jsxs)(s.Fragment,{children:["start"===_?v||(v=(0,j.jsx)("span",{className:"notranslate",children:"\u200b"})):null,i]}):(0,j.jsx)(d.Z,{color:"text.secondary",children:i})}))})}))}}]); -//# sourceMappingURL=292.5b893eb9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/292.5b893eb9.chunk.js.map b/web-app/build/static/js/292.5b893eb9.chunk.js.map deleted file mode 100644 index 6b7541e9703..00000000000 --- a/web-app/build/static/js/292.5b893eb9.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/292.5b893eb9.chunk.js","mappings":"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","sources":["screens/Console/Common/CredentialsPrompt/CredentialItem.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx","screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Common/FormHr.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/TooltipWrapper/TooltipWrapper.tsx","screens/Console/Tenants/AddTenant/Steps/Configure.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPActiveDirectory.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPOpenID.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPBuiltIn.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx","screens/Console/Tenants/AddTenant/Steps/Security.tsx","screens/Console/Common/SectionH1.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/VaultKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AzureKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GCPKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GemaltoKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AWSKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption.tsx","screens/Console/Tenants/AddTenant/Steps/Affinity.tsx","screens/Console/Tenants/AddTenant/Steps/Images.tsx","screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx","screens/Console/Tenants/AddTenant/Steps/helpers/AddNamespaceModal.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NamespaceSelector.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NameTenantMain.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantResources.tsx","screens/Console/Tenants/AddTenant/common.ts","screens/Console/Tenants/AddTenant/CreateTenantButton.tsx","screens/Console/Tenants/AddTenant/NewTenantCredentials.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx","screens/Console/Tenants/LogoComponents.tsx","screens/shared/ErrorBlock.tsx","../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/icons-material/AttachFile.js","../node_modules/@mui/icons-material/Cancel.js","../node_modules/@mui/icons-material/Casino.js","../node_modules/@mui/icons-material/Delete.js","../node_modules/@mui/material/Divider/Divider.js","../node_modules/@mui/material/InputAdornment/inputAdornmentClasses.js","../node_modules/@mui/material/InputAdornment/InputAdornment.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button, CopyIcon } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n \n {}}\n onMouseDown={() => {}}\n style={{\n width: \"28px\",\n height: \"28px\",\n padding: \"0px\",\n }}\n icon={}\n />\n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport {\n Button,\n DownloadIcon,\n ServiceAccountCredentialsIcon,\n WarnIcon,\n} from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\"href\", \"data:text/plain;charset=utf-8,\" + text);\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n const downloadImport = () => {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n url: consoleCreds.url,\n accessKey: consoleCreds.accessKey,\n secretKey: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n consoleExtras = cCreds[0];\n }\n } else {\n consoleExtras = {\n url: newServiceAccount.url,\n accessKey: newServiceAccount.accessKey,\n secretKey: newServiceAccount.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n }),\n );\n };\n\n const downloaddAllCredentials = () => {\n let allCredentials = {};\n if (\n consoleCreds &&\n Array.isArray(consoleCreds) &&\n consoleCreds.length > 1\n ) {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n };\n });\n allCredentials = cCreds;\n }\n download(\n \"all_credentials.json\",\n JSON.stringify({\n ...allCredentials,\n }),\n );\n };\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Console Credentials\n
\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n <>\n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n <>\n \n \n \n )}\n
\n
\n )}\n {(consoleCreds === null || consoleCreds === undefined) && (\n <>\n \n \n \n )}\n {idp ? (\n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n
\n \n {!idp && (\n <>\n \n }\n variant=\"callAction\"\n />\n \n\n {Array.isArray(consoleCreds) && consoleCreds.length > 1 && (\n \n }\n variant=\"callAction\"\n color=\"primary\"\n />\n \n )}\n \n )}\n \n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Button, CopyIcon, HelpIcon } from \"mds\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n
\n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n
\n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport { HelpIcon } from \"mds\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport styled from \"@emotion/styled\";\n\nconst FormHr = styled(\"hr\")`\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n`;\n\nexport default FormHr;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport MainError from \"../MainError/MainError\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n noContentPadding?: boolean;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n noContentPadding,\n titleIcon = null,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nexport default withStyles(styles)(ModalWrapper);\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { cloneElement } from \"react\";\nimport { Tooltip } from \"@mui/material\";\n\ninterface ITooltipWrapperProps {\n tooltip: string;\n children: any;\n errorProps?: any;\n placement?:\n | \"bottom-end\"\n | \"bottom-start\"\n | \"bottom\"\n | \"left-end\"\n | \"left-start\"\n | \"left\"\n | \"right-end\"\n | \"right-start\"\n | \"right\"\n | \"top-end\"\n | \"top-start\"\n | \"top\";\n}\n\nconst TooltipWrapper = ({\n tooltip,\n children,\n errorProps = null,\n placement,\n}: ITooltipWrapperProps) => {\n return (\n \n \n {errorProps ? cloneElement(children, { ...errorProps }) : children}\n \n \n );\n};\n\nexport default TooltipWrapper;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n Divider,\n Grid,\n IconButton,\n Paper,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\n\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport { RemoveIcon } from \"mds\";\nimport {\n addNewMinIODomain,\n isPageValid,\n removeMinIODomain,\n setEnvVars,\n updateAddField,\n} from \"../createTenantSlice\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport H3Section from \"../../../Common/H3Section\";\n\ninterface IConfigureProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n configSectionItem: {\n marginRight: 15,\n marginBottom: 15,\n\n \"& .multiContainer\": {\n border: \"1px solid red\",\n },\n },\n tenantCustomizationFields: {\n marginLeft: 30, // 2nd Level(15+15)\n width: \"88%\",\n margin: \"auto\",\n },\n containerItem: {\n marginRight: 15,\n },\n fieldGroup: {\n ...createTenantCommon.fieldGroup,\n paddingTop: 15,\n marginBottom: 25,\n },\n responsiveSectionItem: {\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n\n \"& div > div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n wrapperContainer: {\n display: \"flex\",\n marginBottom: 15,\n },\n envVarRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n ...modalBasic,\n ...wizardCommon,\n ...formFieldStyles,\n });\n\nconst Configure = ({ classes }: IConfigureProps) => {\n const dispatch = useAppDispatch();\n\n const exposeMinIO = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeMinIO,\n );\n const exposeConsole = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeConsole,\n );\n const exposeSFTP = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeSFTP,\n );\n const setDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.setDomains,\n );\n const consoleDomain = useSelector(\n (state: AppState) => state.createTenant.fields.configure.consoleDomain,\n );\n const minioDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.minioDomains,\n );\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n const tenantEnvVars = useSelector(\n (state: AppState) => state.createTenant.fields.configure.envVars,\n );\n const tenantSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.tenantSecurityContext,\n );\n const customRuntime = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customRuntime,\n );\n const runtimeClassName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.runtimeClassName,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (tenantCustom) {\n customAccountValidation = [\n {\n fieldKey: \"tenant_securityContext_runAsUser\",\n required: true,\n value: tenantSecurityContext.runAsUser,\n customValidation:\n tenantSecurityContext.runAsUser === \"\" ||\n parseInt(tenantSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_runAsGroup\",\n required: true,\n value: tenantSecurityContext.runAsGroup,\n customValidation:\n tenantSecurityContext.runAsGroup === \"\" ||\n parseInt(tenantSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_fsGroup\",\n required: true,\n value: tenantSecurityContext.fsGroup!,\n customValidation:\n tenantSecurityContext.fsGroup === \"\" ||\n parseInt(tenantSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n if (setDomains) {\n const minioExtraValidations = minioDomains.map((validation, index) => {\n return {\n fieldKey: `minio-domain-${index.toString()}`,\n required: false,\n value: validation,\n pattern: /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n customPatternMessage:\n \"MinIO domain is not in the form of http|https://subdomain.domain\",\n };\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n ...minioExtraValidations,\n {\n fieldKey: \"console_domain\",\n required: false,\n value: consoleDomain,\n pattern:\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n customPatternMessage:\n \"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n dispatch,\n tenantCustom,\n tenantSecurityContext,\n setDomains,\n consoleDomain,\n minioDomains,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const copyDomains = [...minioDomains];\n copyDomains[index] = value;\n\n updateField(\"minioDomains\", copyDomains);\n };\n\n return (\n \n
\n Configure\n \n Basic configurations for tenant management\n \n
\n
\n

Services

\n \n Whether the tenant's services should request an external IP via\n LoadBalancer service type.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MinIO Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeSFTP\", checked);\n }}\n label={\"Expose SFTP Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"setDomains\", checked);\n }}\n label={\"Set Custom Domains\"}\n />\n \n {setDomains && (\n \n
\n \n Custom Domains for MinIO\n \n \n
\n ) => {\n updateField(\"consoleDomain\", e.target.value);\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\n \"Eg. http://subdomain.domain:port/subpath1/subpath2\"\n }\n error={validationErrors[\"console_domain\"] || \"\"}\n />\n
\n
\n

MinIO Domains

\n
\n {minioDomains.map((domain, index) => {\n return (\n \n ,\n ) => {\n updateMinIODomain(e.target.value, index);\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n error={\n validationErrors[\n `minio-domain-${index.toString()}`\n ] || \"\"\n }\n />\n
\n dispatch(addNewMinIODomain())}\n disabled={index !== minioDomains.length - 1}\n >\n \n \n
\n\n
\n dispatch(removeMinIODomain(index))}\n disabled={minioDomains.length <= 1}\n >\n \n \n
\n
\n );\n })}\n
\n \n
\n
\n
\n )}\n\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"tenantCustom\", checked);\n }}\n label={\"Security Context\"}\n />\n \n {tenantCustom && (\n \n
\n \n SecurityContext for MinIO\n \n \n \n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={tenantSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={tenantSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n \n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={tenantSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"tenant_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroupChangePolicy: e.target.value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n
\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customRuntime\", checked);\n }}\n label={\"Custom Runtime Configurations\"}\n />\n \n {customRuntime && (\n \n
\n \n Custom Runtime Configurations\n \n \n
\n ) => {\n updateField(\"runtimeClassName\", e.target.value);\n cleanValidation(\"tenant_runtime_runtimeClassName\");\n }}\n label=\"Runtime Class Name\"\n value={runtimeClassName}\n error={\n validationErrors[\"tenant_runtime_runtimeClassName\"] || \"\"\n }\n />\n
\n
\n
\n
\n )}\n \n\n
\n Additional Environment Variables\n \n Define additional environment variables to be used by your MinIO pods\n \n
\n \n {tenantEnvVars.map((envVar, index) => (\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: e.target.value, value: keyPair.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_key_${index.toString()}`}\n />\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: keyPair.key, value: e.target.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_value_${index.toString()}`}\n />\n \n \n
\n {\n const existingEnvVars = [...tenantEnvVars];\n existingEnvVars.push({ key: \"\", value: \"\" });\n\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={index !== tenantEnvVars.length - 1}\n >\n \n \n
\n
\n {\n const existingEnvVars = tenantEnvVars.filter(\n (item, fIndex) => fIndex !== index,\n );\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={tenantEnvVars.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n
\n );\n};\n\nexport default withStyles(styles)(Configure);\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Grid, IconButton, Tooltip, Typography } from \"@mui/material\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport {\n addIDPADGroupAtIndex,\n addIDPADUsrAtIndex,\n isPageValid,\n removeIDPADGroupAtIndex,\n removeIDPADUsrAtIndex,\n setIDPADGroupAtIndex,\n setIDPADUsrAtIndex,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { clearValidationError } from \"../../../utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n adUserDnRows: {\n display: \"flex\",\n marginBottom: 10,\n },\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst IDPActiveDirectory = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const ADURL = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADURL,\n );\n const ADSkipTLS = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADSkipTLS,\n );\n const ADServerInsecure = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerInsecure,\n );\n const ADGroupSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n );\n const ADGroupSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchFilter,\n );\n const ADUserDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADUserDNs,\n );\n const ADGroupDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADGroupDNs,\n );\n const ADLookupBindDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindDN,\n );\n const ADLookupBindPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindPassword,\n );\n const ADUserDNSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n );\n const ADUserDNSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n );\n const ADServerStartTLS = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerStartTLS,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_lookupBindDN\",\n required: true,\n value: ADLookupBindDN,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n ADLookupBindDN,\n idpSelection,\n ADURL,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADUserDNs,\n ADGroupDNs,\n dispatch,\n ]);\n\n return (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n \n \n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n cleanValidation(\"ad_lookupBindDN\");\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n error={validationErrors[\"ad_lookupBindDN\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(sAMAcountName=%s)\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n
\n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n \n \n {ADUserDNs.map((_, index) => {\n return (\n \n
\n ) => {\n dispatch(\n setIDPADUsrAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={\n validationErrors[`ad-userdn-${index.toString()}`] || \"\"\n }\n />\n
\n \n {\n dispatch(addIDPADUsrAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n dispatch(removeIDPADUsrAtIndex(index));\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n })}\n
\n
\n
\n \n List of group DNs (Distinguished Names) to be Tenant Administrators\n \n \n {ADGroupDNs.map((_, index) => {\n return (\n \n
\n ) => {\n dispatch(\n setIDPADGroupAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-groupdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-groupdn-${index.toString()}`}\n error={\n validationErrors[`ad-groupdn-${index.toString()}`] || \"\"\n }\n />\n
\n \n {\n dispatch(addIDPADGroupAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADGroupDNs.length > 1) {\n dispatch(removeIDPADGroupAtIndex(index));\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n })}\n
\n
\n
\n );\n};\n\nexport default IDPActiveDirectory;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Grid } from \"@mui/material\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst IDPOpenID = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const openIDConfigurationURL = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDConfigurationURL,\n );\n const openIDClientID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClientID,\n );\n const openIDSecretID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDSecretID,\n );\n const openIDClaimName = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClaimName,\n );\n const openIDScopes = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDScopes,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: false,\n value: openIDClaimName,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDClientID,\n openIDSecretID,\n openIDConfigurationURL,\n openIDClaimName,\n dispatch,\n ]);\n\n return (\n \n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n placeholder=\"policy\"\n error={validationErrors[\"openID_claimName\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n \n );\n};\n\nexport default IDPOpenID;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport {\n addIDPNewKeyPair,\n isPageValid,\n removeIDPKeyPairAtIndex,\n setIDPPwdAtIndex,\n setIDPUsrAtIndex,\n} from \"../../createTenantSlice\";\nimport { IconButton, Tooltip } from \"@mui/material\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport { RemoveIcon } from \"mds\";\nimport { clearValidationError, getRandomString } from \"../../../utils\";\nimport CasinoIcon from \"@mui/icons-material/Casino\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n shortened: {\n gridTemplateColumns: \"auto auto 50px 50px\",\n display: \"grid\",\n gridGap: 15,\n marginBottom: 10,\n \"& input\": {\n fontWeight: 400,\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst IDPBuiltIn = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const accessKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.accessKeys,\n );\n const secretKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.secretKeys,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [idpSelection, accessKeys, secretKeys, dispatch]);\n\n return (\n \n Add additional users\n {accessKeys.map((_, index) => {\n return (\n \n
\n ) => {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: e.target.value,\n }),\n );\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: e.target.value,\n }),\n );\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n
\n
\n {\n dispatch(addIDPNewKeyPair());\n }}\n disabled={index !== accessKeys.length - 1}\n >\n \n \n
\n
\n {\n dispatch(removeIDPKeyPairAtIndex(index));\n }}\n disabled={accessKeys.length <= 1}\n >\n \n \n
\n \n
\n {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: getRandomString(16),\n }),\n );\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: getRandomString(16),\n }),\n );\n }}\n size={\"small\"}\n >\n \n \n
\n
\n
\n
\n
\n );\n })}\n
\n );\n};\n\nexport default IDPBuiltIn;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { Grid, Paper } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { setIDP } from \"../createTenantSlice\";\nimport IDPActiveDirectory from \"./IdentityProvider/IDPActiveDirectory\";\nimport IDPOpenID from \"./IdentityProvider/IDPOpenID\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport IDPBuiltIn from \"./IdentityProvider/IDPBuiltIn\";\nimport {\n BuiltInLogoElement,\n LDAPLogoElement,\n OIDCLogoElement,\n} from \"../../LogoComponents\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n protocolRadioOptions: {\n display: \"flex\",\n flexFlow: \"column\",\n marginBottom: 10,\n\n \"& label\": {\n fontSize: 16,\n fontWeight: 600,\n },\n \"& div\": {\n display: \"flex\",\n flexFlow: \"row\",\n alignItems: \"top\",\n },\n },\n ...createTenantCommon,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst IdentityProvider = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n\n return (\n \n
\n Identity Provider\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n
\n \n {\n dispatch(setIDP(e.target.value));\n }}\n selectorOptions={[\n { label: , value: \"Built-in\" },\n { label: , value: \"OpenID\" },\n { label: , value: \"AD\" },\n ]}\n />\n \n {idpSelection === \"Built-in\" && }\n {idpSelection === \"OpenID\" && }\n {idpSelection === \"AD\" && }\n
\n );\n};\n\nexport default IdentityProvider;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\n\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport { RemoveIcon } from \"mds\";\nimport {\n addCaCertificate,\n addClientKeyPair,\n addFileToCaCertificates,\n addFileToClientKeyPair,\n addFileToKeyPair,\n addKeyPair,\n deleteCaCertificate,\n deleteClientKeyPair,\n deleteKeyPair,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport TLSHelpBox from \"../../HelpBox/TLSHelpBox\";\nimport H3Section from \"../../../Common/H3Section\";\n\ninterface ISecurityProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n minioCertificateRows: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n minioCertsContainer: {\n marginBottom: 15,\n },\n minioCACertsRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n\n ...createTenantCommon,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Security = ({ classes }: ISecurityProps) => {\n const dispatch = useAppDispatch();\n\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const minioCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const minioClientCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioClientCertificates,\n );\n const caCertificates = useSelector(\n (state: AppState) => state.createTenant.certificates.minioCAsCertificates,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"security\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableAutoCert) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableCustomCerts) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n dispatch(isPageValid({ pageName: \"security\", valid: false }));\n }, [enableTLS, enableAutoCert, enableCustomCerts, dispatch]);\n\n return (\n \n
\n Security\n
\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n \n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n \n {enableCustomCerts && (\n \n {!enableAutoCert && (\n \n \n \n )}\n \n
MinIO Server Certificates
\n {minioCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n\n \n
\n {\n dispatch(addKeyPair());\n }}\n disabled={index !== minioCertificates.length - 1}\n >\n \n \n
\n
\n {\n dispatch(deleteKeyPair(keyPair.id));\n }}\n disabled={minioCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n \n
MinIO Client Certificates
\n {minioClientCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n\n \n
\n {\n dispatch(addClientKeyPair());\n }}\n disabled={\n index !== minioClientCertificates.length - 1\n }\n >\n \n \n
\n
\n {\n dispatch(deleteClientKeyPair(keyPair.id));\n }}\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n \n
MinIO CA Certificates
\n {caCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n dispatch(\n addFileToCaCertificates({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n
\n
\n {\n dispatch(addCaCertificate());\n }}\n disabled={index !== caCertificates.length - 1}\n >\n \n \n
\n
\n {\n dispatch(deleteCaCertificate(keyPair.id));\n }}\n disabled={caCertificates.length <= 1}\n >\n \n \n
\n
\n
\n
\n ))}\n \n \n )}\n \n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(Security);\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\ntype Props = {\n children: string;\n};\n\nconst SectionH1: React.FC = ({ children }) => {\n return (\n

\n {children}\n

\n );\n};\n\nexport default SectionH1;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst VaultKMSAdd = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const vaultEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEndpoint,\n );\n const vaultEngine = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEngine,\n );\n const vaultNamespace = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultNamespace,\n );\n const vaultPrefix = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPrefix,\n );\n const vaultAppRoleEngine = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.vaultAppRoleEngine,\n );\n const vaultId = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultId,\n );\n const vaultSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultSecret,\n );\n const vaultRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultRetry,\n );\n const vaultPing = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPing,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultEngine}\n />\n \n \n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultNamespace}\n />\n \n \n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultPrefix}\n />\n \n\n \n
\n App Role\n \n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={vaultAppRoleEngine}\n />\n \n \n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n \n
\n
\n \n
\n Status\n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n
\n \n
\n );\n};\n\nexport default VaultKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst AzureKMSAdd = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const azureEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureEndpoint,\n );\n const azureTenantID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureTenantID,\n );\n const azureClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientID,\n );\n const azureClientSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientSecret,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureEndpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureTenantID,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureClientID,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureClientSecret,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n ) => {\n updateField(\"azureEndpoint\", e.target.value);\n cleanValidation(\"azure_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n value={azureEndpoint}\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n />\n \n \n
\n Credentials\n \n ) => {\n updateField(\"azureTenantID\", e.target.value);\n cleanValidation(\"azure_tenant_id\");\n }}\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={azureTenantID}\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientID\", e.target.value);\n cleanValidation(\"azure_client_id\");\n }}\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={azureClientID}\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientSecret\", e.target.value);\n cleanValidation(\"azure_client_secret\");\n }}\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={azureClientSecret}\n error={validationErrors[\"azure_client_secret\"] || \"\"}\n />\n \n
\n
\n
\n );\n};\n\nexport default AzureKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { updateAddField } from \"../../createTenantSlice\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst GCPKMSAdd = () => {\n const classes = useStyles();\n const dispatch = useAppDispatch();\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n return (\n \n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID.\"\n value={gcpProjectID}\n />\n \n \n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={gcpEndpoint}\n />\n \n \n
\n Credentials\n \n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={gcpClientEmail}\n />\n \n \n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={gcpClientID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKeyID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKey}\n />\n \n
\n
\n
\n );\n};\n\nexport default GCPKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst GemaltoKMSAdd = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const gemaltoEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoEndpoint,\n );\n const gemaltoToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoToken,\n );\n const gemaltoDomain = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoDomain,\n );\n const gemaltoRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoRetry,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n \n
\n Credentials\n \n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
\n \n
\n );\n};\n\nexport default GemaltoKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n }),\n);\n\nconst AWSKMSAdd = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const awsEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsEndpoint,\n );\n const awsRegion = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsRegion,\n );\n const awsKMSKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsKMSKey,\n );\n const awsAccessKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsAccessKey,\n );\n const awsSecretKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsSecretKey,\n );\n const awsToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsToken,\n );\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={awsKMSKey}\n />\n \n \n
\n Credentials\n \n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n \n
\n
\n
\n );\n};\n\nexport default AWSKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Paper, SelectChangeEvent } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\n\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport SectionH1 from \"../../../Common/SectionH1\";\nimport {\n addFileKESServerCert,\n addFileKMSCa,\n addFileKMSMTLSCert,\n addFileMinIOMTLSCert,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport VaultKMSAdd from \"./Encryption/VaultKMSAdd\";\nimport AzureKMSAdd from \"./Encryption/AzureKMSAdd\";\nimport GCPKMSAdd from \"./Encryption/GCPKMSAdd\";\nimport GemaltoKMSAdd from \"./Encryption/GemaltoKMSAdd\";\nimport AWSKMSAdd from \"./Encryption/AWSKMSAdd\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport CodeMirrorWrapper from \"../../../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport FormHr from \"../../../Common/FormHr\";\n\ninterface IEncryptionProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n encryptionTypeOptions: {\n marginBottom: 15,\n },\n mutualTlsConfig: {\n marginTop: 15,\n \"& fieldset\": {\n flex: 1,\n },\n },\n rightSpacer: {\n marginRight: 15,\n },\n responsiveContainer: {\n \"@media (max-width: 900px)\": {\n display: \"flex\",\n flexFlow: \"column\",\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Encryption = ({ classes }: IEncryptionProps) => {\n const dispatch = useAppDispatch();\n\n const replicas = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.replicas,\n );\n const rawConfiguration = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.rawConfiguration,\n );\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const enableEncryption = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.enableEncryption,\n );\n const encryptionType = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionType,\n );\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n const enableCustomCertsForKES = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.enableCustomCertsForKES,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const minioServerCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const kesServerCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kesServerCertificate,\n );\n const minioMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.minioMTLSCertificate,\n );\n const kmsMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsMTLSCertificate,\n );\n const kmsCA = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsCA,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const kesSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.kesSecurityContext,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioServerCertificates &&\n minioServerCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert,\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n encryptionValidation = [\n {\n fieldKey: \"rawConfiguration\",\n required: encryptionTab > 0,\n value: rawConfiguration,\n },\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: kesSecurityContext.runAsUser,\n customValidation:\n kesSecurityContext.runAsUser === \"\" ||\n parseInt(kesSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: kesSecurityContext.runAsGroup,\n customValidation:\n kesSecurityContext.runAsGroup === \"\" ||\n parseInt(kesSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: kesSecurityContext.fsGroup!,\n customValidation:\n kesSecurityContext.fsGroup === \"\" ||\n parseInt(kesSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_cert,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n rawConfiguration,\n encryptionTab,\n enableEncryption,\n encryptionType,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n dispatch,\n enableAutoCert,\n enableCustomCerts,\n kesServerCertificate.encoded_key,\n kesServerCertificate.encoded_cert,\n minioMTLSCertificate.encoded_key,\n minioMTLSCertificate.encoded_cert,\n kesSecurityContext,\n replicas,\n ]);\n\n return (\n \n \n \n Encryption\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n description=\"\"\n disabled={!encryptionAvailable}\n />\n \n \n \n \n \n MinIO Server-Side Encryption (SSE) protects objects as part of write\n operations, allowing clients to take advantage of server processing\n power to secure objects at the storage layer (encryption-at-rest).\n SSE also provides key functionality to regulatory and compliance\n requirements around secure locking and erasure.\n \n \n \n \n \n\n {enableEncryption && (\n \n \n , value: number) => {\n updateField(\"encryptionTab\", value);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n \n \n \n \n\n {encryptionTab ? (\n \n \n {\n updateField(\"rawConfiguration\", value);\n }}\n editorHeight={\"550px\"}\n />\n \n \n ) : (\n \n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n \n {encryptionType === \"vault\" && }\n {encryptionType === \"azure\" && }\n {encryptionType === \"gcp\" && }\n {encryptionType === \"aws\" && }\n {encryptionType === \"gemalto\" && }\n \n )}\n\n
\n

Additional Configurations

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n \n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n \n \n
\n \n Encryption server certificates\n \n {\n dispatch(\n addFileKESServerCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={kesServerCertificate.key}\n required={!enableAutoCert}\n />\n {\n dispatch(\n addFileKESServerCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={kesServerCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n \n \n
\n \n MinIO mTLS certificates (connection between MinIO and\n the Encryption server)\n \n {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={minioMTLSCertificate.key}\n required={!enableAutoCert}\n />\n {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={minioMTLSCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n \n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {\n dispatch(\n addFileKMSMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_key\");\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={kmsMTLSCertificate.key}\n />\n {\n dispatch(\n addFileKMSMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_cert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate.cert}\n />\n {\n dispatch(\n addFileKMSCa({\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={kmsCA.cert}\n />\n
\n
\n
\n )}\n \n \n ) => {\n updateField(\"replicas\", e.target.value);\n cleanValidation(\"replicas\");\n }}\n label=\"Replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n \n\n \n \n SecurityContext for KES pods\n \n \n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={kesSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={kesSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n \n
\n \n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={kesSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroupChangePolicy: e.target.value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n \n \n \n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n \n
\n
\n )}\n
\n
\n );\n};\n\nexport default withStyles(styles)(Encryption);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, SelectChangeEvent } from \"@mui/material\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\n\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { LabelKeyPair } from \"../../types\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { AddIcon, RemoveIcon } from \"mds\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport TolerationSelector from \"../../../Common/TolerationSelector/TolerationSelector\";\nimport { setModalErrorSnackMessage } from \"../../../../../systemSlice\";\nimport {\n addNewToleration,\n isPageValid,\n removeToleration,\n setKeyValuePairs,\n setTolerationInfo,\n updateAddField,\n} from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\ninterface IAffinityProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n overlayAction: {\n marginLeft: 10,\n display: \"flex\",\n alignItems: \"center\",\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n affinityConfigField: {\n display: \"flex\",\n },\n affinityFieldLabel: {\n display: \"flex\",\n flexFlow: \"column\",\n flex: 1,\n },\n radioField: {\n display: \"flex\",\n alignItems: \"flex-start\",\n marginTop: 10,\n \"& div:first-child\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"baseline\",\n textAlign: \"left !important\",\n },\n },\n affinityLabelKey: {\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n affinityLabelValue: {\n marginLeft: 10,\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n rowActions: {\n display: \"flex\",\n alignItems: \"center\",\n },\n affinityRow: {\n marginBottom: 10,\n display: \"flex\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = ({ classes }: IAffinityProps) => {\n const dispatch = useAppDispatch();\n\n const podAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.podAffinity,\n );\n const nodeSelectorLabels = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.nodeSelectorLabels,\n );\n const withPodAntiAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.withPodAntiAffinity,\n );\n const keyValuePairs = useSelector(\n (state: AppState) => state.createTenant.nodeSelectorPairs,\n );\n const tolerations = useSelector(\n (state: AppState) => state.createTenant.tolerations,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {},\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"affinity\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n setKeyValueMap({});\n });\n }\n }, [dispatch, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"affinity\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, podAffinity, nodeSelectorLabels]);\n\n const updateToleration = (index: number, field: string, value: any) => {\n const alterToleration = { ...tolerations[index], [field]: value };\n\n dispatch(\n setTolerationInfo({\n index: index,\n tolerationValue: alterToleration,\n }),\n );\n };\n\n return (\n \n
\n Pod Placement\n \n Configure how pods will be assigned to nodes\n \n
\n \n \n
Type
\n \n MinIO supports multiple configurations for Pod Affinity\n \n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n />\n \n
\n
\n {podAffinity === \"nodeSelector\" && (\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n ) => {\n const newKey = e.target.value as string;\n const newLKP: LabelKeyPair = {\n key: newKey,\n value: keyValueMap[newKey][0],\n };\n const arrCp: LabelKeyPair[] = [...keyValuePairs];\n arrCp[i] = newLKP;\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [...keyValuePairs];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n ) => {\n const arrCp: LabelKeyPair[] = [...keyValuePairs];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [...keyValuePairs];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n
\n {\n const arrCp = [...keyValuePairs];\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={i !== keyValuePairs.length - 1}\n >\n \n \n
\n
\n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i,\n );\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={keyValuePairs.length <= 1}\n >\n \n \n
\n
\n
\n );\n })}\n
\n \n
\n )}\n \n \n

Tolerations

\n \n {validationErrors[\"tolerations\"]}\n \n \n {tolerations &&\n tolerations.map((tol, i) => {\n return (\n \n {\n updateToleration(i, \"effect\", value);\n }}\n tolerationKey={tol.key}\n onTolerationKeyChange={(value) => {\n updateToleration(i, \"key\", value);\n }}\n operator={tol.operator}\n onOperatorChange={(value) => {\n updateToleration(i, \"operator\", value);\n }}\n value={tol.value}\n onValueChange={(value) => {\n updateToleration(i, \"value\", value);\n }}\n tolerationSeconds={tol.tolerationSeconds?.seconds || 0}\n onSecondsChange={(value) => {\n updateToleration(i, \"tolerationSeconds\", {\n seconds: value,\n });\n }}\n index={i}\n />\n
\n {\n dispatch(addNewToleration());\n }}\n disabled={i !== tolerations.length - 1}\n >\n \n \n
\n\n
\n dispatch(removeToleration(i))}\n disabled={tolerations.length <= 1}\n >\n \n \n
\n
\n );\n })}\n
\n
\n \n
\n );\n};\n\nexport default withStyles(styles)(Affinity);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, Paper } from \"@mui/material\";\nimport {\n formFieldStyles,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { isPageValid, updateAddField } from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\ninterface IImagesProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...wizardCommon,\n });\n\nconst Images = ({ classes }: IImagesProps) => {\n const dispatch = useAppDispatch();\n\n const customImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customImage,\n );\n const imageName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageName,\n );\n const customDockerhub = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customDockerhub,\n );\n const imageRegistry = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageRegistry,\n );\n const imageRegistryUsername = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryUsername,\n );\n const imageRegistryPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryPassword,\n );\n\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n\n const kesImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.kesImage,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n kesImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n dispatch,\n tenantCustom,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n Container Images\n \n Specify the container images used by the Tenant and its features.\n \n
\n\n \n \n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"minio/minio:RELEASE.2023-09-07T02-05-02Z\"\n />\n \n\n \n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"minio/kes:2023-08-19T17-27-47Z\"\n />\n \n \n\n {customImage && (\n \n \n

Custom Container Registry

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Use a private container registry\"}\n />\n \n
\n )}\n {customDockerhub && (\n \n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"https://index.docker.io/v1/\"\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n \n )}\n
\n );\n};\n\nexport default withStyles(styles)(Images);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableRow from \"@mui/material/TableRow\";\nimport { niceBytes } from \"../../../../../common/utils\";\n\nimport { Divider } from \"@mui/material\";\n\ninterface ISizePreviewProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 4,\n },\n table: {\n \"& .MuiTableCell-root\": {\n fontSize: 13,\n },\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst SizePreview = ({ classes }: ISizePreviewProps) => {\n const nodes = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.nodes,\n );\n const memoryNode = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesMemoryRequest,\n );\n const ecParity = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParity,\n );\n\n const distribution = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.distribution,\n );\n const ecParityCalc = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParityCalc,\n );\n\n const cpuToUse = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesCPURequest,\n );\n const integrationSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.integrationSelection,\n );\n\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity,\n );\n\n return (\n
\n

Resource Allocation

\n \n \n \n \n Number of Servers\n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Drives per Server\n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n Drive Capacity\n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n )}\n\n \n Total Volumes\n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Memory per Node\n {memoryNode} Gi\n \n \n \n CPU Selection\n \n \n {cpuToUse}\n \n \n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n

Erasure Code Configuration

\n \n \n \n \n EC Parity\n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n Raw Capacity\n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n Usable Capacity\n \n {niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Server Failures Tolerated\n \n \n {distribution\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks,\n )\n : \"-\"}\n \n \n \n \n
\n )}\n {integrationSelection.typeSelection !== \"\" &&\n integrationSelection.storageClass !== \"\" && (\n \n

Single Instance Configuration

\n \n \n \n \n CPU\n \n {integrationSelection.CPU !== 0\n ? integrationSelection.CPU\n : \"-\"}\n \n \n \n Memory\n \n {integrationSelection.memory !== 0\n ? `${integrationSelection.memory} Gi`\n : \"-\"}\n \n \n \n Drives per Server\n \n {integrationSelection.drivesPerServer !== 0\n ? `${integrationSelection.drivesPerServer}`\n : \"-\"}\n \n \n \n \n Drive Size\n \n \n {integrationSelection.driveSize.driveSize}\n {integrationSelection.driveSize.sizeUnit}\n \n \n \n \n
\n )}\n
\n );\n};\n\nexport default withStyles(styles)(SizePreview);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n deleteDialogStyles,\n modalBasic,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmModalIcon } from \"mds\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { closeAddNSModal } from \"../../createTenantSlice\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { createNamespaceAsync } from \"../../thunks/namespaceThunks\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...modalBasic,\n ...deleteDialogStyles,\n }),\n);\n\nconst AddNamespaceModal = () => {\n const dispatch = useAppDispatch();\n const classes = useStyles();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n const addNamespaceLoading = useSelector(\n (state: AppState) => state.createTenant.addNSLoading,\n );\n const addNamespaceOpen = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n return (\n }\n isLoading={addNamespaceLoading}\n onConfirm={() => {\n dispatch(createNamespaceAsync());\n }}\n onClose={() => {\n dispatch(closeAddNSModal());\n }}\n confirmationContent={\n \n {addNamespaceLoading && }\n \n Are you sure you want to add a namespace called\n
\n {namespace}?\n
\n
\n }\n />\n );\n};\n\nexport default AddNamespaceModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useMemo } from \"react\";\nimport { AddIcon } from \"mds\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { openAddNSModal, setNamespace } from \"../../createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport AddNamespaceModal from \"../helpers/AddNamespaceModal\";\nimport debounce from \"lodash/debounce\";\nimport { IMkEnvs } from \"./utils\";\nimport { validateNamespaceAsync } from \"../../thunks/namespaceThunks\";\n\nconst NamespaceSelector = ({ formToRender }: { formToRender?: IMkEnvs }) => {\n const dispatch = useAppDispatch();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n\n const showNSCreateButton = useSelector(\n (state: AppState) => state.createTenant.showNSCreateButton,\n );\n\n const namespaceError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"namespace\"],\n );\n const openAddNSConfirm = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n const debounceNamespace = useMemo(\n () =>\n debounce(() => {\n dispatch(validateNamespaceAsync());\n }, 500),\n [dispatch],\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n const addNamespace = () => {\n dispatch(openAddNSModal());\n };\n\n return (\n \n {openAddNSConfirm && }\n ) => {\n dispatch(setNamespace(e.target.value));\n }}\n label=\"Namespace\"\n value={namespace}\n error={namespaceError || \"\"}\n overlayId={\"add-namespace\"}\n overlayIcon={showNSCreateButton ? : null}\n overlayAction={addNamespace}\n required\n />\n \n );\n};\nexport default NamespaceSelector;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport SizePreview from \"../SizePreview\";\nimport TenantSize from \"./TenantSize\";\nimport { Paper, SelectChangeEvent } from \"@mui/material\";\nimport { IMkEnvs, mkPanelConfigurations } from \"./utils\";\nimport {\n isPageValid,\n setStorageType,\n setTenantName,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { selFeatures } from \"../../../../consoleSlice\";\nimport NamespaceSelector from \"./NamespaceSelector\";\nimport H3Section from \"../../../../Common/H3Section\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizePreview: {\n marginLeft: 10,\n background: \"#FFFFFF\",\n border: \"1px solid #EAEAEA\",\n padding: 2,\n marginTop: 20,\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst NameTenantField = () => {\n const dispatch = useAppDispatch();\n const tenantName = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.tenantName,\n );\n\n const tenantNameError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"tenant-name\"],\n );\n\n return (\n ) => {\n dispatch(setTenantName(e.target.value));\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={tenantNameError || \"\"}\n />\n );\n};\n\ninterface INameTenantMainScreen {\n classes: any;\n formToRender?: IMkEnvs;\n}\n\nconst NameTenantMain = ({ classes, formToRender }: INameTenantMainScreen) => {\n const dispatch = useAppDispatch();\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n const selectedStorageType = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageType,\n );\n const storageClasses = useSelector(\n (state: AppState) => state.createTenant.storageClasses,\n );\n const features = useSelector(selFeatures);\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n dispatch(\n updateAddField({ pageName: \"nameTenant\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n const isValid =\n (formToRender === IMkEnvs.default && storageClasses.length > 0) ||\n (formToRender !== IMkEnvs.default && selectedStorageType !== \"\");\n\n dispatch(isPageValid({ pageName: \"nameTenant\", valid: isValid }));\n }, [storageClasses, dispatch, selectedStorageType, formToRender]);\n\n return (\n \n \n \n \n \n \n
\n Name\n \n How would you like to name this new tenant?\n \n
\n
\n \n
\n
\n \n \n \n {formToRender === IMkEnvs.default ? (\n \n ) => {\n updateField(\n \"selectedStorageClass\",\n e.target.value as string,\n );\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n ) : (\n \n ) => {\n dispatch(\n setStorageType({\n storageType: e.target.value as string,\n features: features,\n }),\n );\n }}\n label={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorLabel`,\n \"Storage Type\",\n )}\n value={selectedStorageType}\n options={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorValues`,\n [],\n )}\n />\n \n )}\n {formToRender === IMkEnvs.default ? (\n \n ) : (\n get(\n mkPanelConfigurations,\n `${formToRender}.sizingComponent`,\n null,\n )\n )}\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(NameTenantMain);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport NameTenantMain from \"./NameTenantMain\";\nimport { IMkEnvs, resourcesConfigurations } from \"./utils\";\nimport { selFeatures } from \"../../../../consoleSlice\";\n\nconst TenantResources = () => {\n const features = useSelector(selFeatures);\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n if (formRender === null) {\n return null;\n }\n\n return ;\n};\n\nexport default TenantResources;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nexport const requiredPages = [\n \"nameTenant\",\n \"tenantSize\",\n \"configure\",\n \"affinity\",\n \"identityProvider\",\n \"security\",\n \"encryption\",\n];\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Button } from \"mds\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { requiredPages } from \"./common\";\nimport { createTenantAsync } from \"./thunks/createTenantThunk\";\n\nconst CreateTenantButton = () => {\n const dispatch = useAppDispatch();\n\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n\n const validPages = useSelector(\n (state: AppState) => state.createTenant.validPages,\n );\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n\n const enabled =\n !addSending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v));\n\n return (\n {\n dispatch(createTenantAsync());\n }}\n disabled={!enabled}\n key={`button-AddTenant-Create`}\n label={\"Create\"}\n />\n );\n};\n\nexport default CreateTenantButton;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { useNavigate } from \"react-router-dom\";\n\nconst NewTenantCredentials = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const showNewCredentials = useSelector(\n (state: AppState) => state.createTenant.showNewCredentials,\n );\n const createdAccount = useSelector(\n (state: AppState) => state.createTenant.createdAccount,\n );\n\n return (\n \n {showNewCredentials && (\n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n entity=\"Tenant\"\n />\n )}\n \n );\n};\n\nexport default NewTenantCredentials;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { useSelector } from \"react-redux\";\nimport Grid from \"@mui/material/Grid\";\nimport { LinearProgress } from \"@mui/material\";\n\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n modalBasic,\n settingsCommon,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport {\n IWizardButton,\n IWizardElement,\n} from \"../../Common/GenericWizard/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport Affinity from \"./Steps/Affinity\";\nimport Images from \"./Steps/Images\";\nimport PageLayout from \"../../Common/Layout/PageLayout\";\n\nimport TenantResources from \"./Steps/TenantResources/TenantResources\";\nimport {\n IMkEnvs,\n resourcesConfigurations,\n} from \"./Steps/TenantResources/utils\";\nimport { BackLink, HelpBox, StorageIcon } from \"mds\";\nimport { selFeatures } from \"../../consoleSlice\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport CreateTenantButton from \"./CreateTenantButton\";\nimport NewTenantCredentials from \"./NewTenantCredentials\";\nimport { useNavigate } from \"react-router-dom\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n pageBox: {\n border: \"1px solid #EAEAEA\",\n },\n ...modalBasic,\n ...wizardCommon,\n ...settingsCommon,\n }),\n);\n\nconst AddTenant = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const classes = useStyles();\n\n const features = useSelector(selFeatures);\n\n // Fields\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"other\",\n enabled: true,\n action: () => {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n },\n };\n\n const createButton: IWizardButton = {\n componentRender: ,\n };\n\n const wizardSteps: IWizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Images\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n let filteredWizardSteps = wizardSteps;\n\n return (\n \n \n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n label={\"Tenants\"}\n />\n }\n />\n\n \n {addSending && (\n \n \n \n )}\n \n \n \n {formRender === IMkEnvs.aws && (\n \n }\n help={\n \n Performance Optimized: Uses the gp3 EBS storage\n class class configured at 1,000Mi/s throughput and 16,000\n IOPS, however the minimum volume size for this type of EBS\n volume is 32Gi.\n
\n
\n Storage Optimized: Uses the sc1 EBS storage\n class, however the minimum volume size for this type of EBS\n volume is  \n 16Ti to unlock their maximum throughput speed of\n 250Mi/s.\n
\n }\n />\n
\n )}\n
\n
\n );\n};\n\nexport default AddTenant;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box } from \"@mui/material\";\nimport { CertificateIcon } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n {description}\n
\n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n var defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n var defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n \n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n
\n \n \n );\n};\n\nexport default TLSHelpBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Grid } from \"@mui/material\";\nimport { LDAPIcon, OIDCIcon, UsersIcon } from \"mds\";\n\nexport const OIDCLogoElement = () => {\n return (\n \n \n \n \n Open ID\n \n );\n};\n\nexport const LDAPLogoElement = () => {\n return (\n \n \n \n \n LDAP / Active Directory\n \n );\n};\n\nexport const BuiltInLogoElement = () => {\n return (\n \n \n \n \n Built-in\n \n );\n};\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"\n}), 'AttachFile');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM7.5 18c-.83 0-1.5-.67-1.5-1.5S6.67 15 7.5 15s1.5.67 1.5 1.5S8.33 18 7.5 18zm0-9C6.67 9 6 8.33 6 7.5S6.67 6 7.5 6 9 6.67 9 7.5 8.33 9 7.5 9zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm0-9c-.83 0-1.5-.67-1.5-1.5S15.67 6 16.5 6s1.5.67 1.5 1.5S17.33 9 16.5 9z\"\n}), 'Casino');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\nexports.default = _default;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"absolute\", \"children\", \"className\", \"component\", \"flexItem\", \"light\", \"orientation\", \"role\", \"textAlign\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getDividerUtilityClass } from './dividerClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n absolute,\n children,\n classes,\n flexItem,\n light,\n orientation,\n textAlign,\n variant\n } = ownerState;\n const slots = {\n root: ['root', absolute && 'absolute', variant, light && 'light', orientation === 'vertical' && 'vertical', flexItem && 'flexItem', children && 'withChildren', children && orientation === 'vertical' && 'withChildrenVertical', textAlign === 'right' && orientation !== 'vertical' && 'textAlignRight', textAlign === 'left' && orientation !== 'vertical' && 'textAlignLeft'],\n wrapper: ['wrapper', orientation === 'vertical' && 'wrapperVertical']\n };\n return composeClasses(slots, getDividerUtilityClass, classes);\n};\nconst DividerRoot = styled('div', {\n name: 'MuiDivider',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.absolute && styles.absolute, styles[ownerState.variant], ownerState.light && styles.light, ownerState.orientation === 'vertical' && styles.vertical, ownerState.flexItem && styles.flexItem, ownerState.children && styles.withChildren, ownerState.children && ownerState.orientation === 'vertical' && styles.withChildrenVertical, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && styles.textAlignRight, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && styles.textAlignLeft];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n margin: 0,\n // Reset browser default style.\n flexShrink: 0,\n borderWidth: 0,\n borderStyle: 'solid',\n borderColor: (theme.vars || theme).palette.divider,\n borderBottomWidth: 'thin'\n}, ownerState.absolute && {\n position: 'absolute',\n bottom: 0,\n left: 0,\n width: '100%'\n}, ownerState.light && {\n borderColor: theme.vars ? `rgba(${theme.vars.palette.dividerChannel} / 0.08)` : alpha(theme.palette.divider, 0.08)\n}, ownerState.variant === 'inset' && {\n marginLeft: 72\n}, ownerState.variant === 'middle' && ownerState.orientation === 'horizontal' && {\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2)\n}, ownerState.variant === 'middle' && ownerState.orientation === 'vertical' && {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1)\n}, ownerState.orientation === 'vertical' && {\n height: '100%',\n borderBottomWidth: 0,\n borderRightWidth: 'thin'\n}, ownerState.flexItem && {\n alignSelf: 'stretch',\n height: 'auto'\n}), ({\n ownerState\n}) => _extends({}, ownerState.children && {\n display: 'flex',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n border: 0,\n '&::before, &::after': {\n content: '\"\"',\n alignSelf: 'center'\n }\n}), ({\n theme,\n ownerState\n}) => _extends({}, ownerState.children && ownerState.orientation !== 'vertical' && {\n '&::before, &::after': {\n width: '100%',\n borderTop: `thin solid ${(theme.vars || theme).palette.divider}`\n }\n}), ({\n theme,\n ownerState\n}) => _extends({}, ownerState.children && ownerState.orientation === 'vertical' && {\n flexDirection: 'column',\n '&::before, &::after': {\n height: '100%',\n borderLeft: `thin solid ${(theme.vars || theme).palette.divider}`\n }\n}), ({\n ownerState\n}) => _extends({}, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && {\n '&::before': {\n width: '90%'\n },\n '&::after': {\n width: '10%'\n }\n}, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && {\n '&::before': {\n width: '10%'\n },\n '&::after': {\n width: '90%'\n }\n}));\nconst DividerWrapper = styled('span', {\n name: 'MuiDivider',\n slot: 'Wrapper',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.wrapper, ownerState.orientation === 'vertical' && styles.wrapperVertical];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'inline-block',\n paddingLeft: `calc(${theme.spacing(1)} * 1.2)`,\n paddingRight: `calc(${theme.spacing(1)} * 1.2)`\n}, ownerState.orientation === 'vertical' && {\n paddingTop: `calc(${theme.spacing(1)} * 1.2)`,\n paddingBottom: `calc(${theme.spacing(1)} * 1.2)`\n}));\nconst Divider = /*#__PURE__*/React.forwardRef(function Divider(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDivider'\n });\n const {\n absolute = false,\n children,\n className,\n component = children ? 'div' : 'hr',\n flexItem = false,\n light = false,\n orientation = 'horizontal',\n role = component !== 'hr' ? 'separator' : undefined,\n textAlign = 'center',\n variant = 'fullWidth'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n absolute,\n component,\n flexItem,\n light,\n orientation,\n role,\n textAlign,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DividerRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n role: role,\n ref: ref,\n ownerState: ownerState\n }, other, {\n children: children ? /*#__PURE__*/_jsx(DividerWrapper, {\n className: classes.wrapper,\n ownerState: ownerState,\n children: children\n }) : null\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Divider.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Absolutely position the element.\n * @default false\n */\n absolute: PropTypes.bool,\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * If `true`, a vertical divider will have the correct height when used in flex container.\n * (By default, a vertical divider will have a calculated height of `0px` if it is the child of a flex container.)\n * @default false\n */\n flexItem: PropTypes.bool,\n /**\n * If `true`, the divider will have a lighter color.\n * @default false\n */\n light: PropTypes.bool,\n /**\n * The component orientation.\n * @default 'horizontal'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n /**\n * @ignore\n */\n role: PropTypes /* @typescript-to-proptypes-ignore */.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The text alignment.\n * @default 'center'\n */\n textAlign: PropTypes.oneOf(['center', 'left', 'right']),\n /**\n * The variant to use.\n * @default 'fullWidth'\n */\n variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['fullWidth', 'inset', 'middle']), PropTypes.string])\n} : void 0;\nexport default Divider;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getInputAdornmentUtilityClass(slot) {\n return generateUtilityClass('MuiInputAdornment', slot);\n}\nconst inputAdornmentClasses = generateUtilityClasses('MuiInputAdornment', ['root', 'filled', 'standard', 'outlined', 'positionStart', 'positionEnd', 'disablePointerEvents', 'hiddenLabel', 'sizeSmall']);\nexport default inputAdornmentClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nvar _span;\nconst _excluded = [\"children\", \"className\", \"component\", \"disablePointerEvents\", \"disableTypography\", \"position\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport capitalize from '../utils/capitalize';\nimport Typography from '../Typography';\nimport FormControlContext from '../FormControl/FormControlContext';\nimport useFormControl from '../FormControl/useFormControl';\nimport styled from '../styles/styled';\nimport inputAdornmentClasses, { getInputAdornmentUtilityClass } from './inputAdornmentClasses';\nimport useThemeProps from '../styles/useThemeProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst overridesResolver = (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`position${capitalize(ownerState.position)}`], ownerState.disablePointerEvents === true && styles.disablePointerEvents, styles[ownerState.variant]];\n};\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disablePointerEvents,\n hiddenLabel,\n position,\n size,\n variant\n } = ownerState;\n const slots = {\n root: ['root', disablePointerEvents && 'disablePointerEvents', position && `position${capitalize(position)}`, variant, hiddenLabel && 'hiddenLabel', size && `size${capitalize(size)}`]\n };\n return composeClasses(slots, getInputAdornmentUtilityClass, classes);\n};\nconst InputAdornmentRoot = styled('div', {\n name: 'MuiInputAdornment',\n slot: 'Root',\n overridesResolver\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'flex',\n height: '0.01em',\n // Fix IE11 flexbox alignment. To remove at some point.\n maxHeight: '2em',\n alignItems: 'center',\n whiteSpace: 'nowrap',\n color: (theme.vars || theme).palette.action.active\n}, ownerState.variant === 'filled' && {\n // Styles applied to the root element if `variant=\"filled\"`.\n [`&.${inputAdornmentClasses.positionStart}&:not(.${inputAdornmentClasses.hiddenLabel})`]: {\n marginTop: 16\n }\n}, ownerState.position === 'start' && {\n // Styles applied to the root element if `position=\"start\"`.\n marginRight: 8\n}, ownerState.position === 'end' && {\n // Styles applied to the root element if `position=\"end\"`.\n marginLeft: 8\n}, ownerState.disablePointerEvents === true && {\n // Styles applied to the root element if `disablePointerEvents={true}`.\n pointerEvents: 'none'\n}));\nconst InputAdornment = /*#__PURE__*/React.forwardRef(function InputAdornment(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiInputAdornment'\n });\n const {\n children,\n className,\n component = 'div',\n disablePointerEvents = false,\n disableTypography = false,\n position,\n variant: variantProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl() || {};\n let variant = variantProp;\n if (variantProp && muiFormControl.variant) {\n if (process.env.NODE_ENV !== 'production') {\n if (variantProp === muiFormControl.variant) {\n console.error('MUI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');\n }\n }\n }\n if (muiFormControl && !variant) {\n variant = muiFormControl.variant;\n }\n const ownerState = _extends({}, props, {\n hiddenLabel: muiFormControl.hiddenLabel,\n size: muiFormControl.size,\n disablePointerEvents,\n position,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(FormControlContext.Provider, {\n value: null,\n children: /*#__PURE__*/_jsx(InputAdornmentRoot, _extends({\n as: component,\n ownerState: ownerState,\n className: clsx(classes.root, className),\n ref: ref\n }, other, {\n children: typeof children === 'string' && !disableTypography ? /*#__PURE__*/_jsx(Typography, {\n color: \"text.secondary\",\n children: children\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [position === 'start' ? /* notranslate needed while Google Translate will not fix zero-width space issue */_span || (_span = /*#__PURE__*/_jsx(\"span\", {\n className: \"notranslate\",\n children: \"\\u200B\"\n })) : null, children]\n })\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputAdornment.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally an `IconButton` or string.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Disable pointer events on the root.\n * This allows for the content of the adornment to focus the `input` on click.\n * @default false\n */\n disablePointerEvents: PropTypes.bool,\n /**\n * If children is a string then disable wrapping in a Typography component.\n * @default false\n */\n disableTypography: PropTypes.bool,\n /**\n * The position this adornment should appear relative to the `Input`.\n */\n position: PropTypes.oneOf(['end', 'start']).isRequired,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The variant to use.\n * Note: If you are using the `TextField` component or the `FormControl` component\n * you do not have to set this manually.\n */\n variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputAdornment;"],"names":["withStyles","theme","createStyles","container","display","flexFlow","padding","inputWithCopy","width","background","height","marginRight","inputLabel","_objectSpread","fieldBasic","fontSize","_ref","_ref$label","label","_ref$value","value","_ref$classes","classes","_jsxs","className","children","_jsx","OutlinedInput","readOnly","endAdornment","InputAdornment","position","TooltipWrapper","tooltip","CopyToClipboard","text","Button","id","onClick","onMouseDown","style","icon","CopyIcon","download","filename","element","document","createElement","setAttribute","body","appendChild","click","removeChild","warningBlock","color","margin","alignItems","credentialTitle","fontWeight","buttonContainer","justifyContent","marginTop","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","newServiceAccount","open","closeModal","entity","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","ServiceAccountCredentialsIcon","Grid","item","xs","formScrollable","React","Array","isArray","map","credentialsPair","index","_Fragment","CredentialItem","accessKey","secretKey","undefined","WarnIcon","consoleExtras","itemMap","url","api","path","JSON","stringify","DownloadIcon","variant","length","allCredentials","_ref$tooltip","_ref$mode","mode","onBeforeChange","_ref$editorHeight","editorHeight","sx","marginBottom","InputLabel","tooltipContainer","Tooltip","placement","HelpIcon","overflow","border","CodeEditor","language","onChange","evn","target","backgroundColor","fontFamily","minHeight","borderTop","Box","paddingRight","marginLeft","type","tooltipHelper","valueString","maxWidth","whiteSpace","textOverflow","fileInputField","fileInputStyles","textBoxContainer","paddingLeft","name","_ref$disabled","disabled","required","_ref$error","error","_ref$accept","accept","_useState","useState","_useState2","_slicedToArray","showFileSelector","setShowSelector","concat","fieldBottom","fieldContainer","errorInField","htmlFor","fieldLabelError","e","fileName","evt","callback","file","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","fileProcess","data","IconButton","component","disableRipple","disableFocusRipple","size","CancelIcon","ErrorBlock","errorMessage","fileReselect","AttachFileIcon","FormHr","styled","_templateObject","_taggedTemplateLiteral","deleteDialogStyles","content","paddingBottom","customDialogSize","snackBarCommon","_ref$wideLimit","wideLimit","noContentPadding","_ref$titleIcon","dispatch","useAppDispatch","openSnackbar","setOpenSnackbar","modalSnackMessage","useSelector","state","system","modalSnackBar","useEffect","setModalSnackMessage","message","customSize","paper","fullWidth","detailedErrorMsg","Dialog","scroll","event","reason","root","DialogTitle","titleText","closeContainer","closeButton","CloseIcon","MainError","isModal","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent","_ref$errorProps","errorProps","cloneElement","configSectionItem","tenantCustomizationFields","containerItem","fieldGroup","createTenantCommon","paddingTop","responsiveSectionItem","wrapperContainer","envVarRow","borderBottom","flex","minWidth","fileItem","rowActions","overlayAction","modalBasic","wizardCommon","formFieldStyles","exposeMinIO","createTenant","fields","configure","exposeConsole","exposeSFTP","setDomains","consoleDomain","minioDomains","tenantCustom","tenantEnvVars","envVars","tenantSecurityContext","customRuntime","runtimeClassName","validationErrors","setValidationErrors","updateField","useCallback","field","updateAddField","pageName","customAccountValidation","fieldKey","runAsUser","customValidation","parseInt","customValidationMessage","runAsGroup","fsGroup","minioExtraValidations","validation","pattern","customPatternMessage","_toConsumableArray","commonVal","commonFormValidation","isPageValid","valid","Object","keys","cleanValidation","fieldName","clearValidationError","Paper","paperWrapper","headerElement","H3Section","descriptionText","h3Section","FormSwitchWrapper","checked","InputBoxWrapper","placeholder","domain","copyDomains","updateMinIODomain","addNewMinIODomain","AddIcon","removeMinIODomain","RemoveIcon","multiContainer","min","SelectWrapper","fsGroupChangePolicy","options","runAsNonRoot","Divider","envVar","formFieldRow","key","existingEnvVars","setEnvVars","keyPair","i","push","filter","fIndex","useStyles","makeStyles","adUserDnRows","buttonTray","idpSelection","identityProvider","ADURL","ADSkipTLS","ADServerInsecure","ADGroupSearchBaseDN","ADGroupSearchFilter","ADUserDNs","ADGroupDNs","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","customIDPValidation","Fragment","Typography","gutterBottom","_","setIDPADUsrAtIndex","userDN","addIDPADUsrAtIndex","removeIDPADUsrAtIndex","DeleteIcon","setIDPADGroupAtIndex","addIDPADGroupAtIndex","removeIDPADGroupAtIndex","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDClaimName","openIDScopes","shortened","gridTemplateColumns","gridGap","accessKeys","secretKeys","setIDPUsrAtIndex","setIDPPwdAtIndex","addIDPNewKeyPair","removeIDPKeyPairAtIndex","getRandomString","CasinoIcon","protocolRadioOptions","RadioGroupSelector","currentSelection","setIDP","selectorOptions","BuiltInLogoElement","OIDCLogoElement","LDAPLogoElement","IDPBuiltIn","IDPOpenID","IDPActiveDirectory","minioCertificateRows","minioCertsContainer","minioCACertsRow","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","minioServerCertificates","minioClientCertificates","caCertificates","minioCAsCertificates","spacing","description","TLSHelpBox","FileSelector","encodedValue","addFileToKeyPair","cert","addKeyPair","deleteKeyPair","addFileToClientKeyPair","addClientKeyPair","deleteClientKeyPair","addFileToCaCertificates","addCaCertificate","deleteCaCertificate","encryptionTab","encryption","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","encryptionValidation","azureEndpoint","azureTenantID","azureClientID","azureClientSecret","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","encryptionTypeOptions","mutualTlsConfig","rightSpacer","responsiveContainer","replicas","rawConfiguration","enableEncryption","encryptionType","enableCustomCertsForKES","kesServerCertificate","minioMTLSCertificate","kmsMTLSCertificate","kmsCA","kesSecurityContext","encryptionAvailable","encoded_key","encoded_cert","SectionH1","textAlign","indicatorLabels","Tabs","indicatorColor","textColor","scrollButtons","Tab","CodeMirrorWrapper","editor","VaultKMSAdd","AzureKMSAdd","GCPKMSAdd","AWSKMSAdd","GemaltoKMSAdd","addFileKESServerCert","addFileMinIOMTLSCert","addFileKMSMTLSCert","addFileKMSCa","affinityConfigField","affinityFieldLabel","radioField","affinityLabelKey","affinityLabelValue","affinityRow","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","tolerations","_useState3","_useState4","loading","setLoading","_useState5","_useState6","keyValueMap","setKeyValueMap","_useState7","_useState8","keyOptions","setKeyOptions","invoke","then","res","k","catch","err","setModalErrorSnackMessage","vl","kvp","kvs","a","indexOf","join","splittedLabels","forEach","splitItem","updateToleration","alterToleration","_defineProperty","setTolerationInfo","tolerationValue","affinityHelpText","newKey","newLKP","arrCp","setKeyValuePairs","v","tol","_tol$tolerationSecond","TolerationSelector","effect","onEffectChange","tolerationKey","onTolerationKeyChange","operator","onOperatorChange","onValueChange","tolerationSeconds","seconds","onSecondsChange","addNewToleration","removeToleration","customImage","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","kesImage","table","nodes","tenantSize","memoryNode","resourcesMemoryRequest","ecParity","distribution","ecParityCalc","cpuToUse","resourcesCPURequest","integrationSelection","usableInformation","storageFactors","find","erasureCode","Table","TableBody","TableRow","TableCell","scope","align","typeSelection","storageClass","disks","niceBytes","pvSize","persistentVolumes","rawCapacity","maxCapacity","Math","floor","maxFailureTolerations","CPU","memory","drivesPerServer","driveSize","sizeUnit","wrapText","wordWrap","namespace","nameTenant","addNamespaceLoading","addNSLoading","addNamespaceOpen","addNSOpen","ConfirmDialog","confirmText","confirmButtonProps","isOpen","ConfirmModalIcon","isLoading","onConfirm","createNamespaceAsync","closeAddNSModal","confirmationContent","LinearProgress","DialogContentText","formToRender","showNSCreateButton","namespaceError","openAddNSConfirm","debounceNamespace","useMemo","debounce","validateNamespaceAsync","cancel","AddNamespaceModal","setNamespace","overlayId","overlayIcon","openAddNSModal","NameTenantField","tenantName","tenantNameError","setTenantName","sizePreview","selectedStorageClass","selectedStorageType","storageClasses","features","selFeatures","isValid","IMkEnvs","default","NamespaceSelector","setStorageType","storageType","mkPanelConfigurations","TenantSize","SizePreview","formRender","setFormRender","setConfiguration","resourcesConfigurations","includes","NameTenantMain","requiredPages","addSending","addingTenant","validPages","enabled","every","createTenantAsync","navigate","useNavigate","showNewCredentials","createdAccount","CredentialsPrompt","resetAddTenantForm","pageBox","settingsCommon","cancelButton","action","createButton","componentRender","CreateTenantButton","filteredWizardSteps","TenantResources","buttons","advancedOnly","Configure","Images","Affinity","IdentityProvider","Security","Encryption","NewTenantCredentials","PageHeaderWrapper","BackLink","PageLayout","GenericWizard","wizardSteps","aws","HelpBox","iconComponent","StorageIcon","help","FeatureItem","fontStyle","params","useParams","tenantNameParam","tenantNamespaceParam","tenantNamespace","borderRadius","CertificateIcon","href","rel","columnGap","OIDCIcon","LDAPIcon","UsersIcon","_theme$palette","errorBlock","palette","main","_ref$withBreak","withBreak","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","jsx","d","_excluded","DividerRoot","slot","overridesResolver","props","styles","ownerState","absolute","light","orientation","vertical","flexItem","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","_extends","flexShrink","borderWidth","borderStyle","borderColor","vars","divider","borderBottomWidth","bottom","left","dividerChannel","alpha","borderRightWidth","alignSelf","_ref2","_ref3","_ref4","flexDirection","borderLeft","_ref5","DividerWrapper","wrapper","wrapperVertical","_ref6","inProps","ref","useThemeProps","_props$absolute","_props$component","_props$flexItem","_props$light","_props$orientation","_props$role","role","_props$textAlign","_props$variant","other","_objectWithoutPropertiesLoose","slots","composeClasses","getDividerUtilityClass","useUtilityClasses","as","clsx","getInputAdornmentUtilityClass","generateUtilityClass","_span","generateUtilityClasses","InputAdornmentRoot","capitalize","disablePointerEvents","active","inputAdornmentClasses","positionStart","hiddenLabel","pointerEvents","_props$disablePointer","_props$disableTypogra","disableTypography","variantProp","muiFormControl","useFormControl","FormControlContext","Provider"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/298.3a4fcab3.chunk.js b/web-app/build/static/js/298.3a4fcab3.chunk.js new file mode 100644 index 00000000000..abd73094f4a --- /dev/null +++ b/web-app/build/static/js/298.3a4fcab3.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[298],{4298:(e,s,n)=>{n.r(s),n.d(s,{default:()=>j});var t=n(2791),a=n(9945),c=n(9434),r=n(7689),i=n(7995),l=n(1320),h=n(1207),p=n(184);const j=()=>{const e=(0,l.TL)(),{tenantName:s,tenantNamespace:n}=(0,r.UO)(),j=(0,c.v9)((e=>e.tenants.loadingTenant)),[d,u]=(0,t.useState)(!0),[x]=(0,t.useState)([""]),[o]=(0,t.useState)([""]),[m]=(0,t.useState)([""]);return(0,t.useEffect)((()=>{j&&u(!0)}),[j]),(0,t.useEffect)((()=>{d&&h.Z.invoke("GET","/api/v1/namespaces/".concat(n||"","/tenants/").concat(s||"","/csr")).then((e=>{for(var s=0;s{e((0,i.Ih)(s))}))}),[d,n,s,m,o,x,e]),(0,p.jsxs)(t.Fragment,{children:[(0,p.jsx)(a.NZf,{separator:!0,sx:{marginBottom:15},children:"Certificate Signing Requests"}),(0,p.jsx)(a.xuv,{children:(0,p.jsxs)(a.iA_,{"aria-label":"collapsible table",children:[(0,p.jsx)(a.ssF,{children:(0,p.jsxs)(a.SCH,{children:[(0,p.jsx)(a.pj1,{children:"Name"}),(0,p.jsx)(a.pj1,{children:"Status"}),(0,p.jsx)(a.pj1,{children:"Annotation"})]})}),(0,p.jsx)(a.RMI,{children:(0,p.jsxs)(a.SCH,{children:[(0,p.jsx)(a.pj1,{children:o.map((e=>(0,p.jsx)("p",{children:e})))}),(0,p.jsx)(a.pj1,{children:x.map((e=>(0,p.jsx)("p",{children:e})))}),(0,p.jsx)(a.pj1,{children:m.map((e=>(0,p.jsx)("p",{children:e})))})]})})]})})]})}}}]); +//# sourceMappingURL=298.3a4fcab3.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/298.3a4fcab3.chunk.js.map b/web-app/build/static/js/298.3a4fcab3.chunk.js.map new file mode 100644 index 00000000000..56e78b4741d --- /dev/null +++ b/web-app/build/static/js/298.3a4fcab3.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/298.3a4fcab3.chunk.js","mappings":"kNAiCA,MA0FA,EA1FkBA,KAChB,MAAMC,GAAWC,EAAAA,EAAAA,OACX,WAAEC,EAAU,gBAAEC,IAAoBC,EAAAA,EAAAA,MAElCC,GAAgBC,EAAAA,EAAAA,KACnBC,GAAoBA,EAAMC,QAAQH,iBAG9BI,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,IACzCC,IAAaD,EAAAA,EAAAA,UAAmB,CAAC,MACjCE,IAAWF,EAAAA,EAAAA,UAAmB,CAAC,MAC/BG,IAAkBH,EAAAA,EAAAA,UAAmB,CAAC,KAwC7C,OAtCAI,EAAAA,EAAAA,YAAU,KACJV,GACFK,GAAW,EACb,GACC,CAACL,KAEJU,EAAAA,EAAAA,YAAU,KACJN,GACFO,EAAAA,EACGC,OACC,MAAM,sBAADC,OACiBf,GAAmB,GAAE,aAAAe,OACzChB,GAAc,GAAE,SAGnBiB,MAAMC,IACL,IAAK,IAAIC,EAAK,EAAGA,EAAKD,EAAIE,WAAWC,OAAQF,IAAM,CACjD,IAAIG,EAAQJ,EAAIE,WAAWD,GAC3BT,EAAUa,KAAKD,EAAME,QACrBb,EAAQY,KAAKD,EAAMG,MACnBb,EAAeW,KAAKD,EAAMI,YAC5B,CACAlB,GAAW,EAAM,IAElBmB,OAAOC,IACN9B,GAAS+B,EAAAA,EAAAA,IAAqBD,GAAK,GAEzC,GACC,CACDrB,EACAN,EACAD,EACAY,EACAD,EACAD,EACAZ,KAIAgC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,IAAY,CAACC,WAAS,EAACC,GAAI,CAAEC,aAAc,IAAKL,SAAC,kCAGlDC,EAAAA,EAAAA,KAACK,EAAAA,IAAG,CAAAN,UACFF,EAAAA,EAAAA,MAACS,EAAAA,IAAK,CAAC,aAAW,oBAAmBP,SAAA,EACnCC,EAAAA,EAAAA,KAACO,EAAAA,IAAS,CAAAR,UACRF,EAAAA,EAAAA,MAACW,EAAAA,IAAQ,CAAAT,SAAA,EACPC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,UACXC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,YACXC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,qBAGfC,EAAAA,EAAAA,KAACU,EAAAA,IAAS,CAAAX,UACRF,EAAAA,EAAAA,MAACW,EAAAA,IAAQ,CAAAT,SAAA,EACPC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPrB,EAAQiC,KAAKjC,IACZsB,EAAAA,EAAAA,KAAA,KAAAD,SAAIrB,SAGRsB,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPtB,EAAUkC,KAAKlC,IACduB,EAAAA,EAAAA,KAAA,KAAAD,SAAItB,SAGRuB,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPpB,EAAegC,KAAKhC,IACnBqB,EAAAA,EAAAA,KAAA,KAAAD,SAAIpB,oBAOP,C","sources":["screens/Console/Tenants/TenantDetails/TenantCSR.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n SectionTitle,\n Box,\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport api from \"../../../../common/api\";\n\nconst TenantCSR = () => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [loading, setLoading] = useState(true);\n const [csrStatus] = useState([\"\"]);\n const [csrName] = useState([\"\"]);\n const [csrAnnotations] = useState([\"\"]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace || \"\"}/tenants/${\n tenantName || \"\"\n }/csr`,\n )\n .then((res) => {\n for (var _i = 0; _i < res.csrElement.length; _i++) {\n var entry = res.csrElement[_i];\n csrStatus.push(entry.status);\n csrName.push(entry.name);\n csrAnnotations.push(entry.annotations);\n }\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [\n loading,\n tenantNamespace,\n tenantName,\n csrAnnotations,\n csrName,\n csrStatus,\n dispatch,\n ]);\n\n return (\n \n \n Certificate Signing Requests\n \n \n \n \n \n Name\n Status\n Annotation\n \n \n \n \n \n {csrName.map((csrName) => (\n

{csrName}

\n ))}\n
\n \n {csrStatus.map((csrStatus) => (\n

{csrStatus}

\n ))}\n
\n \n {csrAnnotations.map((csrAnnotations) => (\n

{csrAnnotations}

\n ))}\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default TenantCSR;\n"],"names":["TenantCSR","dispatch","useAppDispatch","tenantName","tenantNamespace","useParams","loadingTenant","useSelector","state","tenants","loading","setLoading","useState","csrStatus","csrName","csrAnnotations","useEffect","api","invoke","concat","then","res","_i","csrElement","length","entry","push","status","name","annotations","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","Box","Table","TableHead","TableRow","TableCell","TableBody","map"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/298.593f6fcc.chunk.js b/web-app/build/static/js/298.593f6fcc.chunk.js deleted file mode 100644 index 7e0e3eeaebf..00000000000 --- a/web-app/build/static/js/298.593f6fcc.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[298],{24298:function(e,n,t){t.r(n);var r=t(29439),a=t(1413),o=t(72791),s=t(78687),c=t(11135),i=t(25787),u=t(87995),l=t(23814),Z=t(81207),d=t(39281),f=t(35527),h=t(79836),p=t(56890),m=t(35855),v=t(53994),j=t(53382),x=t(57689),b=t(41320),T=t(80184);n.default=(0,i.Z)((function(e){return(0,c.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},l.OR),l.qg),l.VX),l.Bz))}))((function(e){var n=e.classes,t=(0,b.TL)(),a=(0,x.UO)(),c=a.tenantName,i=a.tenantNamespace,l=(0,s.v9)((function(e){return e.tenants.loadingTenant})),w=(0,o.useState)(!0),N=(0,r.Z)(w,2),g=N[0],M=N[1],R=(0,o.useState)([""]),S=(0,r.Z)(R,1)[0],C=(0,o.useState)([""]),k=(0,r.Z)(C,1)[0],E=(0,o.useState)([""]),H=(0,r.Z)(E,1)[0];return(0,o.useEffect)((function(){l&&M(!0)}),[l]),(0,o.useEffect)((function(){g&&Z.Z.invoke("GET","/api/v1/namespaces/".concat(i||"","/tenants/").concat(c||"","/csr")).then((function(e){for(var n=0;n.\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n tableStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport api from \"../../../../common/api\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport Paper from \"@mui/material/Paper\";\nimport Table from \"@mui/material/Table\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableBody from \"@mui/material/TableBody\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\n\ninterface ITenantCSRProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...tableStyles,\n ...containerForHeader,\n });\n\nconst TenantCSR = ({ classes }: ITenantCSRProps) => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [loading, setLoading] = useState(true);\n const [csrStatus] = useState([\"\"]);\n const [csrName] = useState([\"\"]);\n const [csrAnnotations] = useState([\"\"]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace || \"\"}/tenants/${\n tenantName || \"\"\n }/csr`,\n )\n .then((res) => {\n for (var _i = 0; _i < res.csrElement.length; _i++) {\n var entry = res.csrElement[_i];\n csrStatus.push(entry.status);\n csrName.push(entry.name);\n csrAnnotations.push(entry.annotations);\n }\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [\n loading,\n tenantNamespace,\n tenantName,\n csrAnnotations,\n csrName,\n csrStatus,\n dispatch,\n ]);\n\n return (\n \n

Certificate Signing Requests

\n \n \n \n \n Name\n Status\n Annotation\n \n \n \n \n \n \n {csrName.map((csrName) => (\n

{csrName}

\n ))}\n
\n \n {csrStatus.map((csrStatus) => (\n

{csrStatus}

\n ))}\n
\n \n {csrAnnotations.map((csrAnnotations) => (\n

{csrAnnotations}

\n ))}\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(TenantCSR);\n","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getTableContainerUtilityClass(slot) {\n return generateUtilityClass('MuiTableContainer', slot);\n}\nconst tableContainerClasses = generateUtilityClasses('MuiTableContainer', ['root']);\nexport default tableContainerClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"component\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport { getTableContainerUtilityClass } from './tableContainerClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getTableContainerUtilityClass, classes);\n};\nconst TableContainerRoot = styled('div', {\n name: 'MuiTableContainer',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({\n width: '100%',\n overflowX: 'auto'\n});\nconst TableContainer = /*#__PURE__*/React.forwardRef(function TableContainer(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTableContainer'\n });\n const {\n className,\n component = 'div'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n component\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(TableContainerRoot, _extends({\n ref: ref,\n as: component,\n className: clsx(classes.root, className),\n ownerState: ownerState\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableContainer.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally `Table`.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default TableContainer;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getTableHeadUtilityClass(slot) {\n return generateUtilityClass('MuiTableHead', slot);\n}\nconst tableHeadClasses = generateUtilityClasses('MuiTableHead', ['root']);\nexport default tableHeadClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"component\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport { getTableHeadUtilityClass } from './tableHeadClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getTableHeadUtilityClass, classes);\n};\nconst TableHeadRoot = styled('thead', {\n name: 'MuiTableHead',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({\n display: 'table-header-group'\n});\nconst tablelvl2 = {\n variant: 'head'\n};\nconst defaultComponent = 'thead';\nconst TableHead = /*#__PURE__*/React.forwardRef(function TableHead(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTableHead'\n });\n const {\n className,\n component = defaultComponent\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n component\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(Tablelvl2Context.Provider, {\n value: tablelvl2,\n children: /*#__PURE__*/_jsx(TableHeadRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n ref: ref,\n role: component === defaultComponent ? null : 'rowgroup',\n ownerState: ownerState\n }, other))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? TableHead.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally `TableRow`.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default TableHead;"],"names":["withStyles","theme","createStyles","_objectSpread","actionsTray","searchField","tableStyles","containerForHeader","_ref","classes","dispatch","useAppDispatch","_useParams","useParams","tenantName","tenantNamespace","loadingTenant","useSelector","state","tenants","_useState","useState","_useState2","_slicedToArray","loading","setLoading","_useState3","csrStatus","_useState5","csrName","_useState7","csrAnnotations","useEffect","api","invoke","concat","then","res","_i","csrElement","length","entry","push","status","name","annotations","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","className","sectionTitle","TableContainer","component","Paper","Table","TableHead","TableRow","TableCell","TableBody","map","getTableContainerUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","TableContainerRoot","styled","overridesResolver","props","styles","root","width","overflowX","React","inProps","ref","useThemeProps","_props$component","other","_objectWithoutPropertiesLoose","ownerState","_extends","composeClasses","useUtilityClasses","as","clsx","getTableHeadUtilityClass","TableHeadRoot","display","tablelvl2","variant","defaultComponent","Tablelvl2Context","Provider","value","role"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/30.80b393c6.chunk.js b/web-app/build/static/js/30.80b393c6.chunk.js deleted file mode 100644 index d77888be0f0..00000000000 --- a/web-app/build/static/js/30.80b393c6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[30],{81806:function(e,n,t){var i=t(1413),o=t(45987),a=(t(72791),t(11135)),l=t(25787),s=t(80184),r=["classes","children"];n.Z=(0,l.Z)((function(e){return(0,a.Z)({root:{padding:0,margin:0,border:0,backgroundColor:"transparent",textDecoration:"underline",cursor:"pointer",fontSize:"inherit",color:e.palette.info.main,fontFamily:"Inter, sans-serif"}})}))((function(e){var n=e.classes,t=e.children,a=(0,o.Z)(e,r);return(0,s.jsx)("button",(0,i.Z)((0,i.Z)({},a),{},{className:n.root,children:t}))}))},56028:function(e,n,t){var i=t(29439),o=t(1413),a=t(72791),l=t(78687),s=t(13400),r=t(48888),c=t(5289),u=t(65661),d=t(39157),m=t(11135),v=t(25787),p=t(23814),h=t(41320),f=t(29823),g=t(86352),x=t(87995),Z=t(80184);n.Z=(0,v.Z)((function(e){return(0,m.Z)((0,o.Z)((0,o.Z)({},p.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},p.sN))}))((function(e){var n=e.onClose,t=e.modalOpen,m=e.title,v=e.children,p=e.classes,j=e.wideLimit,b=void 0===j||j,y=e.noContentPadding,S=e.titleIcon,w=void 0===S?null:S,k=(0,h.TL)(),P=(0,a.useState)(!1),R=(0,i.Z)(P,2),C=R[0],N=R[1],I=(0,l.v9)((function(e){return e.system.modalSnackBar}));(0,a.useEffect)((function(){k((0,x.MK)(""))}),[k]),(0,a.useEffect)((function(){if(I){if(""===I.message)return void N(!1);"error"!==I.type&&N(!0)}}),[I]);var F=b?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},A="";return I&&(A=I.detailedErrorMsg,(""===I.detailedErrorMsg||I.detailedErrorMsg.length<5)&&(A=I.message)),(0,Z.jsxs)(c.Z,(0,o.Z)((0,o.Z)({open:t,classes:p},F),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&n()},className:p.root,children:[(0,Z.jsxs)(u.Z,{className:p.title,children:[(0,Z.jsxs)("div",{className:p.titleText,children:[w," ",m]}),(0,Z.jsx)("div",{className:p.closeContainer,children:(0,Z.jsx)(s.Z,{"aria-label":"close",id:"close",className:p.closeButton,onClick:n,disableRipple:!0,size:"small",children:(0,Z.jsx)(f.Z,{})})})]}),(0,Z.jsx)(g.Z,{isModal:!0}),(0,Z.jsx)(r.Z,{open:C,className:p.snackBarModal,onClose:function(){N(!1),k((0,x.MK)(""))},message:A,ContentProps:{className:"".concat(p.snackBar," ").concat(I&&"error"===I.type?p.errorSnackBar:"")},autoHideDuration:I&&"error"===I.type?1e4:5e3}),(0,Z.jsx)(d.Z,{className:y?"":p.content,children:v})]}))}))},45902:function(e,n,t){var i=t(1413),o=(t(72791),t(36314)),a=t(80184);n.Z=function(e){var n=e.label,t=void 0===n?null:n,l=e.value,s=void 0===l?"-":l,r=e.orientation,c=void 0===r?"column":r,u=e.stkProps,d=void 0===u?{}:u,m=e.lblProps,v=void 0===m?{}:m,p=e.valProps,h=void 0===p?{}:p;return(0,a.jsxs)(o.Z,(0,i.Z)((0,i.Z)({direction:{xs:"column",sm:c}},d),{},{children:[(0,a.jsx)("label",(0,i.Z)((0,i.Z)({style:{marginRight:5,fontWeight:600}},v),{},{children:t})),(0,a.jsx)("label",(0,i.Z)((0,i.Z)({style:{marginRight:5,fontWeight:500}},h),{},{children:s}))]}))}},74815:function(e,n,t){t.d(n,{Z:function(){return d}});var i=t(93433),o=(t(72791),t(2600)),a=t(65390),l=t(41048),s=t(45248),r=t(75952),c=t(80184),u=function(e){var n=e.totalValue,t=e.sizeItems,i=e.bgColor,o=void 0===i?"#ededed":i;return(0,c.jsx)("div",{style:{width:"100%",height:12,backgroundColor:o,borderRadius:30,display:"flex",transitionDuration:"0.3s",overflow:"hidden"},children:t.map((function(e,t){var i=100*e.value/n;return(0,c.jsx)("div",{style:{width:"".concat(i,"%"),height:"100%",backgroundColor:e.color,transitionDuration:"0.3s"}},"itemSize-".concat(t.toString()))}))})},d=function(e){var n=e.totalCapacity,t=e.usedSpaceVariants,d=e.statusClass,m=e.render,v=void 0===m?"pie":m,p=["#8dacd3","#bca1ea","#92e8d2","#efc9ac","#97f274","#f7d291","#71ACCB","#f28282","#e28cc1","#2781B0"],h="#ededed",f=t.reduce((function(e,n){return e+n.value}),0),g=n-f,x=[],Z=t.find((function(e){return"STANDARD"===e.variant}))||{value:0,variant:"empty"};t.length>10?x=[{value:f-Z.value,color:"#2781B0",label:"Total Tiers Space"}]:x=t.filter((function(e){return"STANDARD"!==e.variant})).map((function(e,n){return{value:e.value,color:p[n],label:"Tier - ".concat(e.variant)}}));var j="#07193E",b=100*Z.value/n;b>=90?j="#C83B51":b>=75&&(j="#FFAB0F");var y=[{value:Z.value,color:j,label:"Used Space by Tenant"}].concat((0,i.Z)(x),[{value:g,color:"bar"===v?h:"transparent",label:"Empty Space"}]);if("bar"===v){var S=y.map((function(e){return{value:e.value,color:e.color,itemName:e.label}}));return(0,c.jsx)("div",{style:{width:"100%",marginBottom:15},children:(0,c.jsx)(u,{totalValue:n,sizeItems:S,bgColor:h})})}return(0,c.jsxs)("div",{style:{position:"relative",width:110,height:110},children:[(0,c.jsx)("div",{style:{position:"absolute",right:-5,top:15,zIndex:400},className:d,children:(0,c.jsx)(r.J$M,{style:{border:"#fff 2px solid",borderRadius:"100%",width:20,height:20}})}),(0,c.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",fontWeight:"bold",color:"#000",fontSize:11},children:isNaN(f)?"N/A":(0,s.l5)(f)}),(0,c.jsx)("div",{children:(0,c.jsxs)(o.u,{width:110,height:110,children:[(0,c.jsx)(a.b,{data:[{value:100}],cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,fill:h,isAnimationActive:!1,stroke:"none"}),(0,c.jsx)(a.b,{data:y,cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,children:y.map((function(e,n){return(0,c.jsx)(l.b,{fill:e.color,stroke:"none"},"cellCapacity-".concat(n))}))})]})})]})}},21353:function(e,n,t){t.r(n),t.d(n,{default:function(){return O}});var i=t(29439),o=t(1413),a=t(72791),l=t(78687),s=t(26181),r=t.n(s),c=t(11135),u=t(25787),d=t(23814),m=t(61889),v=t(64554),p=t(75952),h=t(56028),f=t(21435),g=t(37516),x=t(81207),Z=t(87995),j=t(41320),b=t(80184),y=(0,u.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({infoText:{fontSize:14}},d.DF),d.ID))}))((function(e){var n=e.open,t=e.closeModalAndRefresh,l=e.namespace,s=e.idTenant,r=e.classes,c=(0,j.TL)(),u=(0,a.useState)(!1),d=(0,i.Z)(u,2),v=d[0],y=d[1],S=(0,a.useState)(""),w=(0,i.Z)(S,2),k=w[0],P=w[1],R=(0,a.useState)(!1),C=(0,i.Z)(R,2),N=C[0],I=C[1],F=(0,a.useState)(""),A=(0,i.Z)(F,2),D=A[0],E=A[1],_=(0,a.useState)(""),M=(0,i.Z)(_,2),B=M[0],T=M[1],z=(0,a.useState)(""),U=(0,i.Z)(z,2),W=U[0],O=U[1],L=(0,a.useState)(!0),$=(0,i.Z)(L,2),G=$[0],V=$[1],H=(0,a.useCallback)((function(e){var n=new RegExp("^$|^((.*?)/(.*?):(.+))$");if("minioImage"===e)V(n.test(k))}),[k]);(0,a.useEffect)((function(){H("minioImage")}),[k,H]);return(0,b.jsx)(h.Z,{title:"Update MinIO Version",modalOpen:n,onClose:function(){t(!1)},children:(0,b.jsxs)(m.ZP,{container:!0,children:[(0,b.jsxs)(m.ZP,{item:!0,xs:12,className:r.modalFormScrollable,children:[(0,b.jsx)("div",{className:r.infoText,children:"Please enter the MinIO image from dockerhub to use. If blank, then latest build will be used."}),(0,b.jsx)("br",{}),(0,b.jsx)("br",{}),(0,b.jsx)(m.ZP,{item:!0,xs:12,className:r.formFieldRow,children:(0,b.jsx)(f.Z,{value:k,label:"MinIO's Image",id:"minioImage",name:"minioImage",placeholder:"E.g. minio/minio:RELEASE.2022-02-26T02-54-46Z",onChange:function(e){P(e.target.value)}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,className:r.formFieldRow,children:(0,b.jsx)(g.Z,{value:"imageRegistry",id:"setImageRegistry",name:"setImageRegistry",checked:N,onChange:function(e){I(!N)},label:"Set Custom Image Registry",indicatorLabels:["Yes","No"]})}),N&&(0,b.jsxs)(a.Fragment,{children:[(0,b.jsx)(m.ZP,{item:!0,xs:12,className:r.formFieldRow,children:(0,b.jsx)(f.Z,{value:D,label:"Endpoint",id:"imageRegistry",name:"imageRegistry",placeholder:"E.g. https://index.docker.io/v1/",onChange:function(e){E(e.target.value)}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,className:r.formFieldRow,children:(0,b.jsx)(f.Z,{value:B,label:"Username",id:"imageRegistryUsername",name:"imageRegistryUsername",placeholder:"Enter image registry username",onChange:function(e){T(e.target.value)}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,className:r.formFieldRow,children:(0,b.jsx)(f.Z,{value:W,label:"Password",id:"imageRegistryPassword",name:"imageRegistryPassword",placeholder:"Enter image registry password",onChange:function(e){O(e.target.value)}})})]})]}),(0,b.jsxs)(m.ZP,{item:!0,xs:12,className:r.modalButtonBar,children:[(0,b.jsx)(p.zxk,{id:"clear",variant:"regular",onClick:function(){P(""),I(!1),E(""),T(""),O("")},label:"Clear"}),(0,b.jsx)(p.zxk,{id:"save-tenant",type:"submit",variant:"callAction",disabled:!G||N&&(""===D.trim()||""===B.trim()||""===W.trim())||v,onClick:function(){y(!0);var e={image:k};if(N){var n={image_registry:{registry:D,username:B,password:W}};e=(0,o.Z)((0,o.Z)({},e),n)}x.Z.invoke("PUT","/api/v1/namespaces/".concat(l,"/tenants/").concat(s),e).then((function(){y(!1),c((0,Z.y1)("Image updated successfully")),t(!0)})).catch((function(e){c((0,Z.zb)(e)),y(!1)}))},label:"Save"})]})]})})})),S=t(81806),w=t(36314),k=t(45248),P=t(74815),R=t(22512),C=t(45902),N=function(e){var n,t,i,o,l,s,r=e.tenant,c=e.healthStatus,u=e.loading,d=e.error,v={value:"n/a",unit:""},h={value:"n/a",unit:""},f={value:"n/a",unit:""},g={value:"n/a",unit:""},x={value:"n/a",unit:""};if(null!==(n=r.status)&&void 0!==n&&null!==(t=n.usage)&&void 0!==t&&t.raw){var Z=(0,k.ae)("".concat(r.status.usage.raw),!0).split(" ");v.value=Z[0],v.unit=Z[1]}if(null!==(i=r.status)&&void 0!==i&&null!==(o=i.usage)&&void 0!==o&&o.capacity){var j=(0,k.ae)("".concat(r.status.usage.capacity),!0).split(" ");h.value=j[0],h.unit=j[1]}if(null!==(l=r.status)&&void 0!==l&&null!==(s=l.usage)&&void 0!==s&&s.capacity_usage){var y=(0,k.l5)(r.status.usage.capacity_usage,!0).split(" ");f.value=y[0],f.unit=y[1]}var S=[];if(r.tiers&&0!==r.tiers.length){S=r.tiers.map((function(e){return{value:e.size,variant:e.name}}));var N=r.tiers.filter((function(e){return"internal"===e.type})).reduce((function(e,n){return e+n.size}),0),I=r.tiers.filter((function(e){return"internal"!==e.type})).reduce((function(e,n){return e+n.size}),0),F=(0,k.l5)(I,!0).split(" ");x.value=F[0],x.unit=F[1];var A=(0,k.l5)(N,!0).split(" ");g.value=A[0],g.unit=A[1]}else{var D,E;S=[{value:(null===(D=r.status)||void 0===D||null===(E=D.usage)||void 0===E?void 0:E.capacity_usage)||0,variant:"STANDARD"}]}return(0,b.jsxs)(a.Fragment,{children:[u&&(0,b.jsx)("div",{style:{padding:5},children:(0,b.jsx)(m.ZP,{item:!0,xs:12,style:{textAlign:"center"},children:(0,b.jsx)(p.aNw,{style:{width:40,height:40}})})}),function(){var e,n;return u?null:""!==d?(0,b.jsx)(R.Z,{errorMessage:d,withBreak:!1}):(0,b.jsxs)(m.ZP,{item:!0,xs:12,children:[(0,b.jsx)(P.Z,{totalCapacity:(null===(e=r.status)||void 0===e||null===(n=e.usage)||void 0===n?void 0:n.raw)||0,usedSpaceVariants:S,statusClass:"",render:"bar"}),(0,b.jsxs)(w.Z,{direction:{xs:"column",sm:"row"},spacing:{xs:1,sm:2,md:4},alignItems:"stretch",margin:"0 0 15px 0",children:[(!r.tiers||0===r.tiers.length)&&(0,b.jsx)(a.Fragment,{children:(0,b.jsx)(C.Z,{label:"Internal:",orientation:"row",value:"".concat(f.value," ").concat(f.unit)})}),r.tiers&&r.tiers.length>0&&(0,b.jsxs)(a.Fragment,{children:[(0,b.jsx)(C.Z,{label:"Internal:",orientation:"row",value:"".concat(g.value," ").concat(g.unit)}),(0,b.jsx)(C.Z,{label:"Tiered:",orientation:"row",value:"".concat(x.value," ").concat(x.unit)})]}),c&&(0,b.jsx)(C.Z,{orientation:"row",label:"Health:",value:(0,b.jsx)("span",{className:c,children:(0,b.jsx)(p.J$M,{})})})]})]})}()]})},I=t(50896),F=t(93433),A=t(13400),D=t(42419),E=(0,u.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({domainInline:{display:"flex",marginBottom:15},overlayAction:{marginLeft:10,display:"flex",alignItems:"center","& svg":{width:15,height:15},"& button":{background:"#EAEAEA"}}},d.DF),d.ID))}))((function(e){var n=e.open,t=e.closeModalAndRefresh,o=e.namespace,l=e.idTenant,s=e.domains,r=e.classes,c=(0,j.TL)(),u=(0,a.useState)(!1),d=(0,i.Z)(u,2),v=d[0],g=d[1],y=(0,a.useState)(""),S=(0,i.Z)(y,2),w=S[0],k=S[1],P=(0,a.useState)([""]),R=(0,i.Z)(P,2),C=R[0],N=R[1],I=(0,a.useState)(!0),E=(0,i.Z)(I,2),_=E[0],M=E[1],B=(0,a.useState)([!0]),T=(0,i.Z)(B,2),z=T[0],U=T[1];(0,a.useEffect)((function(){if(s){var e=s.console||"";if(k(e),""!==e){var n=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/);M(n.test(e))}else M(!0);if(s.minio&&s.minio.length>0){N(s.minio);var t=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/),i=s.minio.map((function(e){return""===e.trim()||t.test(e)}));U(i)}}}),[s]);var W=function(){var e=(0,F.Z)(C),n=(0,F.Z)(z);e.push(""),n.push(!0),N(e),U(n)};return(0,b.jsx)(h.Z,{title:"Edit Tenant Domains - ".concat(l),modalOpen:n,onClose:function(){t(!1)},children:(0,b.jsx)(m.ZP,{container:!0,children:(0,b.jsxs)(m.ZP,{item:!0,xs:12,className:r.modalFormScrollable,children:[(0,b.jsxs)(m.ZP,{item:!0,xs:12,className:"".concat(r.configSectionItem),children:[(0,b.jsx)("div",{className:r.containerItem,children:(0,b.jsx)(f.Z,{id:"console_domain",name:"console_domain",onChange:function(e){k(e.target.value),M(e.target.validity.valid)},label:"Console Domain",value:w,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-.\\/]*)?$",error:_?"":"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)"})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{children:"MinIO Domains"}),(0,b.jsx)("div",{children:C.map((function(e,n){return(0,b.jsxs)("div",{className:"".concat(r.domainInline),children:[(0,b.jsx)(f.Z,{id:"minio-domain-".concat(n.toString()),name:"minio-domain-".concat(n.toString()),onChange:function(e){!function(e,n){var t=(0,F.Z)(C);t[n]=e,N(t)}(e.target.value,n),function(e,n){var t=(0,F.Z)(z);t[n]=e,U(t)}(e.target.validity.valid,n)},label:"MinIO Domain ".concat(n+1),value:e,placeholder:"Eg. http://subdomain.domain",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$",error:z[n]?"":"MinIO domain format is incorrect (http|https://subdomain.domain)"}),(0,b.jsx)("div",{className:r.overlayAction,children:(0,b.jsx)(A.Z,{size:"small",onClick:W,disabled:n!==C.length-1,children:(0,b.jsx)(D.Z,{})})}),(0,b.jsx)("div",{className:r.overlayAction,children:(0,b.jsx)(A.Z,{size:"small",onClick:function(){return function(e){var n=C.filter((function(n,t){return t!==e})),t=z.filter((function(n,t){return t!==e}));N(n),U(t)}(n)},disabled:C.length<=1,children:(0,b.jsx)(p.HFL,{})})})]},"minio-domain-key-".concat(n.toString()))}))})]})]}),(0,b.jsxs)(m.ZP,{item:!0,xs:12,className:r.modalButtonBar,children:[(0,b.jsx)(p.zxk,{id:"clear-edit-domain",type:"button",variant:"regular",onClick:function(){k(""),M(!0),N([""]),U([!0])},label:"Clear"}),(0,b.jsx)(p.zxk,{id:"save-domain",type:"submit",variant:"callAction",disabled:v||!_||z.filter((function(e){return!e})).length>0,onClick:function(){g(!0);var e={domains:{console:w,minio:C.filter((function(e){return""!==e.trim()}))}};x.Z.invoke("PUT","/api/v1/namespaces/".concat(o,"/tenants/").concat(l,"/domains"),e).then((function(){g(!1),c((0,Z.y1)("Domains updated successfully")),t(!0)})).catch((function(e){g(!1),c((0,Z.zb)(e))}))},label:"Save"})]})]})})})})),_=t(57689),M=t(82295),B=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"red",n=arguments.length>1?arguments[1]:void 0;return"red"===e?n.redState:"yellow"===e?n.yellowState:"green"===e?n.greenState:n.greyState},T=function(e){var n,t=e.tenant,i=e.classes;return t?(0,b.jsx)(N,{tenant:t,label:"Storage",error:"",loading:!1,healthStatus:B(null===t||void 0===t||null===(n=t.status)||void 0===n?void 0:n.health_status,i)}):null},z=function(e){return e?(0,b.jsx)(p.Yp9,{}):(0,b.jsx)(p.cmQ,{style:{color:"grey"}})},U={display:"flex",justifyContent:"space-between",marginTop:"10px","@media (max-width: 600px)":{flexFlow:"column"}},W={stkProps:{sx:{flex:1,marginRight:10,display:"flex",alignItems:"center",justifyContent:"space-between","@media (max-width: 900px)":{marginRight:"25px"}}},lblProps:{style:{minWidth:100}}},O=(0,u.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({},d.oZ),{},{redState:{color:e.palette.error.main,"& .min-icon":{width:16,height:16,marginRight:4}},yellowState:{color:e.palette.warning.main,"& .min-icon":{width:16,height:16,marginRight:4}},greenState:{color:e.palette.success.main,"& .min-icon":{width:16,height:16,marginRight:4}},greyState:{color:"grey","& .min-icon":{width:16,height:16,marginRight:4}},linkedSection:{color:e.palette.info.main,fontFamily:"'Inter', sans-serif"},autoGeneratedLink:{fontStyle:"italic"}},d.Bz))}))((function(e){var n,t,s,c,u,d,h,f,g,x,Z,w,k,P,R,N,F,A,D,B,O,L,$,G,V=e.classes,H=(0,j.TL)(),K=(0,_.UO)(),Q=K.tenantName,Y=K.tenantNamespace,q=(0,l.v9)((function(e){return e.tenants.tenantInfo})),J=(0,l.v9)((function(e){return r()(e.tenants.tenantInfo,"encryptionEnabled",!1)})),X=(0,l.v9)((function(e){return r()(e.tenants.tenantInfo,"minioTLS",!1)})),ee=(0,l.v9)((function(e){return r()(e.tenants.tenantInfo,"idpAdEnabled",!1)})),ne=(0,l.v9)((function(e){return r()(e.tenants.tenantInfo,"idpOidcEnabled",!1)})),te=(0,a.useState)(0),ie=(0,i.Z)(te,2),oe=ie[0],ae=ie[1],le=(0,a.useState)(0),se=(0,i.Z)(le,2),re=se[0],ce=se[1],ue=(0,a.useState)(0),de=(0,i.Z)(ue,2),me=de[0],ve=de[1],pe=(0,a.useState)(!1),he=(0,i.Z)(pe,2),fe=he[0],ge=he[1],xe=(0,a.useState)(!1),Ze=(0,i.Z)(xe,2),je=Ze[0],be=Ze[1];(0,a.useEffect)((function(){var e,n,t;q&&(ae((null===q||void 0===q||null===(e=q.pools)||void 0===e?void 0:e.length)||0),ve((null===(n=q.pools)||void 0===n?void 0:n.reduce((function(e,n){return e+n.volumes_per_server*n.servers}),0))||0),ce((null===(t=q.pools)||void 0===t?void 0:t.reduce((function(e,n){return e+n.servers}),0))||0))}),[q]);return(0,b.jsxs)(a.Fragment,{children:[fe&&(0,b.jsx)(y,{open:fe,closeModalAndRefresh:function(e){ge(!1),e&&H((0,M.v)())},idTenant:Q||"",namespace:Y||""}),je&&(0,b.jsx)(E,{open:je,idTenant:Q||"",namespace:Y||"",domains:(null===q||void 0===q?void 0:q.domains)||null,closeModalAndRefresh:function(e){be(!1),e&&H((0,M.v)())}}),(0,b.jsx)(I.Z,{separator:!1,children:"Details"}),(0,b.jsx)(T,{tenant:q,classes:V}),(0,b.jsxs)(m.ZP,{container:!0,children:[(0,b.jsxs)(m.ZP,{item:!0,xs:12,sm:12,md:8,children:[(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"State:",value:null===q||void 0===q?void 0:q.currentState})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"MinIO:",value:(0,b.jsx)(S.Z,{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal",wordBreak:"break-all"},onClick:function(){ge(!0)},children:q?q.image:""})})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsxs)("h3",{children:["Domains",(0,b.jsx)(p.zxk,{id:"edit-domains",icon:(0,b.jsx)(p.dY8,{}),onClick:function(){be(!0)}})]})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Console:",value:(0,b.jsxs)(a.Fragment,{children:[null!==q&&void 0!==q&&null!==(n=q.domains)&&void 0!==n&&n.console&&""!==(null===q||void 0===q||null===(t=q.domains)||void 0===t?void 0:t.console)||null!==q&&void 0!==q&&null!==(s=q.endpoints)&&void 0!==s&&s.console?"":"-",(null===q||void 0===q||null===(c=q.endpoints)||void 0===c?void 0:c.console)&&(0,b.jsxs)(a.Fragment,{children:[(0,b.jsx)("a",{href:null===q||void 0===q||null===(u=q.endpoints)||void 0===u?void 0:u.console,target:"_blank",rel:"noopener",className:"".concat(V.linkedSection," ").concat(V.autoGeneratedLink),children:(null===q||void 0===q||null===(d=q.endpoints)||void 0===d?void 0:d.console)||"-"}),(0,b.jsx)("br",{})]}),(null===q||void 0===q||null===(h=q.domains)||void 0===h?void 0:h.console)&&""!==(null===q||void 0===q||null===(f=q.domains)||void 0===f?void 0:f.console)&&(0,b.jsx)("a",{href:(null===q||void 0===q||null===(g=q.domains)||void 0===g?void 0:g.console)||"",target:"_blank",rel:"noopener",className:V.linkedSection,children:(null===q||void 0===q||null===(x=q.domains)||void 0===x?void 0:x.console)||""})]})})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"MinIO Endpoint".concat(null!==q&&void 0!==q&&null!==(Z=q.endpoints)&&void 0!==Z&&Z.minio&&1===(null===q||void 0===q||null===(w=q.endpoints)||void 0===w?void 0:w.minio.length)?"":"s",":"),value:(0,b.jsxs)(a.Fragment,{children:[null!==q&&void 0!==q&&null!==(k=q.domains)&&void 0!==k&&k.minio||null!==q&&void 0!==q&&null!==(P=q.endpoints)&&void 0!==P&&P.minio?"":"-",(null===q||void 0===q||null===(R=q.endpoints)||void 0===R?void 0:R.minio)&&(0,b.jsxs)(a.Fragment,{children:[(0,b.jsx)("a",{href:null===q||void 0===q||null===(N=q.endpoints)||void 0===N?void 0:N.minio,target:"_blank",rel:"noopener",className:"".concat(V.linkedSection," ").concat(V.autoGeneratedLink),children:(null===q||void 0===q||null===(F=q.endpoints)||void 0===F?void 0:F.minio)||"-"}),(0,b.jsx)("br",{})]}),(null===q||void 0===q||null===(A=q.domains)||void 0===A?void 0:A.minio)&&q.domains.minio.map((function(e){return(0,b.jsxs)(a.Fragment,{children:[(0,b.jsx)("a",{href:e,target:"_blank",rel:"noopener",className:V.linkedSection,children:e}),(0,b.jsx)("br",{})]},e)}))]})})})]}),(0,b.jsxs)(m.ZP,{item:!0,xs:12,sm:12,md:4,children:[(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Instances:",value:re})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Clusters:",value:oe,stkProps:{style:{marginRight:47}}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Total Drives:",value:me,stkProps:{style:{marginRight:43}}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Write Quorum:",value:null!==q&&void 0!==q&&null!==(D=q.status)&&void 0!==D&&D.write_quorum?null===q||void 0===q||null===(B=q.status)||void 0===B?void 0:B.write_quorum:0})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Drives Online:",value:null!==q&&void 0!==q&&null!==(O=q.status)&&void 0!==O&&O.drives_online?null===q||void 0===q||null===(L=q.status)||void 0===L?void 0:L.drives_online:0,stkProps:{style:{marginRight:8}}})}),(0,b.jsx)(m.ZP,{item:!0,xs:12,children:(0,b.jsx)(C.Z,{label:"Drives Offline:",value:null!==q&&void 0!==q&&null!==($=q.status)&&void 0!==$&&$.drives_offline?null===q||void 0===q||null===(G=q.status)||void 0===G?void 0:G.drives_offline:0,stkProps:{style:{marginRight:7}}})})]})]}),(0,b.jsx)(I.Z,{children:"Features"}),(0,b.jsxs)(v.Z,{sx:(0,o.Z)({},U),children:[(0,b.jsx)(C.Z,(0,o.Z)({orientation:"row",label:"MinIO TLS:",value:z(X,"tenant-tls")},W)),(0,b.jsx)(C.Z,(0,o.Z)({orientation:"row",label:"AD/LDAP:",value:z(ee,"tenant-sts")},W)),(0,b.jsx)(C.Z,(0,o.Z)({orientation:"row",label:"Encryption:",value:z(J,"tenant-enc")},W))]}),(0,b.jsx)(v.Z,{sx:(0,o.Z)({},U),children:(0,b.jsx)(C.Z,(0,o.Z)({orientation:"row",label:"OpenID:",value:z(ne,"tenant-oidc")},W))})]})}))},22512:function(e,n,t){var i=t(72791),o=t(20890),a=t(11135),l=t(25787),s=t(80184);n.Z=(0,l.Z)((function(e){var n;return(0,a.Z)({errorBlock:{color:(null===(n=e.palette)||void 0===n?void 0:n.error.main)||"#C83B51"}})}))((function(e){var n=e.classes,t=e.errorMessage,a=e.withBreak,l=void 0===a||a;return(0,s.jsxs)(i.Fragment,{children:[l&&(0,s.jsx)("br",{}),(0,s.jsx)(o.Z,{component:"p",variant:"body1",className:n.errorBlock,children:t})]})}))},42419:function(e,n,t){var i=t(64836);n.Z=void 0;var o=i(t(45649)),a=t(80184),l=(0,o.default)((0,a.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=l},36314:function(e,n,t){t.d(n,{Z:function(){return R}});var i=t(4942),o=t(63366),a=t(87462),l=t(72791),s=t(28182),r=t(82466),c=t(94419),u=t(21217),d=t(93457),m=t(86083),v=t(78519),p=t(85080),h=t(51184),f=t(45682),g=t(80184),x=["component","direction","spacing","divider","children","className","useFlexGap"],Z=(0,p.Z)(),j=(0,d.Z)("div",{name:"MuiStack",slot:"Root",overridesResolver:function(e,n){return n.root}});function b(e){return(0,m.Z)({props:e,name:"MuiStack",defaultTheme:Z})}function y(e,n){var t=l.Children.toArray(e).filter(Boolean);return t.reduce((function(e,i,o){return e.push(i),o0?c[t[n-1]]:"column";c[e]=i}}));o=(0,r.Z)(o,(0,h.k9)({theme:t},u,(function(e,t){return n.useFlexGap?{gap:(0,f.NA)(l,e)}:{"& > :not(style) + :not(style)":(0,i.Z)({margin:0},"margin".concat((o=t?c[t]:n.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[o])),(0,f.NA)(l,e))};var o})))}return o=(0,h.dt)(t.breakpoints,o)};var w=t(66934),k=t(31402),P=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.createStyledComponent,t=void 0===n?j:n,i=e.useThemeProps,r=void 0===i?b:i,d=e.componentName,m=void 0===d?"MuiStack":d,p=t(S),h=l.forwardRef((function(e,n){var t=r(e),i=(0,v.Z)(t),l=i.component,d=void 0===l?"div":l,h=i.direction,f=void 0===h?"column":h,Z=i.spacing,j=void 0===Z?0:Z,b=i.divider,S=i.children,w=i.className,k=i.useFlexGap,P=void 0!==k&&k,R=(0,o.Z)(i,x),C={direction:f,spacing:j,useFlexGap:P},N=(0,c.Z)({root:["root"]},(function(e){return(0,u.Z)(m,e)}),{});return(0,g.jsx)(p,(0,a.Z)({as:d,ownerState:C,ref:n,className:(0,s.Z)(N.root,w)},R,{children:b?y(S,b):S}))}));return h}({createStyledComponent:(0,w.ZP)("div",{name:"MuiStack",slot:"Root",overridesResolver:function(e,n){return n.root}}),useThemeProps:function(e){return(0,k.Z)({props:e,name:"MuiStack"})}}),R=P},93457:function(e,n,t){var i=(0,t(44046).ZP)();n.Z=i},23688:function(e,n,t){function i(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function o(e){this.setState(function(n){var t=this.constructor.getDerivedStateFromProps(e,n);return null!==t&&void 0!==t?t:null}.bind(this))}function a(e,n){try{var t=this.props,i=this.state;this.props=e,this.state=n,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(t,i)}finally{this.props=t,this.state=i}}function l(e){var n=e.prototype;if(!n||!n.isReactComponent)throw new Error("Can only polyfill class components");if("function"!==typeof e.getDerivedStateFromProps&&"function"!==typeof n.getSnapshotBeforeUpdate)return e;var t=null,l=null,s=null;if("function"===typeof n.componentWillMount?t="componentWillMount":"function"===typeof n.UNSAFE_componentWillMount&&(t="UNSAFE_componentWillMount"),"function"===typeof n.componentWillReceiveProps?l="componentWillReceiveProps":"function"===typeof n.UNSAFE_componentWillReceiveProps&&(l="UNSAFE_componentWillReceiveProps"),"function"===typeof n.componentWillUpdate?s="componentWillUpdate":"function"===typeof n.UNSAFE_componentWillUpdate&&(s="UNSAFE_componentWillUpdate"),null!==t||null!==l||null!==s){var r=e.displayName||e.name,c="function"===typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+r+" uses "+c+" but also contains the following legacy lifecycles:"+(null!==t?"\n "+t:"")+(null!==l?"\n "+l:"")+(null!==s?"\n "+s:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"===typeof e.getDerivedStateFromProps&&(n.componentWillMount=i,n.componentWillReceiveProps=o),"function"===typeof n.getSnapshotBeforeUpdate){if("function"!==typeof n.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");n.componentWillUpdate=a;var u=n.componentDidUpdate;n.componentDidUpdate=function(e,n,t){var i=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:t;u.call(this,e,n,i)}}return e}t.r(n),t.d(n,{polyfill:function(){return l}}),i.__suppressDeprecationWarning=!0,o.__suppressDeprecationWarning=!0,a.__suppressDeprecationWarning=!0}}]); -//# sourceMappingURL=30.80b393c6.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/30.80b393c6.chunk.js.map b/web-app/build/static/js/30.80b393c6.chunk.js.map deleted file mode 100644 index 48c4bd74d86..00000000000 --- a/web-app/build/static/js/30.80b393c6.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/30.80b393c6.chunk.js","mappings":"qMAkDA,KAAeA,EAAAA,EAAAA,IA5BA,SAACC,GAAY,OAC1BC,EAAAA,EAAAA,GAAa,CACXC,KAAM,CACJC,QAAS,EACTC,OAAQ,EACRC,OAAQ,EACRC,gBAAiB,cACjBC,eAAgB,YAChBC,OAAQ,UACRC,SAAU,UACVC,MAAOV,EAAMW,QAAQC,KAAKC,KAC1BC,WAAY,sBAEb,GAeL,EARgB,SAAHC,GAAkD,IAA5CC,EAAOD,EAAPC,QAASC,EAAQF,EAARE,SAAaC,GAAIC,EAAAA,EAAAA,GAAAJ,EAAAK,GAC3C,OACEC,EAAAA,EAAAA,KAAA,UAAAC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYJ,GAAI,IAAEK,UAAWP,EAAQd,KAAKe,SACvCA,IAGP,G,qNC6HA,KAAelB,EAAAA,EAAAA,IAlIA,SAACC,GAAY,OAC1BC,EAAAA,EAAAA,IAAYqB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACTE,EAAAA,IAAkB,IACrBC,QAAS,CACPtB,QAAS,GACTuB,cAAe,GAEjBC,iBAAkB,CAChBC,MAAO,OACPC,SAAU,MAETC,EAAAA,IACF,GAsHL,EApHqB,SAAHf,GASE,IARlBgB,EAAOhB,EAAPgB,QACAC,EAASjB,EAATiB,UACAC,EAAKlB,EAALkB,MACAhB,EAAQF,EAARE,SACAD,EAAOD,EAAPC,QAAOkB,EAAAnB,EACPoB,UAAAA,OAAS,IAAAD,GAAOA,EAChBE,EAAgBrB,EAAhBqB,iBAAgBC,EAAAtB,EAChBuB,UAAAA,OAAS,IAAAD,EAAG,KAAIA,EAEVE,GAAWC,EAAAA,EAAAA,MACjBC,GAAwCC,EAAAA,EAAAA,WAAkB,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAzDI,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAE9BI,GAAoBC,EAAAA,EAAAA,KACxB,SAACC,GAAe,OAAKA,EAAMC,OAAOC,aAAa,KAGjDC,EAAAA,EAAAA,YAAU,WACRb,GAASc,EAAAA,EAAAA,IAAqB,IAChC,GAAG,CAACd,KAEJa,EAAAA,EAAAA,YAAU,WACR,GAAIL,EAAmB,CACrB,GAAkC,KAA9BA,EAAkBO,QAEpB,YADAR,GAAgB,GAIa,UAA3BC,EAAkBQ,MACpBT,GAAgB,EAEpB,CACF,GAAG,CAACC,IAEJ,IAKMS,EAAarB,EACf,CACEnB,QAAS,CACPyC,MAAOzC,EAAQW,mBAGnB,CAAEE,SAAU,KAAe6B,WAAW,GAEtCJ,EAAU,GAYd,OAVIP,IACFO,EAAUP,EAAkBY,kBAEa,KAAvCZ,EAAkBY,kBAClBZ,EAAkBY,iBAAiBC,OAAS,KAE5CN,EAAUP,EAAkBO,WAK9BO,EAAAA,EAAAA,MAACC,EAAAA,GAAMxC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACLyC,KAAM/B,EACNhB,QAASA,GACLwC,GAAU,IACdQ,OAAQ,QACRjC,QAAS,SAACkC,EAAOC,GACA,kBAAXA,GACFnC,GAEJ,EACAR,UAAWP,EAAQd,KAAKe,SAAA,EAExB4C,EAAAA,EAAAA,MAACM,EAAAA,EAAW,CAAC5C,UAAWP,EAAQiB,MAAMhB,SAAA,EACpC4C,EAAAA,EAAAA,MAAA,OAAKtC,UAAWP,EAAQoD,UAAUnD,SAAA,CAC/BqB,EAAU,IAAEL,MAEfZ,EAAAA,EAAAA,KAAA,OAAKE,UAAWP,EAAQqD,eAAepD,UACrCI,EAAAA,EAAAA,KAACiD,EAAAA,EAAU,CACT,aAAW,QACXC,GAAI,QACJhD,UAAWP,EAAQwD,YACnBC,QAAS1C,EACT2C,eAAa,EACbC,KAAK,QAAO1D,UAEZI,EAAAA,EAAAA,KAACuD,EAAAA,EAAS,YAKhBvD,EAAAA,EAAAA,KAACwD,EAAAA,EAAS,CAACC,SAAS,KACpBzD,EAAAA,EAAAA,KAAC0D,EAAAA,EAAQ,CACPhB,KAAMlB,EACNtB,UAAWP,EAAQgE,cACnBjD,QAAS,WA3Dbe,GAAgB,GAChBP,GAASc,EAAAA,EAAAA,IAAqB,IA4D1B,EACAC,QAASA,EACT2B,aAAc,CACZ1D,UAAU,GAAD2D,OAAKlE,EAAQmE,SAAQ,KAAAD,OAC5BnC,GAAgD,UAA3BA,EAAkBQ,KACnCvC,EAAQoE,cACR,KAGRC,iBACEtC,GAAgD,UAA3BA,EAAkBQ,KAAmB,IAAQ,OAGtElC,EAAAA,EAAAA,KAACiE,EAAAA,EAAa,CAAC/D,UAAWa,EAAmB,GAAKpB,EAAQS,QAAQR,SAC/DA,OAIT,G,uEC3IA,IApBuB,SAAHF,GAOQ,IAADwE,EAAAxE,EANzByE,MAAAA,OAAK,IAAAD,EAAG,KAAIA,EAAAE,EAAA1E,EACZ2E,MAAAA,OAAK,IAAAD,EAAG,IAAGA,EAAAE,EAAA5E,EACX6E,YAAAA,OAAW,IAAAD,EAAG,SAAQA,EAAAE,EAAA9E,EACtB+E,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAhF,EACbiF,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAlF,EACbmF,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAEb,OACEpC,EAAAA,EAAAA,MAACsC,EAAAA,GAAK7E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAC8E,UAAW,CAAEC,GAAI,SAAUC,GAAIV,IAAmBE,GAAQ,IAAA7E,SAAA,EAC/DI,EAAAA,EAAAA,KAAA,SAAAC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAOiF,MAAO,CAAEC,YAAa,EAAGC,WAAY,MAAWT,GAAQ,IAAA/E,SAC5DuE,MAEHnE,EAAAA,EAAAA,KAAA,SAAAC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAOiF,MAAO,CAAEC,YAAa,EAAGC,WAAY,MAAWP,GAAQ,IAAAjF,SAC5DyE,QAIT,C,mJCmCA,EAnCiB,SAAH3E,GAII,IAHhB2F,EAAU3F,EAAV2F,WACAC,EAAS5F,EAAT4F,UAASC,EAAA7F,EACT8F,QAAAA,OAAO,IAAAD,EAAG,UAASA,EAEnB,OACEvF,EAAAA,EAAAA,KAAA,OACEkF,MAAO,CACL3E,MAAO,OACPkF,OAAQ,GACRxG,gBAAiBuG,EACjBE,aAAc,GACdC,QAAS,OACTC,mBAAoB,OACpBC,SAAU,UACVjG,SAED0F,EAAUQ,KAAI,SAACC,EAAaC,GAC3B,IAAMC,EAAsC,IAApBF,EAAY1B,MAAegB,EACnD,OACErF,EAAAA,EAAAA,KAAA,OAEEkF,MAAO,CACL3E,MAAM,GAADsD,OAAKoC,EAAc,KACxBR,OAAQ,OACRxG,gBAAiB8G,EAAY1G,MAC7BuG,mBAAoB,SACpB,YAAA/B,OANemC,EAAME,YAS7B,KAGN,ECgIA,EAjKuB,SAAHxG,GAKI,IAJtByG,EAAazG,EAAbyG,cACAC,EAAiB1G,EAAjB0G,kBACAC,EAAW3G,EAAX2G,YAAWC,EAAA5G,EACX6G,OAAAA,OAAM,IAAAD,EAAG,MAAKA,EAERE,EAAS,CACb,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGIC,EAAU,UAEVC,EAAiBN,EAAkBO,QAAO,SAACC,EAAKC,GACpD,OAAOD,EAAMC,EAAUxC,KACzB,GAAG,GAEGyC,EAAaX,EAAgBO,EAE/BK,EAA6B,GAE3BC,EAAeZ,EAAkBa,MACrC,SAACC,GAAI,MAAsB,aAAjBA,EAAKC,OAAsB,KAClC,CACH9C,MAAO,EACP8C,QAAS,SAGPf,EAAkB7D,OAAS,GAG7BwE,EAAY,CACV,CAAE1C,MAHqBqC,EAAiBM,EAAa3C,MAG1BhF,MAAO,UAAW8E,MAAO,sBAGtD4C,EAAYX,EACTgB,QAAO,SAACD,GAAO,MAAyB,aAApBA,EAAQA,OAAsB,IAClDrB,KAAI,SAACqB,EAASnB,GACb,MAAO,CACL3B,MAAO8C,EAAQ9C,MACfhF,MAAOmH,EAAOR,GACd7B,MAAM,UAADN,OAAYsD,EAAQA,SAE7B,IAGJ,IAAIE,EAAoB,UAElBC,EAAuC,IAArBN,EAAa3C,MAAe8B,EAEhDmB,GAAkB,GACpBD,EAAoB,UACXC,GAAkB,KAC3BD,EAAoB,WAGtB,IAAME,EAA2B,CAC/B,CACElD,MAAO2C,EAAa3C,MACpBhF,MAAOgI,EACPlD,MAAO,yBACRN,QAAA2D,EAAAA,EAAAA,GACET,GAAS,CACZ,CACE1C,MAAOyC,EACPzH,MAAkB,QAAXkH,EAAmBE,EAAU,cACpCtC,MAAO,iBAIX,GAAe,QAAXoC,EAAkB,CACpB,IAAMkB,EAAwCF,EAAWzB,KAAI,SAAC4B,GAC5D,MAAO,CACLrD,MAAOqD,EAAQrD,MACfhF,MAAOqI,EAAQrI,MACfsI,SAAUD,EAAQvD,MAEtB,IAEA,OACEnE,EAAAA,EAAAA,KAAA,OAAKkF,MAAO,CAAE3E,MAAO,OAAQqH,aAAc,IAAKhI,UAC9CI,EAAAA,EAAAA,KAAC6H,EAAQ,CACPxC,WAAYc,EACZb,UAAWmC,EACXjC,QAASiB,KAIjB,CAEA,OACEjE,EAAAA,EAAAA,MAAA,OAAK0C,MAAO,CAAE4C,SAAU,WAAYvH,MAAO,IAAKkF,OAAQ,KAAM7F,SAAA,EAC5DI,EAAAA,EAAAA,KAAA,OACEkF,MAAO,CAAE4C,SAAU,WAAYC,OAAQ,EAAGC,IAAK,GAAIC,OAAQ,KAC3D/H,UAAWmG,EAAYzG,UAEvBI,EAAAA,EAAAA,KAACkI,EAAAA,IAAU,CACThD,MAAO,CACLlG,OAAQ,iBACR0G,aAAc,OACdnF,MAAO,GACPkF,OAAQ,SAIdzF,EAAAA,EAAAA,KAAA,QACEkF,MAAO,CACL4C,SAAU,WACVE,IAAK,MACLG,KAAM,MACNC,UAAW,wBACXhD,WAAY,OACZ/F,MAAO,OACPD,SAAU,IACVQ,SAEAyI,MAAM3B,GAAiD,OAA/B4B,EAAAA,EAAAA,IAAa5B,MAEzC1G,EAAAA,EAAAA,KAAA,OAAAJ,UACE4C,EAAAA,EAAAA,MAAC+F,EAAAA,EAAQ,CAAChI,MAAO,IAAKkF,OAAQ,IAAI7F,SAAA,EAChCI,EAAAA,EAAAA,KAACwI,EAAAA,EAAG,CACFC,KAAM,CAAC,CAAEpE,MAAO,MAChBqE,GAAI,MACJC,GAAI,MACJC,QAAQ,QACRC,YAAa,GACbC,YAAa,GACbC,KAAMtC,EACNuC,mBAAmB,EACnBC,OAAQ,UAEVjJ,EAAAA,EAAAA,KAACwI,EAAAA,EAAG,CACFC,KAAMlB,EACNmB,GAAI,MACJC,GAAI,MACJC,QAAQ,QACRC,YAAa,GACbC,YAAa,GAAGlJ,SAEf2H,EAAWzB,KAAI,SAACoD,EAAOlD,GAAK,OAC3BhG,EAAAA,EAAAA,KAACmJ,EAAAA,EAAI,CAEHJ,KAAMG,EAAM7J,MACZ4J,OAAQ,QAAO,gBAAApF,OAFMmC,GAGrB,aAOhB,C,uRC2DA,GAAetH,EAAAA,EAAAA,IA3MA,SAACC,GAAY,OAC1BC,EAAAA,EAAAA,IAAYqB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CACXmJ,SAAU,CACRhK,SAAU,KAETiK,EAAAA,IACAC,EAAAA,IACF,GAoML,EAlM0B,SAAH5J,GAMI,IALzBgD,EAAIhD,EAAJgD,KACA6G,EAAoB7J,EAApB6J,qBACAC,EAAS9J,EAAT8J,UACAC,EAAQ/J,EAAR+J,SACA9J,EAAOD,EAAPC,QAEMuB,GAAWC,EAAAA,EAAAA,MACjBC,GAAkCC,EAAAA,EAAAA,WAAkB,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnDsI,EAASpI,EAAA,GAAEqI,EAAYrI,EAAA,GAC9BsI,GAAoCvI,EAAAA,EAAAA,UAAiB,IAAGwI,GAAAtI,EAAAA,EAAAA,GAAAqI,EAAA,GAAjDE,EAAUD,EAAA,GAAEE,EAAaF,EAAA,GAChCG,GAA0C3I,EAAAA,EAAAA,WAAkB,GAAM4I,GAAA1I,EAAAA,EAAAA,GAAAyI,EAAA,GAA3DE,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GACtCG,GACE/I,EAAAA,EAAAA,UAAiB,IAAGgJ,GAAA9I,EAAAA,EAAAA,GAAA6I,EAAA,GADfE,EAAqBD,EAAA,GAAEE,EAAwBF,EAAA,GAEtDG,GACEnJ,EAAAA,EAAAA,UAAiB,IAAGoJ,GAAAlJ,EAAAA,EAAAA,GAAAiJ,EAAA,GADfE,EAAqBD,EAAA,GAAEE,EAAwBF,EAAA,GAEtDG,GACEvJ,EAAAA,EAAAA,UAAiB,IAAGwJ,GAAAtJ,EAAAA,EAAAA,GAAAqJ,EAAA,GADfE,EAAqBD,EAAA,GAAEE,EAAwBF,EAAA,GAEtDG,GAA8C3J,EAAAA,EAAAA,WAAkB,GAAK4J,GAAA1J,EAAAA,EAAAA,GAAAyJ,EAAA,GAA9DE,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAEpCG,GAAgBC,EAAAA,EAAAA,cACpB,SAACC,GACC,IAAMC,EAAU,IAAIC,OAAO,2BAE3B,GACO,eADCF,EAEJH,EAAmBI,EAAQE,KAAK3B,GAGtC,GACA,CAACA,KAGH/H,EAAAA,EAAAA,YAAU,WACRqJ,EAAc,aAChB,GAAG,CAACtB,EAAYsB,IAoDhB,OACEpL,EAAAA,EAAAA,KAAC0L,EAAAA,EAAY,CACX9K,MAAO,uBACPD,UAAW+B,EACXhC,QAtDgB,WAClB6I,GAAqB,EACvB,EAoDyB3J,UAErB4C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACC,WAAS,EAAAhM,SAAA,EACb4C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQmM,oBAAoBlM,SAAA,EACxDI,EAAAA,EAAAA,KAAA,OAAKE,UAAWP,EAAQyJ,SAASxJ,SAAC,mGAIlCI,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQoM,aAAanM,UACjDI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd3H,MAAOyF,EACP3F,MAAO,gBACPjB,GAAI,aACJ+I,KAAM,aACNC,YAAa,gDACbC,SAAU,SAACC,GACTrC,EAAcqC,EAAEC,OAAOhI,MACzB,OAGJrE,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQoM,aAAanM,UACjDI,EAAAA,EAAAA,KAACsM,EAAAA,EAAiB,CAChBjI,MAAM,gBACNnB,GAAG,mBACH+I,KAAK,mBACLM,QAASrC,EACTiC,SAAU,SAACC,GACTjC,GAAkBD,EACpB,EACA/F,MAAO,4BACPqI,gBAAiB,CAAC,MAAO,UAG5BtC,IACC1H,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,EACPI,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQoM,aAAanM,UACjDI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd3H,MAAOiG,EACPnG,MAAO,WACPjB,GAAI,gBACJ+I,KAAM,gBACNC,YAAa,mCACbC,SAAU,SAACC,GACT7B,EAAyB6B,EAAEC,OAAOhI,MACpC,OAGJrE,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQoM,aAAanM,UACjDI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd3H,MAAOqG,EACPvG,MAAO,WACPjB,GAAI,wBACJ+I,KAAM,wBACNC,YAAa,gCACbC,SAAU,SAACC,GACTzB,EAAyByB,EAAEC,OAAOhI,MACpC,OAGJrE,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQoM,aAAanM,UACjDI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd3H,MAAOyG,EACP3G,MAAO,WACPjB,GAAI,wBACJ+I,KAAM,wBACNC,YAAa,gCACbC,SAAU,SAACC,GACTrB,EAAyBqB,EAAEC,OAAOhI,MACpC,aAMV7B,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQ+M,eAAe9M,SAAA,EACnDI,EAAAA,EAAAA,KAAC2M,EAAAA,IAAM,CACLzJ,GAAI,QACJiE,QAAQ,UACR/D,QAlIQ,WAChB2G,EAAc,IACdI,GAAiB,GACjBI,EAAyB,IACzBI,EAAyB,IACzBI,EAAyB,GAC3B,EA6HU5G,MAAM,WAERnE,EAAAA,EAAAA,KAAC2M,EAAAA,IAAM,CACLzJ,GAAI,cACJhB,KAAK,SACLiF,QAAQ,aACRyF,UACG1B,GACAhB,IACmC,KAAjCI,EAAsBuC,QACY,KAAjCnC,EAAsBmC,QACW,KAAjC/B,EAAsB+B,SAC1BnD,EAEFtG,QAzIe,WACvBuG,GAAa,GAEb,IAAImD,EAAU,CACZC,MAAOjD,GAGT,GAAII,EAAe,CACjB,IAAM8C,EAAgB,CACpBC,eAAgB,CACdD,SAAU1C,EACV4C,SAAUxC,EACVyC,SAAUrC,IAGdgC,GAAO7M,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACF6M,GACAE,EAEP,CAEAI,EAAAA,EACGC,OACC,MAAM,sBAADxJ,OACiB2F,EAAS,aAAA3F,OAAY4F,GAC3CqD,GAEDQ,MAAK,WACJ3D,GAAa,GACbzI,GAASqM,EAAAA,EAAAA,IAAmB,+BAC5BhE,GAAqB,EACvB,IACCiE,OAAM,SAACC,GACNvM,GAASwM,EAAAA,EAAAA,IAA0BD,IACnC9D,GAAa,EACf,GACJ,EAsGUxF,MAAO,gBAMnB,I,kECpFA,EA9IwB,SAAHzE,GAKI,IAADiO,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAJtBC,EAAMvO,EAANuO,OACAC,EAAYxO,EAAZwO,aACAC,EAAOzO,EAAPyO,QACAV,EAAK/N,EAAL+N,MAEIW,EAAiB,CAAE/J,MAAO,MAAOgK,KAAM,IACvCC,EAAsB,CAAEjK,MAAO,MAAOgK,KAAM,IAC5CE,EAAkB,CAAElK,MAAO,MAAOgK,KAAM,IACxCG,EAAsB,CAAEnK,MAAO,MAAOgK,KAAM,IAC5CI,EAAuB,CAAEpK,MAAO,MAAOgK,KAAM,IAEjD,GAAiB,QAAjBV,EAAIM,EAAOS,cAAM,IAAAf,GAAO,QAAPC,EAAbD,EAAegB,aAAK,IAAAf,GAApBA,EAAsBQ,IAAK,CAC7B,IACMQ,GADIC,EAAAA,EAAAA,IAAU,GAADhL,OAAIoK,EAAOS,OAAOC,MAAMP,MAAO,GAClCU,MAAM,KACtBV,EAAI/J,MAAQuK,EAAM,GAClBR,EAAIC,KAAOO,EAAM,EACnB,CACA,GAAiB,QAAjBf,EAAII,EAAOS,cAAM,IAAAb,GAAO,QAAPC,EAAbD,EAAec,aAAK,IAAAb,GAApBA,EAAsBQ,SAAU,CAClC,IACMM,GADIC,EAAAA,EAAAA,IAAU,GAADhL,OAAIoK,EAAOS,OAAOC,MAAML,WAAY,GACvCQ,MAAM,KACtBR,EAASjK,MAAQuK,EAAM,GACvBN,EAASD,KAAOO,EAAM,EACxB,CACA,GAAiB,QAAjBb,EAAIE,EAAOS,cAAM,IAAAX,GAAO,QAAPC,EAAbD,EAAeY,aAAK,IAAAX,GAApBA,EAAsBe,eAAgB,CACxC,IACMH,GADItG,EAAAA,EAAAA,IAAa2F,EAAOS,OAAOC,MAAMI,gBAAgB,GAC3CD,MAAM,KACtBP,EAAKlK,MAAQuK,EAAM,GACnBL,EAAKF,KAAOO,EAAM,EACpB,CAEA,IAAII,EAAkC,GACtC,GAAKf,EAAOgB,OAAiC,IAAxBhB,EAAOgB,MAAM1M,OAI3B,CACLyM,EAAgBf,EAAOgB,MAAMnJ,KAAI,SAACoJ,GAChC,MAAO,CAAE7K,MAAO6K,EAAW5L,KAAO6D,QAAS+H,EAAWjD,KACxD,IACA,IAAIkD,EAAgBlB,EAAOgB,MACxB7H,QAAO,SAAC8H,GACP,MAA2B,aAApBA,EAAWhN,IACpB,IACCyE,QAAO,SAACyI,EAAKF,GAAU,OAAKE,EAAMF,EAAW5L,IAAK,GAAE,GACnD+L,EAAcpB,EAAOgB,MACtB7H,QAAO,SAAC8H,GACP,MAA2B,aAApBA,EAAWhN,IACpB,IACCyE,QAAO,SAACyI,EAAKF,GAAU,OAAKE,EAAMF,EAAW5L,IAAK,GAAE,GAGjDsL,GADItG,EAAAA,EAAAA,IAAa+G,GAAa,GACpBP,MAAM,KACtBL,EAAUpK,MAAQuK,EAAM,GACxBH,EAAUJ,KAAOO,EAAM,GAEvB,IACMU,GADKhH,EAAAA,EAAAA,IAAa6G,GAAe,GACdL,MAAM,KAC/BN,EAASnK,MAAQiL,EAAc,GAC/Bd,EAASH,KAAOiB,EAAc,EAChC,KA5BgD,CAAC,IAADC,EAAAC,EAC9CR,EAAgB,CACd,CAAE3K,OAAoB,QAAbkL,EAAAtB,EAAOS,cAAM,IAAAa,GAAO,QAAPC,EAAbD,EAAeZ,aAAK,IAAAa,OAAP,EAAbA,EAAsBT,iBAAkB,EAAG5H,QAAS,YAEjE,CAsFA,OACE3E,EAAAA,EAAAA,MAACiN,EAAAA,SAAc,CAAA7P,SAAA,CACZuO,IACCnO,EAAAA,EAAAA,KAAA,OAAKkF,MAAO,CAAEpG,QAAS,GAAIc,UACzBI,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CACHE,MAAI,EACJ7G,GAAI,GACJE,MAAO,CACLwK,UAAW,UACX9P,UAEFI,EAAAA,EAAAA,KAAC2P,EAAAA,IAAM,CAACzK,MAAO,CAAE3E,MAAO,GAAIkF,OAAQ,UAvEtB,WACP,IAADmK,EAAAC,EAAd,OAAK1B,EAwDE,KAvDY,KAAVV,GACLzN,EAAAA,EAAAA,KAAC8P,EAAAA,EAAU,CAACC,aAActC,EAAOuC,WAAW,KAE5CxN,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,SAAA,EAChBI,EAAAA,EAAAA,KAACiQ,EAAAA,EAAc,CACb9J,eAA4B,QAAbyJ,EAAA3B,EAAOS,cAAM,IAAAkB,GAAO,QAAPC,EAAbD,EAAejB,aAAK,IAAAkB,OAAP,EAAbA,EAAsBzB,MAAO,EAC5ChI,kBAAmB4I,EACnB3I,YAAa,GACbE,OAAQ,SAEV/D,EAAAA,EAAAA,MAACsC,EAAAA,EAAK,CACJC,UAAW,CAAEC,GAAI,SAAUC,GAAI,OAC/BiL,QAAS,CAAElL,GAAI,EAAGC,GAAI,EAAGkL,GAAI,GAC7BC,WAAY,UACZrR,OAAQ,aAAaa,SAAA,GAElBqO,EAAOgB,OAAiC,IAAxBhB,EAAOgB,MAAM1M,UAC9BvC,EAAAA,EAAAA,KAACyM,EAAAA,SAAQ,CAAA7M,UACPI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,YACPI,YAAa,MACbF,MAAK,GAAAR,OAAK0K,EAAKlK,MAAK,KAAAR,OAAI0K,EAAKF,UAIlCJ,EAAOgB,OAAShB,EAAOgB,MAAM1M,OAAS,IACrCC,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,EACPI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,YACPI,YAAa,MACbF,MAAK,GAAAR,OAAK2K,EAASnK,MAAK,KAAAR,OAAI2K,EAASH,SAEvCrO,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,UACPI,YAAa,MACbF,MAAK,GAAAR,OAAK4K,EAAUpK,MAAK,KAAAR,OAAI4K,EAAUJ,WAI5CH,IACClO,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACb9L,YAAa,MACbJ,MAAO,UACPE,OACErE,EAAAA,EAAAA,KAAA,QAAME,UAAWgO,EAAatO,UAC5BI,EAAAA,EAAAA,KAACkI,EAAAA,IAAU,aAW7B,CAiBKoI,KAGP,E,4CCwJA,GAAe5R,EAAAA,EAAAA,IAvQA,SAACC,GAAY,OAC1BC,EAAAA,EAAAA,IAAYqB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CACXsQ,aAAc,CACZ5K,QAAS,OACTiC,aAAc,IAEhB4I,cAAe,CACbC,WAAY,GACZ9K,QAAS,OACTyK,WAAY,SACZ,QAAS,CACP7P,MAAO,GACPkF,OAAQ,IAEV,WAAY,CACViL,WAAY,aAGbrH,EAAAA,IACAC,EAAAA,IACF,GAmPL,EAjPoB,SAAH5J,GAOI,IANnBgD,EAAIhD,EAAJgD,KACA6G,EAAoB7J,EAApB6J,qBACAC,EAAS9J,EAAT8J,UACAC,EAAQ/J,EAAR+J,SACAkH,EAAOjR,EAAPiR,QACAhR,EAAOD,EAAPC,QAEMuB,GAAWC,EAAAA,EAAAA,MACjBC,GAAkCC,EAAAA,EAAAA,WAAkB,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnDsI,EAASpI,EAAA,GAAEqI,EAAYrI,EAAA,GAC9BsI,GAA0CvI,EAAAA,EAAAA,UAAiB,IAAGwI,GAAAtI,EAAAA,EAAAA,GAAAqI,EAAA,GAAvDgH,EAAa/G,EAAA,GAAEgH,EAAgBhH,EAAA,GACtCG,GAAwC3I,EAAAA,EAAAA,UAAmB,CAAC,KAAI4I,GAAA1I,EAAAA,EAAAA,GAAAyI,EAAA,GAAzD8G,EAAY7G,EAAA,GAAE8G,EAAe9G,EAAA,GACpCG,GAAoD/I,EAAAA,EAAAA,WAAkB,GAAKgJ,GAAA9I,EAAAA,EAAAA,GAAA6I,EAAA,GAApE4G,EAAkB3G,EAAA,GAAE4G,EAAqB5G,EAAA,GAChDG,GAAgDnJ,EAAAA,EAAAA,UAAoB,EAAC,IAAMoJ,GAAAlJ,EAAAA,EAAAA,GAAAiJ,EAAA,GAApE0G,EAAgBzG,EAAA,GAAE0G,EAAmB1G,EAAA,IAE5C1I,EAAAA,EAAAA,YAAU,WACR,GAAI4O,EAAS,CACX,IAAMS,EAAmBT,EAAQU,SAAW,GAG5C,GAFAR,EAAiBO,GAEQ,KAArBA,EAAyB,CAE3B,IAAME,EAAgB,IAAI9F,OACxB,mEAGFyF,EAAsBK,EAAc7F,KAAK2F,GAC3C,MACEH,GAAsB,GAGxB,GAAIN,EAAQY,OAASZ,EAAQY,MAAMhP,OAAS,EAAG,CAC7CwO,EAAgBJ,EAAQY,OAExB,IAAMC,EAAc,IAAIhG,OACtB,8CAGIiG,EAAqBd,EAAQY,MAAMzL,KAAI,SAAC4L,GAC5C,MAAsB,KAAlBA,EAAO7E,QACF2E,EAAY/F,KAAKiG,EAI5B,IAEAP,EAAoBM,EACtB,CACF,CACF,GAAG,CAACd,IAEJ,IA4CMgB,EAAoB,WACxB,IAAMC,GAAYpK,EAAAA,EAAAA,GAAOsJ,GACnBe,GAAgBrK,EAAAA,EAAAA,GAAO0J,GAE7BU,EAAaE,KAAK,IAClBD,EAAiBC,MAAK,GAEtBf,EAAgBa,GAChBT,EAAoBU,EACtB,EAqBA,OACE7R,EAAAA,EAAAA,KAAC0L,EAAAA,EAAY,CACX9K,MAAK,yBAAAiD,OAA2B4F,GAChC9I,UAAW+B,EACXhC,QA9EgB,WAClB6I,GAAqB,EACvB,EA4EyB3J,UAErBI,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACC,WAAS,EAAAhM,UACb4C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQmM,oBAAoBlM,SAAA,EACxD4C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAS,GAAA2D,OAAKlE,EAAQoS,mBAAoBnS,SAAA,EAC3DI,EAAAA,EAAAA,KAAA,OAAKE,UAAWP,EAAQqS,cAAcpS,UACpCI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd9I,GAAG,iBACH+I,KAAK,iBACLE,SAAU,SAACC,GACTyE,EAAiBzE,EAAEC,OAAOhI,OAE1B4M,EAAsB7E,EAAEC,OAAO4F,SAASC,MAC1C,EACA/N,MAAM,iBACNE,MAAOuM,EACP1E,YACE,qDAEFX,QACE,yEAEFkC,MACGuD,EAEG,GADA,yFAKVxO,EAAAA,EAAAA,MAAA,OAAA5C,SAAA,EACEI,EAAAA,EAAAA,KAAA,MAAAJ,SAAI,mBACJI,EAAAA,EAAAA,KAAA,OAAAJ,SACGkR,EAAahL,KAAI,SAAC4L,EAAQ1L,GACzB,OACExD,EAAAA,EAAAA,MAAA,OACEtC,UAAS,GAAA2D,OAAKlE,EAAQ4Q,cAAe3Q,SAAA,EAGrCI,EAAAA,EAAAA,KAACgM,EAAAA,EAAe,CACd9I,GAAE,gBAAAW,OAAkBmC,EAAME,YAC1B+F,KAAI,gBAAApI,OAAkBmC,EAAME,YAC5BiG,SAAU,SAACC,IAlFP,SAAC/H,EAAe2B,GACxC,IAAM4L,GAAYpK,EAAAA,EAAAA,GAAOsJ,GACzBc,EAAa5L,GAAS3B,EAEtB0M,EAAgBa,EAClB,CA8EwBO,CAAkB/F,EAAEC,OAAOhI,MAAO2B,GApDzB,SAACoM,EAAsBpM,GACtD,IAAMqM,GAAe7K,EAAAA,EAAAA,GAAO0J,GAC5BmB,EAAgBrM,GAASoM,EAEzBjB,EAAoBkB,EACtB,CAgDwBC,CACElG,EAAEC,OAAO4F,SAASC,MAClBlM,EAEJ,EACA7B,MAAK,gBAAAN,OAAkBmC,EAAQ,GAC/B3B,MAAOqN,EACPxF,YAAa,8BACbX,QACE,gDAEFkC,MACGyD,EAAiBlL,GAEd,GADA,sEAIRhG,EAAAA,EAAAA,KAAA,OAAKE,UAAWP,EAAQ6Q,cAAc5Q,UACpCI,EAAAA,EAAAA,KAACiD,EAAAA,EAAU,CACTK,KAAM,QACNF,QAASuO,EACT/E,SAAU5G,IAAU8K,EAAavO,OAAS,EAAE3C,UAE5CI,EAAAA,EAAAA,KAACuS,EAAAA,EAAO,SAIZvS,EAAAA,EAAAA,KAAA,OAAKE,UAAWP,EAAQ6Q,cAAc5Q,UACpCI,EAAAA,EAAAA,KAACiD,EAAAA,EAAU,CACTK,KAAM,QACNF,QAAS,kBAhGP,SAACoP,GACzB,IAAMC,EAAkB3B,EAAa1J,QACnC,SAACsL,EAAG1M,GAAK,OAAKA,IAAUwM,CAAW,IAG/BG,EAAoBzB,EAAiB9J,QACzC,SAACsL,EAAG1M,GAAK,OAAKA,IAAUwM,CAAW,IAGrCzB,EAAgB0B,GAChBtB,EAAoBwB,EACtB,CAqFuCC,CAAkB5M,EAAM,EACvC4G,SAAUkE,EAAavO,QAAU,EAAE3C,UAEnCI,EAAAA,EAAAA,KAAC6S,EAAAA,IAAU,UAET,oBAAAhP,OA1CmBmC,EAAME,YA6CrC,aAIN1D,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAI9E,UAAWP,EAAQ+M,eAAe9M,SAAA,EACnDI,EAAAA,EAAAA,KAAC2M,EAAAA,IAAM,CACLzJ,GAAI,oBACJhB,KAAK,SACLiF,QAAQ,UACR/D,QApKM,WAChByN,EAAiB,IACjBI,GAAsB,GACtBF,EAAgB,CAAC,KACjBI,EAAoB,EAAC,GACvB,EAgKYhN,MAAO,WAETnE,EAAAA,EAAAA,KAAC2M,EAAAA,IAAM,CACLzJ,GAAI,cACJhB,KAAK,SACLiF,QAAQ,aACRyF,SACElD,IACCsH,GACDE,EAAiB9J,QAAO,SAACsK,GAAM,OAAMA,CAAM,IAAEnP,OAAS,EAExDa,QAzKc,WACxBuG,GAAa,GAEb,IAAImD,EAAU,CACZ6D,QAAS,CACPU,QAAST,EACTW,MAAOT,EAAa1J,QAAO,SAAC0L,GAAW,MAA4B,KAAvBA,EAAYjG,MAAa,MAGzEO,EAAAA,EACGC,OACC,MAAM,sBAADxJ,OACiB2F,EAAS,aAAA3F,OAAY4F,EAAQ,YACnDqD,GAEDQ,MAAK,WACJ3D,GAAa,GACbzI,GAASqM,EAAAA,EAAAA,IAAmB,iCAC5BhE,GAAqB,EACvB,IACCiE,OAAM,SAACC,GACN9D,GAAa,GACbzI,GAASwM,EAAAA,EAAAA,IAA0BD,GACrC,GACJ,EAkJYtJ,MAAO,kBAOrB,I,sBC9NM4O,EAAsB,WAAkD,IAAjDC,EAAqBC,UAAA1Q,OAAA,QAAA2Q,IAAAD,UAAA,GAAAA,UAAA,GAAG,MAAOtT,EAAYsT,UAAA1Q,OAAA,EAAA0Q,UAAA,QAAAC,EACtE,MAAyB,QAAlBF,EACHrT,EAAQwT,SACU,WAAlBH,EACArT,EAAQyT,YACU,UAAlBJ,EACArT,EAAQ0T,WACR1T,EAAQ2T,SACd,EAEMC,EAAiB,SAAH7T,GAMb,IAADiO,EALJM,EAAMvO,EAANuO,OACAtO,EAAOD,EAAPC,QAKA,OAAKsO,GAKHjO,EAAAA,EAAAA,KAACwT,EAAe,CACdvF,OAAQA,EACR9J,MAAO,UACPsJ,MAAO,GACPU,SAAS,EACTD,aAAc6E,EAA0B,OAAN9E,QAAM,IAANA,GAAc,QAARN,EAANM,EAAQS,cAAM,IAAAf,OAAR,EAANA,EAAgBqF,cAAerT,KAT5D,IAYX,EAEM8T,EAAY,SAACC,GACjB,OAAIA,GACK1T,EAAAA,EAAAA,KAAC2T,EAAAA,IAAc,KAEjB3T,EAAAA,EAAAA,KAAC4T,EAAAA,IAAW,CAAC1O,MAAO,CAAE7F,MAAO,SACtC,EAEMwU,EAAkB,CACtBlO,QAAS,OACTmO,eAAgB,gBAChBC,UAAW,OACX,4BAA6B,CAC3BC,SAAU,WAIRC,EAAwB,CAC5BxP,SAAU,CACRyP,GAAI,CACFC,KAAM,EACNhP,YAAa,GACbQ,QAAS,OACTyK,WAAY,SACZ0D,eAAgB,gBAChB,4BAA6B,CAC3B3O,YAAa,UAInBR,SAAU,CACRO,MAAO,CACLkP,SAAU,OA+ShB,GAAe1V,EAAAA,EAAAA,IA3ZA,SAACC,GAAY,OAC1BC,EAAAA,EAAAA,IAAYqB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACToU,EAAAA,IAAmB,IACtBlB,SAAU,CACR9T,MAAOV,EAAMW,QAAQmO,MAAMjO,KAC3B,cAAe,CACbe,MAAO,GACPkF,OAAQ,GACRN,YAAa,IAGjBiO,YAAa,CACX/T,MAAOV,EAAMW,QAAQgV,QAAQ9U,KAC7B,cAAe,CACbe,MAAO,GACPkF,OAAQ,GACRN,YAAa,IAGjBkO,WAAY,CACVhU,MAAOV,EAAMW,QAAQiV,QAAQ/U,KAC7B,cAAe,CACbe,MAAO,GACPkF,OAAQ,GACRN,YAAa,IAGjBmO,UAAW,CACTjU,MAAO,OACP,cAAe,CACbkB,MAAO,GACPkF,OAAQ,GACRN,YAAa,IAGjBqP,cAAe,CACbnV,MAAOV,EAAMW,QAAQC,KAAKC,KAC1BC,WAAY,uBAEdgV,kBAAmB,CACjBC,UAAW,WAEVC,EAAAA,IACF,GAgXL,EA3SsB,SAAHC,GAAsC,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAjI,EAAAE,EAAAwB,EAAAK,EAAAmG,EAAAC,EAA/BrW,EAAOiV,EAAPjV,QACjBuB,GAAWC,EAAAA,EAAAA,MACjB8U,GAAwCC,EAAAA,EAAAA,MAAhCC,EAAUF,EAAVE,WAAYC,EAAeH,EAAfG,gBAEdnI,GAAStM,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAAKA,EAAMyU,QAAQC,UAAU,IAClEC,GAAoB5U,EAAAA,EAAAA,KAAY,SAACC,GAAe,OACpD4U,IAAI5U,EAAMyU,QAAQC,WAAY,qBAAqB,EAAM,IAErDG,GAAW9U,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAC3C4U,IAAI5U,EAAMyU,QAAQC,WAAY,YAAY,EAAM,IAE5CI,IAAY/U,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAC5C4U,IAAI5U,EAAMyU,QAAQC,WAAY,gBAAgB,EAAM,IAEhDK,IAAchV,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAC9C4U,IAAI5U,EAAMyU,QAAQC,WAAY,kBAAkB,EAAM,IAGxDlV,IAAkCC,EAAAA,EAAAA,UAAiB,GAAEC,IAAAC,EAAAA,EAAAA,GAAAH,GAAA,GAA9CwV,GAAStV,GAAA,GAAEuV,GAAYvV,GAAA,GAC9BsI,IAAkCvI,EAAAA,EAAAA,UAAiB,GAAEwI,IAAAtI,EAAAA,EAAAA,GAAAqI,GAAA,GAA9CkN,GAASjN,GAAA,GAAEkN,GAAYlN,GAAA,GAC9BG,IAA8B3I,EAAAA,EAAAA,UAAiB,GAAE4I,IAAA1I,EAAAA,EAAAA,GAAAyI,GAAA,GAA1CgN,GAAO/M,GAAA,GAAEgN,GAAUhN,GAAA,GAC1BG,IAAoD/I,EAAAA,EAAAA,WAAkB,GAAMgJ,IAAA9I,EAAAA,EAAAA,GAAA6I,GAAA,GAArE8M,GAAkB7M,GAAA,GAAE8M,GAAqB9M,GAAA,GAChDG,IAA8CnJ,EAAAA,EAAAA,WAAkB,GAAMoJ,IAAAlJ,EAAAA,EAAAA,GAAAiJ,GAAA,GAA/D4M,GAAe3M,GAAA,GAAE4M,GAAkB5M,GAAA,IAE1C1I,EAAAA,EAAAA,YAAU,WACK,IAADuV,EAAAC,EAAAC,EAARvJ,IACF4I,IAAmB,OAAN5I,QAAM,IAANA,GAAa,QAAPqJ,EAANrJ,EAAQwJ,aAAK,IAAAH,OAAP,EAANA,EAAe/U,SAAU,GACtC0U,IACc,QAAZM,EAAAtJ,EAAOwJ,aAAK,IAAAF,OAAA,EAAZA,EAAc5Q,QACZ,SAACyI,EAAKsI,GAAC,OAAKtI,EAAMsI,EAAEC,mBAAqBD,EAAEE,OAAO,GAClD,KACG,GAEPb,IAAyB,QAAZS,EAAAvJ,EAAOwJ,aAAK,IAAAD,OAAA,EAAZA,EAAc7Q,QAAO,SAACyI,EAAKsI,GAAC,OAAKtI,EAAMsI,EAAEE,OAAO,GAAE,KAAM,GAEzE,GAAG,CAAC3J,IASJ,OACEzL,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,CACNsX,KACClX,EAAAA,EAAAA,KAAC6X,EAAiB,CAChBnV,KAAMwU,GACN3N,qBAAsB,SAACuO,GACrBX,IAAsB,GAClBW,GACF5W,GAAS6W,EAAAA,EAAAA,KAEb,EACAtO,SAAU0M,GAAc,GACxB3M,UAAW4M,GAAmB,KAIjCgB,KACCpX,EAAAA,EAAAA,KAACgY,EAAW,CACVtV,KAAM0U,GACN3N,SAAU0M,GAAc,GACxB3M,UAAW4M,GAAmB,GAC9BzF,SAAe,OAAN1C,QAAM,IAANA,OAAM,EAANA,EAAQ0C,UAAW,KAC5BpH,qBA7BsB,SAACuO,GAC7BT,IAAmB,GACfS,GACF5W,GAAS6W,EAAAA,EAAAA,KAEb,KA4BI/X,EAAAA,EAAAA,KAACiY,EAAAA,EAAY,CAACC,WAAW,EAAMtY,SAAC,aAEhCI,EAAAA,EAAAA,KAACuT,EAAc,CAACtF,OAAQA,EAAQtO,QAASA,KAEzC6C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACC,WAAS,EAAAhM,SAAA,EACb4C,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAIC,GAAI,GAAIkL,GAAI,EAAEvQ,SAAA,EAC/BI,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CAAClM,MAAO,SAAUE,MAAa,OAAN4J,QAAM,IAANA,OAAM,EAANA,EAAQkK,kBAElDnY,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAM,SACNE,OACErE,EAAAA,EAAAA,KAACoY,EAAAA,EAAO,CACNlT,MAAO,CACLW,SAAU,SACVwS,aAAc,WACdC,WAAY,SACZC,UAAW,aAEbnV,QAAS,WACP+T,IAAsB,EACxB,EAAEvX,SAEDqO,EAASA,EAAOlB,MAAQ,UAKjC/M,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChB4C,EAAAA,EAAAA,MAAA,MAAA5C,SAAA,CAAI,WAEFI,EAAAA,EAAAA,KAAC2M,EAAAA,IAAM,CACLzJ,GAAI,eACJsV,MAAMxY,EAAAA,EAAAA,KAACyY,EAAAA,IAAQ,IACfrV,QAAS,WACPiU,IAAmB,EACrB,UAINrX,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,WACPE,OACE7B,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,CACE,OAANqO,QAAM,IAANA,GAAe,QAAT4G,EAAN5G,EAAQ0C,eAAO,IAAAkE,GAAfA,EAAiBxD,SACW,MAAvB,OAANpD,QAAM,IAANA,GAAe,QAAT6G,EAAN7G,EAAQ0C,eAAO,IAAAmE,OAAT,EAANA,EAAiBzD,UACZ,OAANpD,QAAM,IAANA,GAAiB,QAAX8G,EAAN9G,EAAQyK,iBAAS,IAAA3D,GAAjBA,EAAmB1D,QAEhB,GADA,KAGG,OAANpD,QAAM,IAANA,GAAiB,QAAX+G,EAAN/G,EAAQyK,iBAAS,IAAA1D,OAAX,EAANA,EAAmB3D,WAClB7O,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,EACPI,EAAAA,EAAAA,KAAA,KACE2Y,KAAY,OAAN1K,QAAM,IAANA,GAAiB,QAAXgH,EAANhH,EAAQyK,iBAAS,IAAAzD,OAAX,EAANA,EAAmB5D,QACzBhF,OAAO,SACPuM,IAAI,WACJ1Y,UAAS,GAAA2D,OAAKlE,EAAQ6U,cAAa,KAAA3Q,OAAIlE,EAAQ8U,mBAAoB7U,UAE5D,OAANqO,QAAM,IAANA,GAAiB,QAAXiH,EAANjH,EAAQyK,iBAAS,IAAAxD,OAAX,EAANA,EAAmB7D,UAAW,OAEjCrR,EAAAA,EAAAA,KAAA,aAIG,OAANiO,QAAM,IAANA,GAAe,QAATkH,EAANlH,EAAQ0C,eAAO,IAAAwE,OAAT,EAANA,EAAiB9D,UACa,MAAvB,OAANpD,QAAM,IAANA,GAAe,QAATmH,EAANnH,EAAQ0C,eAAO,IAAAyE,OAAT,EAANA,EAAiB/D,WACfrR,EAAAA,EAAAA,KAAA,KACE2Y,MAAY,OAAN1K,QAAM,IAANA,GAAe,QAAToH,EAANpH,EAAQ0C,eAAO,IAAA0E,OAAT,EAANA,EAAiBhE,UAAW,GAClChF,OAAO,SACPuM,IAAI,WACJ1Y,UAAWP,EAAQ6U,cAAc5U,UAE1B,OAANqO,QAAM,IAANA,GAAe,QAATqH,EAANrH,EAAQ0C,eAAO,IAAA2E,OAAT,EAANA,EAAiBjE,UAAW,aAO3CrR,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAK,iBAAAN,OACG,OAANoK,QAAM,IAANA,GAAiB,QAAXsH,EAANtH,EAAQyK,iBAAS,IAAAnD,GAAjBA,EAAmBhE,OACiB,KAA9B,OAANtD,QAAM,IAANA,GAAiB,QAAXuH,EAANvH,EAAQyK,iBAAS,IAAAlD,OAAX,EAANA,EAAmBjE,MAAMhP,QACrB,GACA,IAAG,KAET8B,OACE7B,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,CACC,OAANqO,QAAM,IAANA,GAAe,QAATwH,EAANxH,EAAQ0C,eAAO,IAAA8E,GAAfA,EAAiBlE,OAAgB,OAANtD,QAAM,IAANA,GAAiB,QAAXyH,EAANzH,EAAQyK,iBAAS,IAAAhD,GAAjBA,EAAmBnE,MAE5C,GADA,KAEG,OAANtD,QAAM,IAANA,GAAiB,QAAX0H,EAAN1H,EAAQyK,iBAAS,IAAA/C,OAAX,EAANA,EAAmBpE,SAClB/O,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,EACPI,EAAAA,EAAAA,KAAA,KACE2Y,KAAY,OAAN1K,QAAM,IAANA,GAAiB,QAAX2H,EAAN3H,EAAQyK,iBAAS,IAAA9C,OAAX,EAANA,EAAmBrE,MACzBlF,OAAO,SACPuM,IAAI,WACJ1Y,UAAS,GAAA2D,OAAKlE,EAAQ6U,cAAa,KAAA3Q,OAAIlE,EAAQ8U,mBAAoB7U,UAE5D,OAANqO,QAAM,IAANA,GAAiB,QAAX4H,EAAN5H,EAAQyK,iBAAS,IAAA7C,OAAX,EAANA,EAAmBtE,QAAS,OAE/BvR,EAAAA,EAAAA,KAAA,aAIG,OAANiO,QAAM,IAANA,GAAe,QAAT6H,EAAN7H,EAAQ0C,eAAO,IAAAmF,OAAT,EAANA,EAAiBvE,QAChBtD,EAAO0C,QAAQY,MAAMzL,KAAI,SAAC4L,GACxB,OACElP,EAAAA,EAAAA,MAACiK,EAAAA,SAAQ,CAAA7M,SAAA,EACPI,EAAAA,EAAAA,KAAA,KACE2Y,KAAMjH,EACNrF,OAAO,SACPuM,IAAI,WACJ1Y,UAAWP,EAAQ6U,cAAc5U,SAEhC8R,KAEH1R,EAAAA,EAAAA,KAAA,WATa0R,EAYnB,eAMZlP,EAAAA,EAAAA,MAACmJ,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAIC,GAAI,GAAIkL,GAAI,EAAEvQ,SAAA,EAC/BI,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CAAClM,MAAO,aAAcE,MAAOyS,QAE9C9W,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,YACPE,MAAOuS,GACPnS,SAAU,CACRS,MAAO,CACLC,YAAa,UAKrBnF,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAM,gBACNE,MAAO2S,GACPvS,SAAU,CACRS,MAAO,CACLC,YAAa,UAKrBnF,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,gBACPE,MACQ,OAAN4J,QAAM,IAANA,GAAc,QAARJ,EAANI,EAAQS,cAAM,IAAAb,GAAdA,EAAgBgL,aAAqB,OAAN5K,QAAM,IAANA,GAAc,QAARF,EAANE,EAAQS,cAAM,IAAAX,OAAR,EAANA,EAAgB8K,aAAe,OAIpE7Y,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,iBACPE,MACQ,OAAN4J,QAAM,IAANA,GAAc,QAARsB,EAANtB,EAAQS,cAAM,IAAAa,GAAdA,EAAgBuJ,cACN,OAAN7K,QAAM,IAANA,GAAc,QAAR2B,EAAN3B,EAAQS,cAAM,IAAAkB,OAAR,EAANA,EAAgBkJ,cAChB,EAENrU,SAAU,CACRS,MAAO,CACLC,YAAa,SAKrBnF,EAAAA,EAAAA,KAAC2L,EAAAA,GAAI,CAACE,MAAI,EAAC7G,GAAI,GAAGpF,UAChBI,EAAAA,EAAAA,KAACqQ,EAAAA,EAAc,CACblM,MAAO,kBACPE,MACQ,OAAN4J,QAAM,IAANA,GAAc,QAAR8H,EAAN9H,EAAQS,cAAM,IAAAqH,GAAdA,EAAgBgD,eACN,OAAN9K,QAAM,IAANA,GAAc,QAAR+H,EAAN/H,EAAQS,cAAM,IAAAsH,OAAR,EAANA,EAAgB+C,eAChB,EAENtU,SAAU,CACRS,MAAO,CACLC,YAAa,eAQzBnF,EAAAA,EAAAA,KAACiY,EAAAA,EAAY,CAAArY,SAAC,cACd4C,EAAAA,EAAAA,MAACwW,EAAAA,EAAG,CAAC9E,IAAEjU,EAAAA,EAAAA,GAAA,GAAO4T,GAAkBjU,SAAA,EAC9BI,EAAAA,EAAAA,KAACqQ,EAAAA,GAAcpQ,EAAAA,EAAAA,GAAA,CACbsE,YAAY,MACZJ,MAAM,aACNE,MAAOoP,EAAUgD,EAAU,eACvBxC,KAENjU,EAAAA,EAAAA,KAACqQ,EAAAA,GAAcpQ,EAAAA,EAAAA,GAAA,CACbsE,YAAY,MACZJ,MAAO,WACPE,MAAOoP,EAAUiD,GAAW,eACxBzC,KAENjU,EAAAA,EAAAA,KAACqQ,EAAAA,GAAcpQ,EAAAA,EAAAA,GAAA,CACbsE,YAAY,MACZJ,MAAO,cACPE,MAAOoP,EAAU8C,EAAmB,eAChCtC,QAGRjU,EAAAA,EAAAA,KAACgZ,EAAAA,EAAG,CAAC9E,IAAEjU,EAAAA,EAAAA,GAAA,GAAO4T,GAAkBjU,UAC9BI,EAAAA,EAAAA,KAACqQ,EAAAA,GAAcpQ,EAAAA,EAAAA,GAAA,CACbsE,YAAY,MACZJ,MAAO,UACPE,MAAOoP,EAAUkD,GAAa,gBAC1B1C,QAKd,G,mFCjaA,KAAevV,EAAAA,EAAAA,IA5BA,SAACC,GAAY,IAAAsa,EAAA,OAC1Bra,EAAAA,EAAAA,GAAa,CACXsa,WAAY,CACV7Z,OAAoB,QAAb4Z,EAAAta,EAAMW,eAAO,IAAA2Z,OAAA,EAAbA,EAAexL,MAAMjO,OAAQ,YAErC,GAuBL,EAfmB,SAAHE,GAIS,IAHvBC,EAAOD,EAAPC,QACAoQ,EAAYrQ,EAAZqQ,aAAYoJ,EAAAzZ,EACZsQ,UAAAA,OAAS,IAAAmJ,GAAOA,EAEhB,OACE3W,EAAAA,EAAAA,MAACiN,EAAAA,SAAc,CAAA7P,SAAA,CACZoQ,IAAahQ,EAAAA,EAAAA,KAAA,UACdA,EAAAA,EAAAA,KAACoZ,EAAAA,EAAU,CAACC,UAAU,IAAIlS,QAAQ,QAAQjH,UAAWP,EAAQuZ,WAAWtZ,SACrEmQ,MAIT,G,4BC/BIuJ,EAAyBC,EAAQ,OAIrCC,EAAQ,OAAU,EAClB,IAAIC,EAAiBH,EAAuBC,EAAQ,QAChDG,EAAcH,EAAQ,OACtBI,GAAW,EAAIF,EAAeG,UAAuB,EAAIF,EAAYG,KAAK,OAAQ,CACpFC,EAAG,wCACD,OACJN,EAAQ,EAAUG,C,gOCVZ5Z,EAAY,CAAC,YAAa,YAAa,UAAW,UAAW,WAAY,YAAa,cAYtFga,GAAeC,EAAAA,EAAAA,KAEfC,GAA+BC,EAAAA,EAAAA,GAAa,MAAO,CACvDjO,KAAM,WACNkO,KAAM,OACNC,kBAAmB,SAACC,EAAOC,GAAM,OAAKA,EAAOzb,IAAI,IAEnD,SAAS0b,EAAqBF,GAC5B,OAAOG,EAAAA,EAAAA,GAAoB,CACzBH,MAAAA,EACApO,KAAM,WACN8N,aAAAA,GAEJ,CASA,SAASU,EAAa7a,EAAUsY,GAC9B,IAAMwC,EAAgBjL,EAAAA,SAAekL,QAAQ/a,GAAUwH,OAAOwT,SAC9D,OAAOF,EAAc/T,QAAO,SAACkU,EAAQC,EAAO9U,GAO1C,OANA6U,EAAO/I,KAAKgJ,GACR9U,EAAQ0U,EAAcnY,OAAS,GACjCsY,EAAO/I,KAAmBrC,EAAAA,aAAmByI,EAAW,CACtD6C,IAAK,aAAFlX,OAAemC,MAGf6U,CACT,GAAG,GACL,CACA,IAQa3V,EAAQ,SAAHxF,GAGZ,IAFJsb,EAAUtb,EAAVsb,WACArc,EAAKe,EAALf,MAEI2b,GAASW,EAAAA,EAAAA,GAAS,CACpBtV,QAAS,OACTuV,cAAe,WACdC,EAAAA,EAAAA,IAAkB,CACnBxc,MAAAA,IACCyc,EAAAA,EAAAA,IAAwB,CACzBC,OAAQL,EAAWjW,UACnBuW,YAAa3c,EAAM2c,YAAYD,UAC7B,SAAAE,GAAS,MAAK,CAChBL,cAAeK,EAChB,KACD,GAAIP,EAAW9K,QAAS,CACtB,IAAMsL,GAAcC,EAAAA,EAAAA,IAAmB9c,GACjC+c,EAAOC,OAAOC,KAAKjd,EAAM2c,YAAYD,QAAQ1U,QAAO,SAACC,EAAKiV,GAI9D,OAHkC,kBAAvBb,EAAW9K,SAA0D,MAAlC8K,EAAW9K,QAAQ2L,IAAuD,kBAAzBb,EAAWjW,WAA8D,MAApCiW,EAAWjW,UAAU8W,MACvJjV,EAAIiV,IAAc,GAEbjV,CACT,GAAG,CAAC,GACEkV,GAAkBV,EAAAA,EAAAA,IAAwB,CAC9CC,OAAQL,EAAWjW,UACnB2W,KAAAA,IAEIK,GAAgBX,EAAAA,EAAAA,IAAwB,CAC5CC,OAAQL,EAAW9K,QACnBwL,KAAAA,IAE6B,kBAApBI,GACTH,OAAOC,KAAKE,GAAiBE,SAAQ,SAACH,EAAY7V,EAAOsV,GAEvD,IADuBQ,EAAgBD,GAClB,CACnB,IAAMI,EAAyBjW,EAAQ,EAAI8V,EAAgBR,EAAYtV,EAAQ,IAAM,SACrF8V,EAAgBD,GAAcI,CAChC,CACF,IAeF3B,GAAS4B,EAAAA,EAAAA,GAAU5B,GAAQa,EAAAA,EAAAA,IAAkB,CAC3Cxc,MAAAA,GACCod,GAfwB,SAACR,EAAWM,GACrC,OAAIb,EAAWmB,WACN,CACLC,KAAKC,EAAAA,EAAAA,IAASb,EAAaD,IAGxB,CACL,iCAA+Be,EAAAA,EAAAA,GAAA,CAC7Bvd,OAAQ,GAAC,SAAA8E,QAxDUkB,EAyDY8W,EAAaC,EAAgBD,GAAcb,EAAWjW,UAxDtF,CACLwX,IAAK,OACL,cAAe,QACfC,OAAQ,MACR,iBAAkB,UAClBzX,MAmD0GsX,EAAAA,EAAAA,IAASb,EAAaD,KAzDvG,IAAAxW,CA4DzB,IAIF,CAEA,OADAuV,GAASmC,EAAAA,EAAAA,IAAwB9d,EAAM2c,YAAahB,EAEtD,E,0BC/GMxV,EDgHS,WAAmC,IAAd4X,EAAOzJ,UAAA1Q,OAAA,QAAA2Q,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7C0J,EAKID,EAHFE,sBAAAA,OAAqB,IAAAD,EAAG1C,EAA4B0C,EAAAE,EAGlDH,EAFFI,cAAAA,OAAa,IAAAD,EAAGtC,EAAoBsC,EAAAE,EAElCL,EADFM,cAAAA,OAAa,IAAAD,EAAG,WAAUA,EAQtBE,EAAYL,EAAsB1X,GAClCJ,EAAqB2K,EAAAA,YAAiB,SAAcyN,EAASC,GACjE,IAAMC,EAAaN,EAAcI,GAC3B7C,GAAQgD,EAAAA,EAAAA,GAAaD,GAC3BE,EAQMjD,EAPFhB,UAAAA,OAAS,IAAAiE,EAAG,MAAKA,EAAAC,EAOflD,EANFtV,UAAAA,OAAS,IAAAwY,EAAG,SAAQA,EAAAC,EAMlBnD,EALFnK,QAAAA,OAAO,IAAAsN,EAAG,EAACA,EACXC,EAIEpD,EAJFoD,QACA7d,EAGEya,EAHFza,SACAM,EAEEma,EAFFna,UAASwd,EAEPrD,EADF8B,WAAAA,OAAU,IAAAuB,GAAQA,EAEpBC,GAAQC,EAAAA,EAAAA,GAA8BvD,EAAOta,GACzCib,EAAa,CACjBjW,UAAAA,EACAmL,QAAAA,EACAiM,WAAAA,GAEIxc,GArBCke,EAAAA,EAAAA,GAHO,CACZhf,KAAM,CAAC,UAEoB,SAAAsb,GAAI,OAAI2D,EAAAA,EAAAA,GAAqBd,EAAe7C,EAAK,GAAE,CAAC,GAsBjF,OAAoBna,EAAAA,EAAAA,KAAKid,GAAWhC,EAAAA,EAAAA,GAAS,CAC3C8C,GAAI1E,EACJ2B,WAAYA,EACZmC,IAAKA,EACLjd,WAAW8d,EAAAA,EAAAA,GAAKre,EAAQd,KAAMqB,IAC7Byd,EAAO,CACR/d,SAAU6d,EAAUhD,EAAa7a,EAAU6d,GAAW7d,IAE1D,IAQA,OAAOkF,CACT,CClKcmZ,CAAY,CACxBrB,uBAAuBsB,EAAAA,EAAAA,IAAO,MAAO,CACnCjS,KAAM,WACNkO,KAAM,OACNC,kBAAmB,SAACC,EAAOC,GAAM,OAAKA,EAAOzb,IAAI,IAEnDie,cAAe,SAAAI,GAAO,OAAIJ,EAAAA,EAAAA,GAAc,CACtCzC,MAAO6C,EACPjR,KAAM,YACN,IA8CJ,G,4BC1DMiS,GAASC,E,SAAAA,MACf,K,wBCKA,SAASC,IAEP,IAAIxc,EAAQyc,KAAKC,YAAYC,yBAAyBF,KAAKhE,MAAOgE,KAAKzc,OACzD,OAAVA,QAA4BsR,IAAVtR,GACpByc,KAAKG,SAAS5c,EAElB,CAEA,SAAS6c,EAA0BC,GAQjCL,KAAKG,SALL,SAAiBG,GACf,IAAI/c,EAAQyc,KAAKC,YAAYC,yBAAyBG,EAAWC,GACjE,OAAiB,OAAV/c,QAA4BsR,IAAVtR,EAAsBA,EAAQ,IACzD,EAEsBgd,KAAKP,MAC7B,CAEA,SAASQ,EAAoBH,EAAWI,GACtC,IACE,IAAIC,EAAYV,KAAKhE,MACjBsE,EAAYN,KAAKzc,MACrByc,KAAKhE,MAAQqE,EACbL,KAAKzc,MAAQkd,EACbT,KAAKW,6BAA8B,EACnCX,KAAKY,wBAA0BZ,KAAKa,wBAClCH,EACAJ,EAEJ,CAAE,QACAN,KAAKhE,MAAQ0E,EACbV,KAAKzc,MAAQ+c,CACf,CACF,CAQA,SAASQ,EAASC,GAChB,IAAIC,EAAYD,EAAUC,UAE1B,IAAKA,IAAcA,EAAUC,iBAC3B,MAAM,IAAIC,MAAM,sCAGlB,GACgD,oBAAvCH,EAAUb,0BAC4B,oBAAtCc,EAAUH,wBAEjB,OAAOE,EAMT,IAAII,EAAqB,KACrBC,EAA4B,KAC5BC,EAAsB,KAgB1B,GAf4C,oBAAjCL,EAAUjB,mBACnBoB,EAAqB,qBACmC,oBAAxCH,EAAUM,4BAC1BH,EAAqB,6BAE4B,oBAAxCH,EAAUZ,0BACnBgB,EAA4B,4BACmC,oBAA/CJ,EAAUO,mCAC1BH,EAA4B,oCAEe,oBAAlCJ,EAAUR,oBACnBa,EAAsB,sBACmC,oBAAzCL,EAAUQ,6BAC1BH,EAAsB,8BAGC,OAAvBF,GAC8B,OAA9BC,GACwB,OAAxBC,EACA,CACA,IAAI1C,EAAgBoC,EAAUU,aAAeV,EAAUnT,KACnD8T,EAC4C,oBAAvCX,EAAUb,yBACb,6BACA,4BAEN,MAAMgB,MACJ,2FACEvC,EACA,SACA+C,EACA,uDACwB,OAAvBP,EAA8B,OAASA,EAAqB,KAC9B,OAA9BC,EACG,OAASA,EACT,KACqB,OAAxBC,EAA+B,OAASA,EAAsB,IATjE,uIAaJ,CAaA,GARkD,oBAAvCN,EAAUb,2BACnBc,EAAUjB,mBAAqBA,EAC/BiB,EAAUZ,0BAA4BA,GAMS,oBAAtCY,EAAUH,wBAAwC,CAC3D,GAA4C,oBAAjCG,EAAUW,mBACnB,MAAM,IAAIT,MACR,qHAIJF,EAAUR,oBAAsBA,EAEhC,IAAImB,EAAqBX,EAAUW,mBAEnCX,EAAUW,mBAAqB,SAC7BjB,EACAJ,EACAsB,GAUA,IAAIC,EAAW7B,KAAKW,4BAChBX,KAAKY,wBACLgB,EAEJD,EAAmBG,KAAK9B,KAAMU,EAAWJ,EAAWuB,EACtD,CACF,CAEA,OAAOd,CACT,C,8CA9GAhB,EAAmBgC,8BAA+B,EAClD3B,EAA0B2B,8BAA+B,EACzDvB,EAAoBuB,8BAA+B,C","sources":["screens/Console/Common/AButton/AButton.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/UsageBarWrapper/LabelValuePair.tsx","screens/Console/Common/UsageBar/UsageBar.tsx","screens/Console/Tenants/ListTenants/TenantCapacity.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Common/UsageBarWrapper/SummaryUsageBar.tsx","screens/Console/Tenants/TenantDetails/EditDomains.tsx","screens/Console/Tenants/TenantDetails/TenantSummary.tsx","screens/shared/ErrorBlock.tsx","../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/material/Stack/Stack.js","../node_modules/@mui/system/esm/styled.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { IconButtonProps } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n padding: 0,\n margin: 0,\n border: 0,\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n fontSize: \"inherit\",\n color: theme.palette.info.main,\n fontFamily: \"Inter, sans-serif\",\n },\n });\n\ninterface IAButton extends IconButtonProps {\n classes: any;\n children: any;\n}\n\nconst AButton = ({ classes, children, ...rest }: IAButton) => {\n return (\n \n );\n};\n\nexport default withStyles(styles)(AButton);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport MainError from \"../MainError/MainError\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n noContentPadding?: boolean;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n noContentPadding,\n titleIcon = null,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nexport default withStyles(styles)(ModalWrapper);\n","import React from \"react\";\nimport { Stack } from \"@mui/material\";\n\ntype LabelValuePairProps = {\n label?: any;\n value?: any;\n orientation?: any;\n stkProps?: any;\n lblProps?: any;\n valProps?: any;\n};\n\nconst LabelValuePair = ({\n label = null,\n value = \"-\",\n orientation = \"column\",\n stkProps = {},\n lblProps = {},\n valProps = {},\n}: LabelValuePairProps) => {\n return (\n \n \n \n \n );\n};\n\nexport default LabelValuePair;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\nexport interface ISizeBarItem {\n value: number;\n itemName: string;\n color: string;\n}\n\nexport interface IUsageBar {\n totalValue: number;\n sizeItems: ISizeBarItem[];\n bgColor?: string;\n}\n\nconst UsageBar = ({\n totalValue,\n sizeItems,\n bgColor = \"#ededed\",\n}: IUsageBar) => {\n return (\n \n {sizeItems.map((sizeElement, index) => {\n const itemPercentage = (sizeElement.value * 100) / totalValue;\n return (\n \n );\n })}\n \n );\n};\n\nexport default UsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Cell, Pie, PieChart } from \"recharts\";\nimport { CapacityValue, CapacityValues } from \"./types\";\nimport { niceBytesInt } from \"../../../../common/utils\";\nimport { CircleIcon } from \"mds\";\nimport UsageBar, { ISizeBarItem } from \"../../Common/UsageBar/UsageBar\";\n\ninterface ITenantCapacity {\n totalCapacity: number;\n usedSpaceVariants: CapacityValues[];\n statusClass: string;\n render?: \"pie\" | \"bar\";\n}\n\nconst TenantCapacity = ({\n totalCapacity,\n usedSpaceVariants,\n statusClass,\n render = \"pie\",\n}: ITenantCapacity) => {\n const colors = [\n \"#8dacd3\",\n \"#bca1ea\",\n \"#92e8d2\",\n \"#efc9ac\",\n \"#97f274\",\n \"#f7d291\",\n \"#71ACCB\",\n \"#f28282\",\n \"#e28cc1\",\n \"#2781B0\",\n ];\n\n const BGColor = \"#ededed\";\n\n const totalUsedSpace = usedSpaceVariants.reduce((acc, currValue) => {\n return acc + currValue.value;\n }, 0);\n\n const emptySpace = totalCapacity - totalUsedSpace;\n\n let tiersList: CapacityValue[] = [];\n\n const standardTier = usedSpaceVariants.find(\n (tier) => tier.variant === \"STANDARD\",\n ) || {\n value: 0,\n variant: \"empty\",\n };\n\n if (usedSpaceVariants.length > 10) {\n const totalUsedByTiers = totalUsedSpace - standardTier.value;\n\n tiersList = [\n { value: totalUsedByTiers, color: \"#2781B0\", label: \"Total Tiers Space\" },\n ];\n } else {\n tiersList = usedSpaceVariants\n .filter((variant) => variant.variant !== \"STANDARD\")\n .map((variant, index) => {\n return {\n value: variant.value,\n color: colors[index],\n label: `Tier - ${variant.variant}`,\n };\n });\n }\n\n let standardTierColor = \"#07193E\";\n\n const usedPercentage = (standardTier.value * 100) / totalCapacity;\n\n if (usedPercentage >= 90) {\n standardTierColor = \"#C83B51\";\n } else if (usedPercentage >= 75) {\n standardTierColor = \"#FFAB0F\";\n }\n\n const plotValues: CapacityValue[] = [\n {\n value: standardTier.value,\n color: standardTierColor,\n label: \"Used Space by Tenant\",\n },\n ...tiersList,\n {\n value: emptySpace,\n color: render === \"bar\" ? BGColor : \"transparent\",\n label: \"Empty Space\",\n },\n ];\n\n if (render === \"bar\") {\n const plotValuesForUsageBar: ISizeBarItem[] = plotValues.map((plotVal) => {\n return {\n value: plotVal.value,\n color: plotVal.color,\n itemName: plotVal.label,\n };\n });\n\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n \n {!isNaN(totalUsedSpace) ? niceBytesInt(totalUsedSpace) : \"N/A\"}\n \n
\n \n \n \n {plotValues.map((entry, index) => (\n \n ))}\n \n \n
\n \n );\n};\n\nexport default TenantCapacity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"mds\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid } from \"@mui/material\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../common/api\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IUpdateTenantModal {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n infoText: {\n fontSize: 14,\n },\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\nconst UpdateTenantModal = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n classes,\n}: IUpdateTenantModal) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [minioImage, setMinioImage] = useState(\"\");\n const [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] =\n useState(\"\");\n const [imageRegistryUsername, setImageRegistryUsername] =\n useState(\"\");\n const [imageRegistryPassword, setImageRegistryPassword] =\n useState(\"\");\n const [validMinioImage, setValidMinioImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [minioImage],\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\n setImageRegistry(false);\n setImageRegistryEndpoint(\"\");\n setImageRegistryUsername(\"\");\n setImageRegistryPassword(\"\");\n };\n\n const updateMinIOImage = () => {\n setIsSending(true);\n\n let payload = {\n image: minioImage,\n };\n\n if (imageRegistry) {\n const registry: any = {\n image_registry: {\n registry: imageRegistryEndpoint,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n payload = {\n ...payload,\n ...registry,\n };\n }\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Image updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSending(false);\n });\n };\n\n return (\n \n \n \n
\n Please enter the MinIO image from dockerhub to use. If blank, then\n latest build will be used.\n
\n
\n
\n \n {\n setMinioImage(e.target.value);\n }}\n />\n \n \n ) => {\n setImageRegistry(!imageRegistry);\n }}\n label={\"Set Custom Image Registry\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n \n {imageRegistry && (\n \n \n {\n setImageRegistryEndpoint(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryUsername(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryPassword(e.target.value);\n }}\n />\n \n \n )}\n
\n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(UpdateTenantModal);\n","import React, { Fragment } from \"react\";\nimport { Stack } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport { CapacityValues, ValueUnit } from \"../../Tenants/ListTenants/types\";\nimport { CircleIcon, Loader } from \"mds\";\nimport { niceBytes, niceBytesInt } from \"../../../../common/utils\";\nimport TenantCapacity from \"../../Tenants/ListTenants/TenantCapacity\";\nimport ErrorBlock from \"../../../shared/ErrorBlock\";\nimport LabelValuePair from \"./LabelValuePair\";\nimport { Tenant } from \"../../../../api/operatorApi\";\n\ninterface ISummaryUsageBar {\n tenant: Tenant;\n label: string;\n error: string;\n loading: boolean;\n labels?: boolean;\n healthStatus?: string;\n}\n\nconst SummaryUsageBar = ({\n tenant,\n healthStatus,\n loading,\n error,\n}: ISummaryUsageBar) => {\n let raw: ValueUnit = { value: \"n/a\", unit: \"\" };\n let capacity: ValueUnit = { value: \"n/a\", unit: \"\" };\n let used: ValueUnit = { value: \"n/a\", unit: \"\" };\n let localUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n let tieredUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n\n if (tenant.status?.usage?.raw) {\n const b = niceBytes(`${tenant.status.usage.raw}`, true);\n const parts = b.split(\" \");\n raw.value = parts[0];\n raw.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity) {\n const b = niceBytes(`${tenant.status.usage.capacity}`, true);\n const parts = b.split(\" \");\n capacity.value = parts[0];\n capacity.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity_usage) {\n const b = niceBytesInt(tenant.status.usage.capacity_usage, true);\n const parts = b.split(\" \");\n used.value = parts[0];\n used.unit = parts[1];\n }\n\n let spaceVariants: CapacityValues[] = [];\n if (!tenant.tiers || tenant.tiers.length === 0) {\n spaceVariants = [\n { value: tenant.status?.usage?.capacity_usage || 0, variant: \"STANDARD\" },\n ];\n } else {\n spaceVariants = tenant.tiers.map((itemTenant) => {\n return { value: itemTenant.size!, variant: itemTenant.name! };\n });\n let internalUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type === \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n let tieredUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type !== \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n\n const t = niceBytesInt(tieredUsage, true);\n const parts = t.split(\" \");\n tieredUse.value = parts[0];\n tieredUse.unit = parts[1];\n\n const is = niceBytesInt(internalUsage, true);\n const partsInternal = is.split(\" \");\n localUse.value = partsInternal[0];\n localUse.unit = partsInternal[1];\n }\n\n const renderComponent = () => {\n if (!loading) {\n return error !== \"\" ? (\n \n ) : (\n \n \n \n {(!tenant.tiers || tenant.tiers.length === 0) && (\n \n \n \n )}\n {tenant.tiers && tenant.tiers.length > 0 && (\n \n \n \n \n )}\n {healthStatus && (\n \n \n \n }\n />\n )}\n \n \n );\n }\n\n return null;\n };\n\n return (\n \n {loading && (\n
\n \n \n \n
\n )}\n {renderComponent()}\n
\n );\n};\n\nexport default SummaryUsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button, RemoveIcon } from \"mds\";\nimport { Grid, IconButton } from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n ErrorResponseHandler,\n IDomainsRequest,\n} from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport api from \"../../../../common/api\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IEditDomains {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n domains: IDomainsRequest | null;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n domainInline: {\n display: \"flex\",\n marginBottom: 15,\n },\n overlayAction: {\n marginLeft: 10,\n display: \"flex\",\n alignItems: \"center\",\n \"& svg\": {\n width: 15,\n height: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\nconst EditDomains = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n domains,\n classes,\n}: IEditDomains) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [consoleDomain, setConsoleDomain] = useState(\"\");\n const [minioDomains, setMinioDomains] = useState([\"\"]);\n const [consoleDomainValid, setConsoleDomainValid] = useState(true);\n const [minioDomainValid, setMinioDomainValid] = useState([true]);\n\n useEffect(() => {\n if (domains) {\n const consoleDomainSet = domains.console || \"\";\n setConsoleDomain(consoleDomainSet);\n\n if (consoleDomainSet !== \"\") {\n // We Validate console domain\n const consoleRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n );\n\n setConsoleDomainValid(consoleRegExp.test(consoleDomainSet));\n } else {\n setConsoleDomainValid(true);\n }\n\n if (domains.minio && domains.minio.length > 0) {\n setMinioDomains(domains.minio);\n\n const minioRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n );\n\n const initialValidations = domains.minio.map((domain) => {\n if (domain.trim() !== \"\") {\n return minioRegExp.test(domain);\n } else {\n return true;\n }\n });\n\n setMinioDomainValid(initialValidations);\n }\n }\n }, [domains]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setConsoleDomain(\"\");\n setConsoleDomainValid(true);\n setMinioDomains([\"\"]);\n setMinioDomainValid([true]);\n };\n\n const updateDomainsList = () => {\n setIsSending(true);\n\n let payload = {\n domains: {\n console: consoleDomain,\n minio: minioDomains.filter((minioDomain) => minioDomain.trim() !== \"\"),\n },\n };\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}/domains`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Domains updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setIsSending(false);\n dispatch(setModalErrorSnackMessage(error));\n });\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const cloneDomains = [...minioDomains];\n cloneDomains[index] = value;\n\n setMinioDomains(cloneDomains);\n };\n\n const addNewMinIODomain = () => {\n const cloneDomains = [...minioDomains];\n const cloneValidations = [...minioDomainValid];\n\n cloneDomains.push(\"\");\n cloneValidations.push(true);\n\n setMinioDomains(cloneDomains);\n setMinioDomainValid(cloneValidations);\n };\n\n const removeMinIODomain = (removeIndex: number) => {\n const filteredDomains = minioDomains.filter(\n (_, index) => index !== removeIndex,\n );\n\n const filterValidations = minioDomainValid.filter(\n (_, index) => index !== removeIndex,\n );\n\n setMinioDomains(filteredDomains);\n setMinioDomainValid(filterValidations);\n };\n\n const setMinioDomainValidation = (domainValid: boolean, index: number) => {\n const cloneValidation = [...minioDomainValid];\n cloneValidation[index] = domainValid;\n\n setMinioDomainValid(cloneValidation);\n };\n return (\n \n \n \n \n
\n ) => {\n setConsoleDomain(e.target.value);\n\n setConsoleDomainValid(e.target.validity.valid);\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\n \"Eg. http://subdomain.domain:port/subpath1/subpath2\"\n }\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?(\\\\/[a-zA-Z0-9\\\\-.\\\\/]*)?$\"\n }\n error={\n !consoleDomainValid\n ? \"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)\"\n : \"\"\n }\n />\n
\n
\n

MinIO Domains

\n
\n {minioDomains.map((domain, index) => {\n return (\n \n ) => {\n updateMinIODomain(e.target.value, index);\n setMinioDomainValidation(\n e.target.validity.valid,\n index,\n );\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?$\"\n }\n error={\n !minioDomainValid[index]\n ? \"MinIO domain format is incorrect (http|https://subdomain.domain)\"\n : \"\"\n }\n />\n
\n \n \n \n
\n\n
\n removeMinIODomain(index)}\n disabled={minioDomains.length <= 1}\n >\n \n \n
\n
\n );\n })}\n
\n \n
\n \n \n !domain).length > 0\n }\n onClick={updateDomainsList}\n label={\"Save\"}\n />\n \n
\n
\n \n );\n};\n\nexport default withStyles(styles)(EditDomains);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { Box, Grid } from \"@mui/material\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport AButton from \"../../Common/AButton/AButton\";\nimport SummaryUsageBar from \"../../Common/UsageBarWrapper/SummaryUsageBar\";\nimport LabelValuePair from \"../../Common/UsageBarWrapper/LabelValuePair\";\nimport SectionTitle from \"../../Common/SectionTitle\";\nimport { Button, DisableIcon, EditIcon, TierOnlineIcon } from \"mds\";\nimport EditDomains from \"./EditDomains\";\nimport { useParams } from \"react-router-dom\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { Tenant } from \"../../../../api/operatorApi\";\n\ninterface ITenantsSummary {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n redState: {\n color: theme.palette.error.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n yellowState: {\n color: theme.palette.warning.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n greenState: {\n color: theme.palette.success.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n greyState: {\n color: \"grey\",\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n linkedSection: {\n color: theme.palette.info.main,\n fontFamily: \"'Inter', sans-serif\",\n },\n autoGeneratedLink: {\n fontStyle: \"italic\",\n },\n ...containerForHeader,\n });\n\nconst healthStatusToClass = (health_status: string = \"red\", classes: any) => {\n return health_status === \"red\"\n ? classes.redState\n : health_status === \"yellow\"\n ? classes.yellowState\n : health_status === \"green\"\n ? classes.greenState\n : classes.greyState;\n};\n\nconst StorageSummary = ({\n tenant,\n classes,\n}: {\n tenant: Tenant | null;\n classes: any;\n}) => {\n if (!tenant) {\n return null;\n }\n\n return (\n \n );\n};\n\nconst getToggle = (toggleValue: boolean, idPrefix = \"\") => {\n if (toggleValue) {\n return ;\n }\n return ;\n};\n\nconst featureRowStyle = {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"10px\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n};\n\nconst featureItemStyleProps = {\n stkProps: {\n sx: {\n flex: 1,\n marginRight: 10,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n \"@media (max-width: 900px)\": {\n marginRight: \"25px\",\n },\n },\n },\n lblProps: {\n style: {\n minWidth: 100,\n },\n },\n};\nconst TenantSummary = ({ classes }: ITenantsSummary) => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const encryptionEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"encryptionEnabled\", false),\n );\n const minioTLS = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"minioTLS\", false),\n );\n const adEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpAdEnabled\", false),\n );\n const oidcEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpOidcEnabled\", false),\n );\n\n const [poolCount, setPoolCount] = useState(0);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n const [editDomainsOpen, setEditDomainsOpen] = useState(false);\n\n useEffect(() => {\n if (tenant) {\n setPoolCount(tenant?.pools?.length || 0);\n setVolumes(\n tenant.pools?.reduce(\n (sum, p) => sum + p.volumes_per_server * p.servers,\n 0,\n ) || 0,\n );\n setInstances(tenant.pools?.reduce((sum, p) => sum + p.servers, 0) || 0);\n }\n }, [tenant]);\n\n const closeEditDomainsModal = (refresh: boolean) => {\n setEditDomainsOpen(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n };\n\n return (\n \n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n }}\n idTenant={tenantName || \"\"}\n namespace={tenantNamespace || \"\"}\n />\n )}\n\n {editDomainsOpen && (\n \n )}\n\n Details\n\n \n\n \n \n \n \n \n \n {\n setUpdateMinioVersion(true);\n }}\n >\n {tenant ? tenant.image : \"\"}\n \n }\n />\n \n \n

\n Domains\n }\n onClick={() => {\n setEditDomainsOpen(true);\n }}\n />\n

\n
\n \n \n {(!tenant?.domains?.console ||\n tenant?.domains?.console === \"\") &&\n !tenant?.endpoints?.console\n ? \"-\"\n : \"\"}\n\n {tenant?.endpoints?.console && (\n \n \n {tenant?.endpoints?.console || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.console &&\n tenant?.domains?.console !== \"\" && (\n \n {tenant?.domains?.console || \"\"}\n \n )}\n
\n }\n />\n \n \n \n {!tenant?.domains?.minio && !tenant?.endpoints?.minio\n ? \"-\"\n : \"\"}\n {tenant?.endpoints?.minio && (\n \n \n {tenant?.endpoints?.minio || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.minio &&\n tenant.domains.minio.map((domain) => {\n return (\n \n \n {domain}\n \n
\n
\n );\n })}\n \n }\n />\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n Features\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(TenantSummary);\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexports.default = _default;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"component\", \"direction\", \"spacing\", \"divider\", \"children\", \"className\", \"useFlexGap\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { deepmerge, unstable_composeClasses as composeClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';\nimport systemStyled from '../styled';\nimport useThemePropsSystem from '../useThemeProps';\nimport { extendSxProp } from '../styleFunctionSx';\nimport createTheme from '../createTheme';\nimport { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from '../breakpoints';\nimport { createUnarySpacing, getValue } from '../spacing';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n});\nfunction useThemePropsDefault(props) {\n return useThemePropsSystem({\n props,\n name: 'MuiStack',\n defaultTheme\n });\n}\n\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n if (index < childrenArray.length - 1) {\n output.push( /*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n return output;\n }, []);\n}\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = _extends({\n display: 'flex',\n flexDirection: 'column'\n }, handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n })));\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n const styleFromPropValue = (propValue, breakpoint) => {\n if (ownerState.useFlexGap) {\n return {\n gap: getValue(transformer, propValue)\n };\n }\n return {\n '& > :not(style) + :not(style)': {\n margin: 0,\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nexport default function createStack(options = {}) {\n const {\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent = defaultCreateStyledComponent,\n useThemeProps = useThemePropsDefault,\n componentName = 'MuiStack'\n } = options;\n const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n };\n const StackRoot = createStyledComponent(style);\n const Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps(inProps);\n const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children,\n className,\n useFlexGap = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = {\n direction,\n spacing,\n useFlexGap\n };\n const classes = useUtilityClasses();\n return /*#__PURE__*/_jsx(StackRoot, _extends({\n as: component,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className)\n }, other, {\n children: divider ? joinChildren(children, divider) : children\n }));\n });\n process.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n children: PropTypes.node,\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n divider: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n } : void 0;\n return Stack;\n}","import PropTypes from 'prop-types';\nimport { createStack } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nconst Stack = createStack({\n createStyledComponent: styled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n }),\n useThemeProps: inProps => useThemeProps({\n props: inProps,\n name: 'MuiStack'\n })\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.\n *\n * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),\n * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.\n *\n * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.\n * @default false\n */\n useFlexGap: PropTypes.bool\n} : void 0;\nexport default Stack;","import createStyled from './createStyled';\nconst styled = createStyled();\nexport default styled;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n"],"names":["withStyles","theme","createStyles","root","padding","margin","border","backgroundColor","textDecoration","cursor","fontSize","color","palette","info","main","fontFamily","_ref","classes","children","rest","_objectWithoutProperties","_excluded","_jsx","_objectSpread","className","deleteDialogStyles","content","paddingBottom","customDialogSize","width","maxWidth","snackBarCommon","onClose","modalOpen","title","_ref$wideLimit","wideLimit","noContentPadding","_ref$titleIcon","titleIcon","dispatch","useAppDispatch","_useState","useState","_useState2","_slicedToArray","openSnackbar","setOpenSnackbar","modalSnackMessage","useSelector","state","system","modalSnackBar","useEffect","setModalSnackMessage","message","type","customSize","paper","fullWidth","detailedErrorMsg","length","_jsxs","Dialog","open","scroll","event","reason","DialogTitle","titleText","closeContainer","IconButton","id","closeButton","onClick","disableRipple","size","CloseIcon","MainError","isModal","Snackbar","snackBarModal","ContentProps","concat","snackBar","errorSnackBar","autoHideDuration","DialogContent","_ref$label","label","_ref$value","value","_ref$orientation","orientation","_ref$stkProps","stkProps","_ref$lblProps","lblProps","_ref$valProps","valProps","Stack","direction","xs","sm","style","marginRight","fontWeight","totalValue","sizeItems","_ref$bgColor","bgColor","height","borderRadius","display","transitionDuration","overflow","map","sizeElement","index","itemPercentage","toString","totalCapacity","usedSpaceVariants","statusClass","_ref$render","render","colors","BGColor","totalUsedSpace","reduce","acc","currValue","emptySpace","tiersList","standardTier","find","tier","variant","filter","standardTierColor","usedPercentage","plotValues","_toConsumableArray","plotValuesForUsageBar","plotVal","itemName","marginBottom","UsageBar","position","right","top","zIndex","CircleIcon","left","transform","isNaN","niceBytesInt","PieChart","Pie","data","cx","cy","dataKey","outerRadius","innerRadius","fill","isAnimationActive","stroke","entry","Cell","infoText","formFieldStyles","modalStyleUtils","closeModalAndRefresh","namespace","idTenant","isSending","setIsSending","_useState3","_useState4","minioImage","setMinioImage","_useState5","_useState6","imageRegistry","setImageRegistry","_useState7","_useState8","imageRegistryEndpoint","setImageRegistryEndpoint","_useState9","_useState10","imageRegistryUsername","setImageRegistryUsername","_useState11","_useState12","imageRegistryPassword","setImageRegistryPassword","_useState13","_useState14","validMinioImage","setValidMinioImage","validateImage","useCallback","fieldToCheck","pattern","RegExp","test","ModalWrapper","Grid","container","item","modalFormScrollable","formFieldRow","InputBoxWrapper","name","placeholder","onChange","e","target","FormSwitchWrapper","checked","indicatorLabels","Fragment","modalButtonBar","Button","disabled","trim","payload","image","registry","image_registry","username","password","api","invoke","then","setSnackBarMessage","catch","error","setModalErrorSnackMessage","_tenant$status","_tenant$status$usage","_tenant$status2","_tenant$status2$usage","_tenant$status3","_tenant$status3$usage","tenant","healthStatus","loading","raw","unit","capacity","used","localUse","tieredUse","status","usage","parts","niceBytes","split","capacity_usage","spaceVariants","tiers","itemTenant","internalUsage","sum","tieredUsage","partsInternal","_tenant$status4","_tenant$status4$usage","React","textAlign","Loader","_tenant$status5","_tenant$status5$usage","ErrorBlock","errorMessage","withBreak","TenantCapacity","spacing","md","alignItems","LabelValuePair","renderComponent","domainInline","overlayAction","marginLeft","background","domains","consoleDomain","setConsoleDomain","minioDomains","setMinioDomains","consoleDomainValid","setConsoleDomainValid","minioDomainValid","setMinioDomainValid","consoleDomainSet","console","consoleRegExp","minio","minioRegExp","initialValidations","domain","addNewMinIODomain","cloneDomains","cloneValidations","push","configSectionItem","containerItem","validity","valid","updateMinIODomain","domainValid","cloneValidation","setMinioDomainValidation","AddIcon","removeIndex","filteredDomains","_","filterValidations","removeMinIODomain","RemoveIcon","minioDomain","healthStatusToClass","health_status","arguments","undefined","redState","yellowState","greenState","greyState","StorageSummary","SummaryUsageBar","getToggle","toggleValue","TierOnlineIcon","DisableIcon","featureRowStyle","justifyContent","marginTop","flexFlow","featureItemStyleProps","sx","flex","minWidth","tenantDetailsStyles","warning","success","linkedSection","autoGeneratedLink","fontStyle","containerForHeader","_ref2","_tenant$domains","_tenant$domains2","_tenant$endpoints","_tenant$endpoints2","_tenant$endpoints3","_tenant$endpoints4","_tenant$domains3","_tenant$domains4","_tenant$domains5","_tenant$domains6","_tenant$endpoints5","_tenant$endpoints6","_tenant$domains7","_tenant$endpoints7","_tenant$endpoints8","_tenant$endpoints9","_tenant$endpoints10","_tenant$domains8","_tenant$status6","_tenant$status7","_useParams","useParams","tenantName","tenantNamespace","tenants","tenantInfo","encryptionEnabled","get","minioTLS","adEnabled","oidcEnabled","poolCount","setPoolCount","instances","setInstances","volumes","setVolumes","updateMinioVersion","setUpdateMinioVersion","editDomainsOpen","setEditDomainsOpen","_tenant$pools","_tenant$pools2","_tenant$pools3","pools","p","volumes_per_server","servers","UpdateTenantModal","refresh","getTenantAsync","EditDomains","SectionTitle","separator","currentState","AButton","textOverflow","whiteSpace","wordBreak","icon","EditIcon","endpoints","href","rel","write_quorum","drives_online","drives_offline","Box","_theme$palette","errorBlock","_ref$withBreak","Typography","component","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","defaultTheme","createTheme","defaultCreateStyledComponent","systemStyled","slot","overridesResolver","props","styles","useThemePropsDefault","useThemePropsSystem","joinChildren","childrenArray","toArray","Boolean","output","child","key","ownerState","_extends","flexDirection","handleBreakpoints","resolveBreakpointValues","values","breakpoints","propValue","transformer","createUnarySpacing","base","Object","keys","breakpoint","directionValues","spacingValues","forEach","previousDirectionValue","deepmerge","useFlexGap","gap","getValue","_defineProperty","row","column","mergeBreakpointsInOrder","options","_options$createStyled","createStyledComponent","_options$useThemeProp","useThemeProps","_options$componentNam","componentName","StackRoot","inProps","ref","themeProps","extendSxProp","_props$component","_props$direction","_props$spacing","divider","_props$useFlexGap","other","_objectWithoutPropertiesLoose","composeClasses","generateUtilityClass","as","clsx","createStack","styled","createStyled","componentWillMount","this","constructor","getDerivedStateFromProps","setState","componentWillReceiveProps","nextProps","prevState","bind","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","Component","prototype","isReactComponent","Error","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","displayName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","call","__suppressDeprecationWarning"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/32.322d0e88.chunk.js b/web-app/build/static/js/32.322d0e88.chunk.js deleted file mode 100644 index 2367610e597..00000000000 --- a/web-app/build/static/js/32.322d0e88.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[32],{9505:function(e,n,t){var a=t(29439),i=t(72791),l=t(81207);n.Z=function(e,n){var t=(0,i.useState)(!1),o=(0,a.Z)(t,2),r=o[0],s=o[1];return[r,function(t,a,i,o){s(!0),l.Z.invoke(t,a,i,o).then((function(n){s(!1),e(n)})).catch((function(e){s(!1),n(e)}))}]}},29032:function(e,n,t){t.r(n),t.d(n,{default:function(){return v}});var a=t(29439),i=t(72791),l=t(51691),o=t(21435),r=t(61889),s=t(9505),c=t(40306),u=t(75952),d=t(11135),m=t(25787),f=t(80184),h=(0,m.Z)((function(e){return(0,d.Z)({headerContainer:{backgroundColor:"#e78794",borderRadius:3,marginBottom:20,padding:1,paddingBottom:15},labelHeadline:{color:"#000000",fontSize:14,marginLeft:20},labelText:{color:"#000000",fontSize:14,marginLeft:20,marginRight:40}})}))((function(e){var n=e.classes,t=e.label,a=e.title;return(0,f.jsxs)("div",{className:n.headerContainer,children:[(0,f.jsx)("h4",{className:n.labelHeadline,children:a}),(0,f.jsx)("div",{className:n.labelText,children:t})]})})),p=t(37516),b=t(87995),x=t(41320),v=function(e){var n=e.deleteOpen,t=e.selectedTenant,d=e.closeDeleteModalAndRefresh,m=(0,x.TL)(),v=(0,i.useState)(""),Z=(0,a.Z)(v,2),g=Z[0],j=Z[1],C=(0,i.useState)(!1),T=(0,a.Z)(C,2),k=T[0],D=T[1],w=(0,s.Z)((function(){return d(!0)}),(function(e){return m((0,b.Ih)(e))})),N=(0,a.Z)(w,2),L=N[0],S=N[1];return(0,f.jsx)(c.Z,{title:"Delete Tenant",confirmText:"Delete",isOpen:n,titleIcon:(0,f.jsx)(u.NvT,{}),isLoading:L,onConfirm:function(){g===t.name?S("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.name),{delete_pvcs:k}):(0,b.Ih)({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:function(){return d(!1)},confirmButtonProps:{disabled:g!==t.name||L},confirmationContent:(0,f.jsxs)(l.Z,{children:[k&&(0,f.jsx)(r.ZP,{item:!0,xs:12,children:(0,f.jsx)(h,{title:"WARNING",label:"Delete Volumes: Data will be permanently deleted. Please proceed with caution."})}),"To continue please type ",(0,f.jsx)("b",{children:t.name})," in the box.",(0,f.jsxs)(r.ZP,{item:!0,xs:12,children:[(0,f.jsx)(o.Z,{id:"retype-tenant",name:"retype-tenant",onChange:function(e){j(e.target.value)},label:"",value:g}),(0,f.jsx)("br",{}),(0,f.jsx)(p.Z,{checked:k,id:"delete-volumes",label:"Delete Volumes",name:"delete-volumes",onChange:function(){D(!k)},value:k})]})]})})}}}]); -//# sourceMappingURL=32.322d0e88.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/32.322d0e88.chunk.js.map b/web-app/build/static/js/32.322d0e88.chunk.js.map deleted file mode 100644 index 8ff1e261d63..00000000000 --- a/web-app/build/static/js/32.322d0e88.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/32.322d0e88.chunk.js","mappings":"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","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Common/WarningMessage/WarningMessage.tsx","screens/Console/Tenants/ListTenants/DeleteTenant.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\ninterface IWarningMessage {\n classes: any;\n label: any;\n title: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerContainer: {\n backgroundColor: \"#e78794\",\n borderRadius: 3,\n marginBottom: 20,\n padding: 1,\n paddingBottom: 15,\n },\n labelHeadline: {\n color: \"#000000\",\n fontSize: 14,\n marginLeft: 20,\n },\n labelText: {\n color: \"#000000\",\n fontSize: 14,\n marginLeft: 20,\n marginRight: 40,\n },\n });\n\nconst WarningMessage = ({ classes, label, title }: IWarningMessage) => {\n return (\n
\n

{title}

\n
{label}
\n
\n );\n};\n\nexport default withStyles(styles)(WarningMessage);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { DialogContentText } from \"@mui/material\";\n\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport WarningMessage from \"../../Common/WarningMessage/WarningMessage\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { Tenant } from \"../../../../api/operatorApi\";\n\ninterface IDeleteTenant {\n deleteOpen: boolean;\n selectedTenant: Tenant;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeleteTenant = ({\n deleteOpen,\n selectedTenant,\n closeDeleteModalAndRefresh,\n}: IDeleteTenant) => {\n const dispatch = useAppDispatch();\n const [retypeTenant, setRetypeTenant] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteVolumes, setDeleteVolumes] = useState(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypeTenant !== selectedTenant.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedTenant.namespace}/tenants/${selectedTenant.name}`,\n { delete_pvcs: deleteVolumes },\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypeTenant !== selectedTenant.name || deleteLoading,\n }}\n confirmationContent={\n \n {deleteVolumes && (\n \n \n \n )}\n To continue please type {selectedTenant.name} in the box.\n \n ) => {\n setRetypeTenant(event.target.value);\n }}\n label=\"\"\n value={retypeTenant}\n />\n
\n {\n setDeleteVolumes(!deleteVolumes);\n }}\n value={deleteVolumes}\n />\n
\n
\n }\n />\n );\n};\n\nexport default DeleteTenant;\n"],"names":["onSuccess","onError","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","method","url","data","headers","api","invoke","then","res","catch","err","withStyles","theme","createStyles","headerContainer","backgroundColor","borderRadius","marginBottom","padding","paddingBottom","labelHeadline","color","fontSize","marginLeft","labelText","marginRight","_ref","classes","label","title","_jsxs","className","children","_jsx","deleteOpen","selectedTenant","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypeTenant","setRetypeTenant","_useState3","_useState4","deleteVolumes","setDeleteVolumes","_useApi","useApi","setErrorSnackMessage","_useApi2","deleteLoading","invokeDeleteApi","ConfirmDialog","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","name","concat","namespace","delete_pvcs","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","DialogContentText","Grid","item","xs","WarningMessage","InputBoxWrapper","id","onChange","event","target","value","FormSwitchWrapper","checked"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/32.87cff5d2.chunk.js b/web-app/build/static/js/32.87cff5d2.chunk.js new file mode 100644 index 00000000000..ef8a0c76341 --- /dev/null +++ b/web-app/build/static/js/32.87cff5d2.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[32],{3814:(e,n,l)=>{l.d(n,{I:()=>i,O:()=>t});const t={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},i={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},666:(e,n,l)=>{l.d(n,{Z:()=>c});l(2791);var t=l(9945),i=l(9779),a=l(6444),o=l(6181),r=l.n(o),d=l(184);const s=a.ZP.div((e=>{let{theme:n}=e;return{position:"relative",margin:0,userSelect:"none",appearance:"none",maxWidth:"100%",fontFamily:"'Inter', sans-serif",fontSize:13,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,border:"1px solid ".concat(r()(n,"borderColor","#E2E2E2")),borderRadius:3,padding:"5px 10px","& .certificateName":{display:"flex",alignItems:"center",gap:5,fontWeight:"bold",color:r()(n,"signalColors.main","#07193E")},"& .deleteTagButton":{backgroundColor:"transparent",border:0,display:"flex",alignItems:"center",justifyContent:"center",padding:0,cursor:"pointer",opacity:.6,"&:hover":{opacity:1},"& svg":{fill:r()(n,"tag.grey.background","#07193E"),width:10,height:10,minWidth:10,minHeight:10}},"& .certificateContainer":{margin:"5px 10px"},"& .certificateExpiry":{color:r()(n,"secondaryText","#5B5C5C"),display:"flex",alignItems:"center",flexWrap:"wrap",marginBottom:5,"& .label":{fontWeight:"bold"}},"& .certificateDomains":{color:r()(n,"secondaryText","#5B5C5C"),"& .label":{fontWeight:"bold"}},"& .certificatesList":{border:"1px solid ".concat(r()(n,"borderColor","#E2E2E2")),borderRadius:4,color:r()(n,"secondaryText","#5B5C5C"),textTransform:"lowercase",overflowY:"scroll",maxHeight:145,marginTop:3,marginBottom:5,padding:0,"& li":{listStyle:"none",padding:"5px 10px",margin:0,display:"flex",alignItems:"center","&:before":{content:"' '"}}},"& .certificatesListItem":{padding:"0px 16px",borderBottom:"1px solid ".concat(r()(n,"borderColor","#E2E2E2")),"& div":{minWidth:0},"& svg":{fontSize:12,marginRight:10,opacity:.5},"& span":{fontSize:12}},"& .certificateExpiring":{color:r()(n,"signalColors.warning","#FFBD62"),"& .label":{fontWeight:"bold"}},"& .certificateExpired":{color:r()(n,"signalColors.danger","#C51B3F"),"& .label":{fontWeight:"bold"}},"& .closeIcon":{transform:"scale(0.8)"}}})),c=e=>{let{certificateInfo:n,onDelete:l=(()=>{})}=e;const a=n.domains||[],o=i.ou.fromISO(n.expiry),r=i.ou.utc();let c=0,u="",v="";if(o){let e=o.diff(r);c=e.as("days"),u=e.minus(i.nL.fromObject({days:1})).shiftTo("days").toHuman({listStyle:"long",maximumFractionDigits:0}),c>=10&&c<30&&(v="certificateExpiring"),c<10&&(v="certificateExpired",c<2&&(u=e.minus(i.nL.fromObject({minutes:1})).shiftTo("hours","minutes").toHuman({listStyle:"long",maximumFractionDigits:0}),e.as("minutes")<=1&&(u="EXPIRED")))}return(0,d.jsxs)(s,{children:[(0,d.jsxs)(t.xuv,{children:[(0,d.jsxs)(t.xuv,{className:"certificateName",children:[(0,d.jsx)(t.Baz,{}),(0,d.jsx)("span",{children:n.name})]}),(0,d.jsxs)(t.xuv,{className:"certificateContainer",children:[(0,d.jsxs)(t.xuv,{className:"certificateExpiry",children:[(0,d.jsx)(t.U7Y,{color:"inherit",fontSize:"small"}),"\xa0",(0,d.jsx)("span",{className:"label",children:"Expiry:\xa0"}),(0,d.jsx)("span",{children:o.toFormat("yyyy/MM/dd")})]}),(0,d.jsxs)(t.xuv,{className:"certificateExpiry",children:[(0,d.jsx)(t.wZd,{}),"\xa0",(0,d.jsx)("span",{className:"label",children:"Expires in:\xa0"}),(0,d.jsx)("span",{className:v,children:u})]}),(0,d.jsx)("hr",{style:{marginBottom:12}}),(0,d.jsx)(t.xuv,{className:"certificateDomains",children:(0,d.jsx)("span",{className:"label",children:"".concat(a.length," Domain (s):")})}),(0,d.jsx)("ul",{className:"certificatesList",children:a.map(((e,n)=>(0,d.jsxs)("li",{className:"certificatesListItem",children:[(0,d.jsx)(t.os0,{}),(0,d.jsx)("span",{children:e})]},"".concat(e,"-").concat(n))))})]})]}),(0,d.jsx)(t.hU,{size:"small",onClick:l,className:"closeIcon",children:(0,d.jsx)(t.eEZ,{})})]})}},7032:(e,n,l)=>{l.r(n),l.d(n,{default:()=>h});var t=l(2791),i=l(9945),a=l(3814),o=l(9434),r=l(1320),d=l(4741),s=l(968),c=l(7995),u=l(1207),v=l(3508),p=l(666),m=l(184);const g=e=>{let{items:n=[],title:l=""}=e;return null!==n&&void 0!==n&&n.length?(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)("div",{style:{fontSize:"0.83em",fontWeight:"bold"},children:l}),(0,m.jsx)("div",{style:{display:"flex",gap:"2px",flexFlow:"column",marginLeft:"8px"},children:n.map((e=>(0,m.jsxs)("span",{style:{fontSize:"12px"},children:["- ",e]})))})]}):null},y=e=>{let{policies:n={}}=e;const l=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).map((n=>{const l=e[n]||{};return{name:n||"",identities:l.identities||[],paths:l.paths||[],allow:l.allow||[],deny:l.deny||[]}}))}(n);return l.length?(0,m.jsxs)(i.rjZ,{xs:12,sx:{marginBottom:5},children:[(0,m.jsx)("h4",{children:"Policies"}),(0,m.jsx)(i.xuv,{withBorders:!0,sx:{maxHeight:"200px",overflow:"auto",padding:0},children:l.map((e=>(0,m.jsxs)(i.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",gap:"2px",borderLeft:0,borderRight:0,borderTop:0},children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("b",{style:{fontSize:"0.83em",fontWeight:"bold"},children:"Policy Name:"})," ",e.name]}),(0,m.jsx)(g,{title:"Allow",items:null===e||void 0===e?void 0:e.allow}),(0,m.jsx)(g,{title:"Deny",items:null===e||void 0===e?void 0:e.deny}),(0,m.jsx)(g,{title:"Paths",items:null===e||void 0===e?void 0:e.paths}),(0,m.jsx)(g,{title:"Identities",items:null===e||void 0===e?void 0:e.identities})]})))})]}):null},h=()=>{var e,n,l,g,h,x,_,f,k,j,b,C,S,K,w,I,z,E,A,W,D,R,q,N,F,G,T,V,M,P,Z,B;const L=(0,r.TL)(),U=(0,o.v9)((e=>e.tenants.tenantInfo)),[H,O]=(0,t.useState)("options"),[Y,J]=(0,t.useState)(""),[Q,X]=(0,t.useState)(!1),[$,ee]=(0,t.useState)("vault"),[ne,le]=(0,t.useState)("1"),[te,ie]=(0,t.useState)(""),[ae,oe]=(0,t.useState)(!1),[re,de]=(0,t.useState)({fsGroup:"1000",fsGroupChangePolicy:"Always",runAsGroup:"1000",runAsNonRoot:!0,runAsUser:"1000"}),[se,ce]=(0,t.useState)([]),[ue,ve]=(0,t.useState)(null),[pe,me]=(0,t.useState)(null),[ge,ye]=(0,t.useState)(null),[he,xe]=(0,t.useState)(null),[_e,fe]=(0,t.useState)(null),[ke,je]=(0,t.useState)(!1),[be,Ce]=(0,t.useState)(!1),[Se,Ke]=(0,t.useState)(null),[we,Ie]=(0,t.useState)(null),[ze,Ee]=(0,t.useState)(null),[Ae,We]=(0,t.useState)([]),[De,Re]=(0,t.useState)(!1),[qe,Ne]=(0,t.useState)(null),[Fe,Ge]=(0,t.useState)(null),[Te,Ve]=(0,t.useState)(null),[Me,Pe]=(0,t.useState)(null),[Ze,Be]=(0,t.useState)(null),[Le,Ue]=(0,t.useState)({}),He=e=>{Ue((0,d.h)(Le,e))},[Oe,Ye]=(0,t.useState)(!1);(0,t.useEffect)((()=>{let e=[];if(Q){var n,l,t,i,a,o,r,d,c,u,v,p,m,g,y,h,x,_,f,k,j,b,C,S,K,w,I,z;if(e=[{fieldKey:"replicas",required:!0,value:ne,customValidation:parseInt(ne)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:re.runAsUser,customValidation:""===re.runAsUser||parseInt(re.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:re.runAsGroup,customValidation:""===re.runAsGroup||parseInt(re.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:re.fsGroup,customValidation:""===re.fsGroup||parseInt(re.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}],ke&&(e=[...e,{fieldKey:"serverKey",required:!1,value:(null===Me||void 0===Me?void 0:Me.encoded_key)||""},{fieldKey:"serverCert",required:!1,value:(null===Me||void 0===Me?void 0:Me.encoded_cert)||""},{fieldKey:"clientKey",required:!1,value:(null===ze||void 0===ze?void 0:ze.encoded_key)||""},{fieldKey:"clientCert",required:!1,value:(null===ze||void 0===ze?void 0:ze.encoded_cert)||""}]),"vault"===$)e=[...e,{fieldKey:"vault_endpoint",required:!0,value:null===ue||void 0===ue?void 0:ue.endpoint},{fieldKey:"vault_id",required:!0,value:null===ue||void 0===ue||null===(n=ue.approle)||void 0===n?void 0:n.id},{fieldKey:"vault_secret",required:!0,value:null===ue||void 0===ue||null===(l=ue.approle)||void 0===l?void 0:l.secret},{fieldKey:"vault_ping",required:!1,value:null===ue||void 0===ue||null===(t=ue.status)||void 0===t?void 0:t.ping,customValidation:parseInt(null===ue||void 0===ue||null===(i=ue.status)||void 0===i?void 0:i.ping)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:null===ue||void 0===ue||null===(a=ue.approle)||void 0===a?void 0:a.retry,customValidation:parseInt(null===ue||void 0===ue||null===(o=ue.approle)||void 0===o?void 0:o.retry)<0,customValidationMessage:"Value needs to be 0 or greater"}];if("aws"===$)e=[...e,{fieldKey:"aws_endpoint",required:!0,value:null===pe||void 0===pe||null===(r=pe.secretsmanager)||void 0===r?void 0:r.endpoint},{fieldKey:"aws_region",required:!0,value:null===pe||void 0===pe||null===(d=pe.secretsmanager)||void 0===d?void 0:d.region},{fieldKey:"aws_accessKey",required:!0,value:null===pe||void 0===pe||null===(c=pe.secretsmanager)||void 0===c||null===(u=c.credentials)||void 0===u?void 0:u.accesskey},{fieldKey:"aws_secretKey",required:!0,value:null===pe||void 0===pe||null===(v=pe.secretsmanager)||void 0===v||null===(p=v.credentials)||void 0===p?void 0:p.secretkey}];if("gemalto"===$)e=[...e,{fieldKey:"gemalto_endpoint",required:!0,value:null===ge||void 0===ge||null===(m=ge.keysecure)||void 0===m?void 0:m.endpoint},{fieldKey:"gemalto_token",required:!0,value:null===ge||void 0===ge||null===(g=ge.keysecure)||void 0===g||null===(y=g.credentials)||void 0===y?void 0:y.token},{fieldKey:"gemalto_domain",required:!0,value:null===ge||void 0===ge||null===(h=ge.keysecure)||void 0===h||null===(x=h.credentials)||void 0===x?void 0:x.domain},{fieldKey:"gemalto_retry",required:!1,value:null===ge||void 0===ge||null===(_=ge.keysecure)||void 0===_||null===(f=_.credentials)||void 0===f?void 0:f.retry,customValidation:parseInt(null===ge||void 0===ge||null===(k=ge.keysecure)||void 0===k||null===(j=k.credentials)||void 0===j?void 0:j.retry)<0,customValidationMessage:"Value needs to be 0 or greater"}];if("azure"===$)e=[...e,{fieldKey:"azure_endpoint",required:!0,value:null===he||void 0===he||null===(b=he.keyvault)||void 0===b?void 0:b.endpoint},{fieldKey:"azure_tenant_id",required:!0,value:null===he||void 0===he||null===(C=he.keyvault)||void 0===C||null===(S=C.credentials)||void 0===S?void 0:S.tenant_id},{fieldKey:"azure_client_id",required:!0,value:null===he||void 0===he||null===(K=he.keyvault)||void 0===K||null===(w=K.credentials)||void 0===w?void 0:w.client_id},{fieldKey:"azure_client_secret",required:!0,value:null===he||void 0===he||null===(I=he.keyvault)||void 0===I||null===(z=I.credentials)||void 0===z?void 0:z.client_secret}]}const E=(0,s.R)(e);Re(0===Object.keys(E).length),Ue(E)}),[ke,Q,$,null===Me||void 0===Me?void 0:Me.encoded_key,null===Me||void 0===Me?void 0:Me.encoded_cert,null===ze||void 0===ze?void 0:ze.encoded_key,null===ze||void 0===ze?void 0:ze.encoded_cert,null===Te||void 0===Te?void 0:Te.encoded_key,null===Te||void 0===Te?void 0:Te.encoded_cert,null===Ze||void 0===Ze?void 0:Ze.encoded_key,null===Ze||void 0===Ze?void 0:Ze.encoded_cert,re,ue,pe,ge,he,_e,ne]);const Je=()=>{!ae&&null!==U&&void 0!==U&&U.namespace&&null!==U&&void 0!==U&&U.name&&(oe(!0),u.Z.invoke("GET","/api/v1/namespaces/".concat(null===U||void 0===U?void 0:U.namespace,"/tenants/").concat(null===U||void 0===U?void 0:U.name,"/encryption")).then((e=>{J(e.raw),e.policies&&ce(e.policies),e.vault?(ee("vault"),ve(e.vault)):e.aws?(ee("aws"),me(e.aws)):e.gemalto?(ee("gemalto"),ye(e.gemalto)):e.gcp?(ee("gcp"),fe(e.gcp)):e.azure&&(ee("azure"),xe(e.azure)),X(!0),ie(e.image),le(e.replicas),e.securityContext&&de(e.securityContext),(e.server_tls||e.minio_mtls||e.kms_mtls)&&je(!0),e.server_tls&&Ke(e.server_tls),e.minio_mtls&&Ie(e.minio_mtls),e.kms_mtls&&(Ne(e.kms_mtls.crt),Ge(e.kms_mtls.ca)),oe(!1)})).catch((e=>{console.error(e),oe(!1)})))};(0,t.useEffect)((()=>{Je()}),[U]);const Qe=e=>{We([...Ae,e.name]),e.name===(null===Se||void 0===Se?void 0:Se.name)&&Ke(null),e.name===(null===we||void 0===we?void 0:we.name)&&Ie(null),e.name===(null===qe||void 0===qe?void 0:qe.name)&&Ne(null),e.name===(null===Fe||void 0===Fe?void 0:Fe.name)&&Ge(null)};return(0,m.jsxs)(t.Fragment,{children:[Oe&&(0,m.jsx)(v.Z,{isOpen:Oe,title:Q?"Enable encryption at rest for tenant?":"Disable encryption at rest for tenant?",confirmText:Q?"Enable":"Disable",cancelText:"Cancel",onClose:()=>Ye(!1),onConfirm:()=>{var e,n,l,t,i,a,o,r,d,s,v,p,m,g,y,h,x,_,f,k,j,b,C,S,K,w,I,z,E,A,W,D,R,q,N,F,G,T;if(Q){let V={};switch($){case"gemalto":V={gemalto:{keysecure:{endpoint:(null===ge||void 0===ge||null===(e=ge.keysecure)||void 0===e?void 0:e.endpoint)||"",credentials:{token:(null===ge||void 0===ge||null===(n=ge.keysecure)||void 0===n||null===(l=n.credentials)||void 0===l?void 0:l.token)||"",domain:(null===ge||void 0===ge||null===(t=ge.keysecure)||void 0===t||null===(i=t.credentials)||void 0===i?void 0:i.domain)||"",retry:parseInt(null===ge||void 0===ge||null===(a=ge.keysecure)||void 0===a||null===(o=a.credentials)||void 0===o?void 0:o.retry)}}}};break;case"aws":V={aws:{secretsmanager:{endpoint:(null===pe||void 0===pe||null===(r=pe.secretsmanager)||void 0===r?void 0:r.endpoint)||"",region:(null===pe||void 0===pe||null===(d=pe.secretsmanager)||void 0===d?void 0:d.region)||"",kmskey:(null===pe||void 0===pe||null===(s=pe.secretsmanager)||void 0===s?void 0:s.kmskey)||"",credentials:{accesskey:(null===pe||void 0===pe||null===(v=pe.secretsmanager)||void 0===v||null===(p=v.credentials)||void 0===p?void 0:p.accesskey)||"",secretkey:(null===pe||void 0===pe||null===(m=pe.secretsmanager)||void 0===m||null===(g=m.credentials)||void 0===g?void 0:g.secretkey)||"",token:(null===pe||void 0===pe||null===(y=pe.secretsmanager)||void 0===y||null===(h=y.credentials)||void 0===h?void 0:h.token)||""}}}};break;case"azure":V={azure:{keyvault:{endpoint:(null===he||void 0===he||null===(x=he.keyvault)||void 0===x?void 0:x.endpoint)||"",credentials:{tenant_id:(null===he||void 0===he||null===(_=he.keyvault)||void 0===_||null===(f=_.credentials)||void 0===f?void 0:f.tenant_id)||"",client_id:(null===he||void 0===he||null===(k=he.keyvault)||void 0===k||null===(j=k.credentials)||void 0===j?void 0:j.client_id)||"",client_secret:(null===he||void 0===he||null===(b=he.keyvault)||void 0===b||null===(C=b.credentials)||void 0===C?void 0:C.client_secret)||""}}}};break;case"gcp":V={gcp:{secretmanager:{project_id:(null===_e||void 0===_e||null===(S=_e.secretmanager)||void 0===S?void 0:S.project_id)||"",endpoint:(null===_e||void 0===_e||null===(K=_e.secretmanager)||void 0===K?void 0:K.endpoint)||"",credentials:{client_email:(null===_e||void 0===_e||null===(w=_e.secretmanager)||void 0===w||null===(I=w.credentials)||void 0===I?void 0:I.client_email)||"",client_id:(null===_e||void 0===_e||null===(z=_e.secretmanager)||void 0===z||null===(E=z.credentials)||void 0===E?void 0:E.client_id)||"",private_key_id:(null===_e||void 0===_e||null===(A=_e.secretmanager)||void 0===A||null===(W=A.credentials)||void 0===W?void 0:W.private_key_id)||"",private_key:(null===_e||void 0===_e||null===(D=_e.secretmanager)||void 0===D||null===(R=D.credentials)||void 0===R?void 0:R.private_key)||""}}}};break;case"vault":V={vault:{endpoint:(null===ue||void 0===ue?void 0:ue.endpoint)||"",engine:(null===ue||void 0===ue?void 0:ue.engine)||"",namespace:(null===ue||void 0===ue?void 0:ue.namespace)||"",prefix:(null===ue||void 0===ue?void 0:ue.prefix)||"",approle:{engine:(null===ue||void 0===ue||null===(q=ue.approle)||void 0===q?void 0:q.engine)||"",id:(null===ue||void 0===ue||null===(N=ue.approle)||void 0===N?void 0:N.id)||"",secret:(null===ue||void 0===ue||null===(F=ue.approle)||void 0===F?void 0:F.secret)||"",retry:parseInt(null===ue||void 0===ue||null===(G=ue.approle)||void 0===G?void 0:G.retry)},status:{ping:parseInt(null===ue||void 0===ue||null===(T=ue.status)||void 0===T?void 0:T.ping)}}}}let M={},P={},Z={};null!==ze&&void 0!==ze&&ze.encoded_key&&null!==ze&&void 0!==ze&&ze.encoded_cert&&(P={minio_mtls:{key:null===ze||void 0===ze?void 0:ze.encoded_key,crt:null===ze||void 0===ze?void 0:ze.encoded_cert}}),null!==Me&&void 0!==Me&&Me.encoded_key&&null!==Me&&void 0!==Me&&Me.encoded_cert&&(M={server_tls:{key:null===Me||void 0===Me?void 0:Me.encoded_key,crt:null===Me||void 0===Me?void 0:Me.encoded_cert}});let B=null,O=null;null!==Te&&void 0!==Te&&Te.encoded_key&&null!==Te&&void 0!==Te&&Te.encoded_cert&&(B={key:null===Te||void 0===Te?void 0:Te.encoded_key,crt:null===Te||void 0===Te?void 0:Te.encoded_cert}),null!==Ze&&void 0!==Ze&&Ze.encoded_cert&&(O={ca:null===Ze||void 0===Ze?void 0:Ze.encoded_cert}),(B||O)&&(Z={kms_mtls:{...B,...O}});const J={raw:"raw-edit"===H?Y:"",secretsToBeDeleted:Ae||[],replicas:ne,securityContext:re,image:te,...P,...M,...Z,...V};be||(Ce(!0),u.Z.invoke("PUT","/api/v1/namespaces/".concat(null===U||void 0===U?void 0:U.namespace,"/tenants/").concat(null===U||void 0===U?void 0:U.name,"/encryption"),J).then((()=>{Ye(!1),Ce(!1),Je()})).catch((e=>{Ce(!1),L((0,c.Ih)(e))})))}else be||(Ce(!0),u.Z.invoke("DELETE","/api/v1/namespaces/".concat(null===U||void 0===U?void 0:U.namespace,"/tenants/").concat(null===U||void 0===U?void 0:U.name,"/encryption"),{}).then((()=>{Ye(!1),Ce(!1),Je()})).catch((e=>{Ce(!1),L((0,c.Ih)(e))})))},confirmationContent:(0,m.jsxs)(t.Fragment,{children:[Q?"Data will be encrypted using and external KMS":"Current encrypted information will not be accessible",Q&&(0,m.jsx)(i.J6i,{title:"Warning",message:"The content of the KES config secret will be overwritten.",variant:"warning",sx:{margin:"15px 0"}})]})}),(0,m.jsx)(i.ltY,{containerPadding:!1,withBorders:!1,children:(0,m.jsxs)(i.rjZ,{container:!0,children:[(0,m.jsx)(i.rjZ,{item:!0,xs:!0,children:(0,m.jsx)(i.NZf,{separator:!0,actions:(0,m.jsx)(t.Fragment,{children:(0,m.jsx)(i.rsf,{label:"",indicatorLabels:["Enabled","Disabled"],checked:Q,value:"tenant_encryption",id:"tenant-encryption",name:"tenant-encryption",onChange:()=>{X(!Q)},description:""})}),children:"Encryption"})}),Q&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.rjZ,{item:!0,xs:12,children:(0,m.jsx)(i.mQc,{options:[{tabConfig:{label:"Options",id:"options"},content:(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(y,{policies:se}),(0,m.jsx)(i.Eep,{currentValue:$,id:"encryptionType",name:"encryptionType",label:"KMS",onChange:e=>{ee(e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]}),"vault"===$&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.Wzg,{id:"vault_endpoint",name:"vault_endpoint",onChange:e=>ve({...ue,endpoint:e.target.value}),label:"Endpoint",tooltip:"Endpoint is the Hashicorp Vault endpoint",value:(null===ue||void 0===ue?void 0:ue.endpoint)||"",error:Le.vault_ping||"",required:!0}),(0,m.jsx)(i.Wzg,{id:"vault_engine",name:"vault_engine",onChange:e=>ve({...ue,engine:e.target.value}),label:"Engine",tooltip:"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'",value:(null===ue||void 0===ue?void 0:ue.engine)||""}),(0,m.jsx)(i.Wzg,{id:"vault_namespace",name:"vault_namespace",onChange:e=>ve({...ue,namespace:e.target.value}),label:"Namespace",tooltip:"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.",value:(null===ue||void 0===ue?void 0:ue.namespace)||""}),(0,m.jsx)(i.Wzg,{id:"vault_prefix",name:"vault_prefix",onChange:e=>ve({...ue,prefix:e.target.value}),label:"Prefix",tooltip:"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level",value:(null===ue||void 0===ue?void 0:ue.prefix)||""}),(0,m.jsx)(i.NZf,{children:"App Role"}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"App Role"}),(0,m.jsx)(i.Wzg,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:e=>ve({...ue,approle:{...null===ue||void 0===ue?void 0:ue.approle,engine:e.target.value}}),label:"Engine",tooltip:"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'",value:(null===ue||void 0===ue||null===(e=ue.approle)||void 0===e?void 0:e.engine)||""}),(0,m.jsx)(i.Wzg,{type:"password",id:"vault_id",name:"vault_id",onChange:e=>ve({...ue,approle:{...null===ue||void 0===ue?void 0:ue.approle,id:e.target.value}}),label:"AppRole ID",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:(null===ue||void 0===ue||null===(n=ue.approle)||void 0===n?void 0:n.id)||"",required:!0,error:Le.vault_id||""}),(0,m.jsx)(i.Wzg,{type:"password",id:"vault_secret",name:"vault_secret",onChange:e=>ve({...ue,approle:{...null===ue||void 0===ue?void 0:ue.approle,secret:e.target.value}}),label:"AppRole Secret",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:(null===ue||void 0===ue||null===(l=ue.approle)||void 0===l?void 0:l.secret)||"",required:!0,error:Le.vault_secret||""}),(0,m.jsx)(i.Wzg,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:e=>ve({...ue,approle:{...null===ue||void 0===ue?void 0:ue.approle,retry:e.target.value}}),label:"Retry (Seconds)",error:Le.vault_retry||"",value:(null===ue||void 0===ue||null===(g=ue.approle)||void 0===g?void 0:g.retry)||""})]}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Status"}),(0,m.jsx)(i.Wzg,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:e=>ve({...ue,status:{...null===ue||void 0===ue?void 0:ue.status,ping:e.target.value}}),label:"Ping (Seconds)",tooltip:"controls how often to Vault health status is checked. If not set, defaults to 10s",error:Le.vault_ping||"",value:(null===ue||void 0===ue||null===(h=ue.status)||void 0===h?void 0:h.ping)||""})]})]}),"azure"===$&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.Wzg,{id:"azure_endpoint",name:"azure_endpoint",onChange:e=>xe({...he,keyvault:{...null===he||void 0===he?void 0:he.keyvault,endpoint:e.target.value}}),label:"Endpoint",tooltip:"Endpoint is the Azure KeyVault endpoint",error:Le.azure_endpoint||"",value:(null===he||void 0===he||null===(x=he.keyvault)||void 0===x?void 0:x.endpoint)||""}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Credentials"}),(0,m.jsx)(i.Wzg,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:e=>{var n;return xe({...he,keyvault:{...null===he||void 0===he?void 0:he.keyvault,credentials:{...null===he||void 0===he||null===(n=he.keyvault)||void 0===n?void 0:n.credentials,tenant_id:e.target.value}}})},label:"Tenant ID",tooltip:"TenantID is the ID of the Azure KeyVault tenant",value:(null===he||void 0===he||null===(_=he.keyvault)||void 0===_||null===(f=_.credentials)||void 0===f?void 0:f.tenant_id)||"",error:Le.azure_tenant_id||""}),(0,m.jsx)(i.Wzg,{id:"azure_client_id",name:"azure_client_id",onChange:e=>{var n;return xe({...he,keyvault:{...null===he||void 0===he?void 0:he.keyvault,credentials:{...null===he||void 0===he||null===(n=he.keyvault)||void 0===n?void 0:n.credentials,client_id:e.target.value}}})},label:"Client ID",tooltip:"ClientID is the ID of the client accessing Azure KeyVault",value:(null===he||void 0===he||null===(k=he.keyvault)||void 0===k||null===(j=k.credentials)||void 0===j?void 0:j.client_id)||"",error:Le.azure_client_id||""}),(0,m.jsx)(i.Wzg,{id:"azure_client_secret",name:"azure_client_secret",onChange:e=>{var n;return xe({...he,keyvault:{...null===he||void 0===he?void 0:he.keyvault,credentials:{...null===he||void 0===he||null===(n=he.keyvault)||void 0===n?void 0:n.credentials,client_secret:e.target.value}}})},label:"Client Secret",tooltip:"ClientSecret is the client secret accessing the Azure KeyVault",value:(null===he||void 0===he||null===(b=he.keyvault)||void 0===b||null===(C=b.credentials)||void 0===C?void 0:C.client_secret)||"",error:Le.azure_client_secret||""})]})]}),"gcp"===$&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.Wzg,{id:"gcp_project_id",name:"gcp_project_id",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,project_id:e.target.value}}),label:"Project ID",tooltip:"ProjectID is the GCP project ID",value:(null===_e||void 0===_e?void 0:_e.secretmanager.project_id)||""}),(0,m.jsx)(i.Wzg,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,endpoint:e.target.value}}),label:"Endpoint",tooltip:"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443",value:(null===_e||void 0===_e?void 0:_e.secretmanager.endpoint)||""}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Credentials"}),(0,m.jsx)(i.Wzg,{id:"gcp_client_email",name:"gcp_client_email",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,credentials:{...null===_e||void 0===_e?void 0:_e.secretmanager.credentials,client_email:e.target.value}}}),label:"Client Email",tooltip:"Is the Client email of the GCP service account used to access the SecretManager",value:(null===_e||void 0===_e||null===(S=_e.secretmanager.credentials)||void 0===S?void 0:S.client_email)||""}),(0,m.jsx)(i.Wzg,{id:"gcp_client_id",name:"gcp_client_id",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,credentials:{...null===_e||void 0===_e?void 0:_e.secretmanager.credentials,client_id:e.target.value}}}),label:"Client ID",tooltip:"Is the Client ID of the GCP service account used to access the SecretManager",value:(null===_e||void 0===_e||null===(K=_e.secretmanager.credentials)||void 0===K?void 0:K.client_id)||""}),(0,m.jsx)(i.Wzg,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,credentials:{...null===_e||void 0===_e?void 0:_e.secretmanager.credentials,private_key_id:e.target.value}}}),label:"Private Key ID",tooltip:"Is the private key ID of the GCP service account used to access the SecretManager",value:(null===_e||void 0===_e||null===(w=_e.secretmanager.credentials)||void 0===w?void 0:w.private_key_id)||""}),(0,m.jsx)(i.Wzg,{id:"gcp_private_key",name:"gcp_private_key",onChange:e=>fe({..._e,secretmanager:{...null===_e||void 0===_e?void 0:_e.secretmanager,credentials:{...null===_e||void 0===_e?void 0:_e.secretmanager.credentials,private_key:e.target.value}}}),label:"Private Key",tooltip:"Is the private key of the GCP service account used to access the SecretManager",value:(null===_e||void 0===_e||null===(I=_e.secretmanager.credentials)||void 0===I?void 0:I.private_key)||""})]})]}),"aws"===$&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.Wzg,{id:"aws_endpoint",name:"aws_endpoint",onChange:e=>me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,endpoint:e.target.value}}),label:"Endpoint",tooltip:"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com",value:(null===pe||void 0===pe||null===(z=pe.secretsmanager)||void 0===z?void 0:z.endpoint)||"",required:!0,error:Le.aws_endpoint||""}),(0,m.jsx)(i.Wzg,{id:"aws_region",name:"aws_region",onChange:e=>me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,region:e.target.value}}),label:"Region",tooltip:"Region is the AWS region the SecretsManager is located",value:(null===pe||void 0===pe||null===(E=pe.secretsmanager)||void 0===E?void 0:E.region)||"",error:Le.aws_region||"",required:!0}),(0,m.jsx)(i.Wzg,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:e=>me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,kmskey:e.target.value}}),label:"KMS Key",tooltip:"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used",value:(null===pe||void 0===pe||null===(A=pe.secretsmanager)||void 0===A?void 0:A.kmskey)||""}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Credentials"}),(0,m.jsx)(i.Wzg,{id:"aws_accessKey",name:"aws_accessKey",onChange:e=>{var n;return me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,credentials:{...null===pe||void 0===pe||null===(n=pe.secretsmanager)||void 0===n?void 0:n.credentials,accesskey:e.target.value}}})},label:"Access Key",tooltip:"AccessKey is the access key for authenticating to AWS",value:(null===pe||void 0===pe||null===(W=pe.secretsmanager)||void 0===W||null===(D=W.credentials)||void 0===D?void 0:D.accesskey)||"",error:Le.aws_accessKey||"",required:!0}),(0,m.jsx)(i.Wzg,{id:"aws_secretKey",name:"aws_secretKey",onChange:e=>{var n;return me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,credentials:{...null===pe||void 0===pe||null===(n=pe.secretsmanager)||void 0===n?void 0:n.credentials,secretkey:e.target.value}}})},label:"Secret Key",tooltip:"SecretKey is the secret key for authenticating to AWS",value:(null===pe||void 0===pe||null===(R=pe.secretsmanager)||void 0===R||null===(q=R.credentials)||void 0===q?void 0:q.secretkey)||"",error:Le.aws_secretKey||"",required:!0}),(0,m.jsx)(i.Wzg,{id:"aws_token",name:"aws_token",onChange:e=>{var n;return me({...pe,secretsmanager:{...null===pe||void 0===pe?void 0:pe.secretsmanager,credentials:{...null===pe||void 0===pe||null===(n=pe.secretsmanager)||void 0===n?void 0:n.credentials,token:e.target.value}}})},label:"Token",tooltip:"SessionToken is an optional session token for authenticating to AWS when using STS",value:(null===pe||void 0===pe||null===(N=pe.secretsmanager)||void 0===N||null===(F=N.credentials)||void 0===F?void 0:F.token)||""})]})]}),"gemalto"===$&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.Wzg,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:e=>ye({...ge,keysecure:{...null===ge||void 0===ge?void 0:ge.keysecure,endpoint:e.target.value}}),label:"Endpoint",tooltip:"Endpoint is the endpoint to the KeySecure server",value:(null===ge||void 0===ge||null===(G=ge.keysecure)||void 0===G?void 0:G.endpoint)||"",error:Le.gemalto_endpoint||"",required:!0}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Credentials"}),(0,m.jsx)(i.Wzg,{id:"gemalto_token",name:"gemalto_token",onChange:e=>{var n;return ye({...ge,keysecure:{...null===ge||void 0===ge?void 0:ge.keysecure,credentials:{...null===ge||void 0===ge||null===(n=ge.keysecure)||void 0===n?void 0:n.credentials,token:e.target.value}}})},label:"Token",tooltip:"Token is the refresh authentication token to access the KeySecure server",value:(null===ge||void 0===ge||null===(T=ge.keysecure)||void 0===T||null===(V=T.credentials)||void 0===V?void 0:V.token)||"",error:Le.gemalto_token||"",required:!0}),(0,m.jsx)(i.Wzg,{id:"gemalto_domain",name:"gemalto_domain",onChange:e=>{var n;return ye({...ge,keysecure:{...null===ge||void 0===ge?void 0:ge.keysecure,credentials:{...null===ge||void 0===ge||null===(n=ge.keysecure)||void 0===n?void 0:n.credentials,domain:e.target.value}}})},label:"Domain",tooltip:"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain",value:(null===ge||void 0===ge||null===(M=ge.keysecure)||void 0===M||null===(P=M.credentials)||void 0===P?void 0:P.domain)||"",error:Le.gemalto_domain||"",required:!0}),(0,m.jsx)(i.Wzg,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:e=>{var n;return ye({...ge,keysecure:{...null===ge||void 0===ge?void 0:ge.keysecure,credentials:{...null===ge||void 0===ge||null===(n=ge.keysecure)||void 0===n?void 0:n.credentials,retry:e.target.value}}})},label:"Retry (seconds)",value:(null===ge||void 0===ge||null===(Z=ge.keysecure)||void 0===Z||null===(B=Z.credentials)||void 0===B?void 0:B.retry)||"",error:Le.gemalto_retry||""})]})]})]})},{tabConfig:{label:"Raw Edit",id:"raw-edit"},content:(0,m.jsx)(i.pq4,{value:Y,mode:"yaml",onChange:e=>{J(e)},editorHeight:"550px"})}],onTabClick:e=>O(e),currentTabOrPath:H,horizontal:!0})}),(0,m.jsxs)(i.rjZ,{item:!0,xs:12,children:[(0,m.jsx)(i.NZf,{children:"Additional Configuration for KES"}),(0,m.jsx)(i.Wzg,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:ke,onChange:()=>je(!ke),label:"Custom Certificates"}),ke&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"Encryption server certificates"}),Se?(0,m.jsx)(p.Z,{certificateInfo:Se,onDelete:()=>Qe(Se)}):(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&(Pe({encoded_key:l,id:(null===Me||void 0===Me?void 0:Me.id)||"",key:n||"",cert:(null===Me||void 0===Me?void 0:Me.cert)||"",encoded_cert:(null===Me||void 0===Me?void 0:Me.encoded_cert)||""}),He("serverKey"))},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",value:(null===Me||void 0===Me?void 0:Me.key)||"",returnEncodedData:!0}),(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&(Pe({encoded_key:(null===Me||void 0===Me?void 0:Me.encoded_key)||"",id:(null===Me||void 0===Me?void 0:Me.id)||"",key:(null===Me||void 0===Me?void 0:Me.key)||"",cert:n||"",encoded_cert:l||""}),He("serverCert"))},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",value:(null===Me||void 0===Me?void 0:Me.cert)||"",returnEncodedData:!0})]})]}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"MinIO mTLS certificates (connection between MinIO and the Encryption server)"}),we?(0,m.jsx)(p.Z,{certificateInfo:we,onDelete:()=>Qe(we)}):(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&(Ee({encoded_key:l,id:(null===ze||void 0===ze?void 0:ze.id)||"",key:n||"",cert:(null===ze||void 0===ze?void 0:ze.cert)||"",encoded_cert:(null===ze||void 0===ze?void 0:ze.encoded_cert)||""}),He("clientKey"))},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",value:(null===ze||void 0===ze?void 0:ze.key)||"",returnEncodedData:!0}),(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&(Ee({encoded_key:(null===ze||void 0===ze?void 0:ze.encoded_key)||"",id:(null===ze||void 0===ze?void 0:ze.id)||"",key:(null===ze||void 0===ze?void 0:ze.key)||"",cert:n||"",encoded_cert:l||""}),He("clientCert"))},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",value:(null===ze||void 0===ze?void 0:ze.cert)||"",returnEncodedData:!0})]})]}),(0,m.jsxs)("fieldset",{className:"inputItem",children:[(0,m.jsx)("legend",{children:"KMS mTLS certificates (connection between the Encryption server and the KMS)"}),qe?(0,m.jsx)(p.Z,{certificateInfo:qe,onDelete:()=>Qe(qe)}):(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&Ve({encoded_key:l||"",id:(null===Te||void 0===Te?void 0:Te.id)||"",key:n||"",cert:(null===Te||void 0===Te?void 0:Te.cert)||"",encoded_cert:(null===Te||void 0===Te?void 0:Te.encoded_cert)||""})},accept:".key,.pem",id:"kms_mtls_key",name:"kms_mtls_key",label:"Key",value:(null===Te||void 0===Te?void 0:Te.key)||"",returnEncodedData:!0}),(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&Ve({encoded_key:(null===Te||void 0===Te?void 0:Te.encoded_key)||"",id:(null===Te||void 0===Te?void 0:Te.id)||"",key:(null===Te||void 0===Te?void 0:Te.key)||"",cert:n||"",encoded_cert:l||""})},accept:".cer,.crt,.cert,.pem",id:"kms_mtls_cert",name:"kms_mtls_cert",label:"Cert",value:(null===Te||void 0===Te?void 0:Te.cert)||"",returnEncodedData:!0})]}),Fe?(0,m.jsx)(p.Z,{certificateInfo:Fe,onDelete:()=>Qe(Fe)}):(0,m.jsx)(i.F5R,{onChange:(e,n,l)=>{l&&Be({encoded_key:(null===Ze||void 0===Ze?void 0:Ze.encoded_key)||"",id:(null===Ze||void 0===Ze?void 0:Ze.id)||"",key:(null===Ze||void 0===Ze?void 0:Ze.key)||"",cert:n||"",encoded_cert:l||""})},accept:".cer,.crt,.cert,.pem",id:"kms_mtls_ca",name:"kms_mtls_ca",label:"CA",value:(null===Ze||void 0===Ze?void 0:Ze.cert)||"",returnEncodedData:!0})]})]}),(0,m.jsx)(i.Wzg,{type:"text",id:"image",name:"image",onChange:e=>ie(e.target.value),label:"Image",tooltip:"KES container image",placeholder:"minio/kes:2024-03-01T18-06-46Z",value:te}),(0,m.jsx)(i.Wzg,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:e=>le(e.target.value),label:"Replicas",tooltip:"Numer of KES pod replicas",value:ne,required:!0,error:Le.replicas||""}),(0,m.jsx)(i.NZf,{children:"SecurityContext for KES"}),(0,m.jsxs)(i.xuv,{sx:{display:"flex",alignItems:"center",justifyContent:"flex-start",gap:15,"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}},children:[(0,m.jsx)(i.xuv,{className:"inputItem",children:(0,m.jsx)(i.Wzg,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:e=>{de({...re,runAsUser:e.target.value})},label:"Run As User",value:re.runAsUser,required:!0,error:Le.kes_securityContext_runAsUser||"",min:"0"})}),(0,m.jsx)(i.xuv,{className:"inputItem",children:(0,m.jsx)(i.Wzg,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:e=>{de({...re,runAsGroup:e.target.value})},label:"Run As Group",value:re.runAsGroup,required:!0,error:Le.kes_securityContext_runAsGroup||"",min:"0"})})]}),(0,m.jsx)(i.xuv,{sx:{display:"flex",alignItems:"center",justifyContent:"flex-start",gap:15,"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}},children:(0,m.jsx)(i.xuv,{className:"inputItem",children:(0,m.jsx)(i.Wzg,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:e=>{de({...re,fsGroup:e.target.value})},label:"FsGroup",value:re.fsGroup,required:!0,error:Le.kes_securityContext_fsGroup||"",min:"0",sx:{marginBottom:12}})})}),(0,m.jsx)(i.Wzg,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:re.runAsNonRoot,onChange:e=>{const n=e.target.checked;de({...re,runAsNonRoot:n})},label:"Do not run as Root"})]})]}),(0,m.jsx)(i.rjZ,{item:!0,xs:12,sx:a.I.modalButtonBar,children:(0,m.jsx)(i.zxk,{id:"save-encryption",type:"submit",variant:"callAction",disabled:!De,onClick:()=>Ye(!0),label:"Save"})})]})})]})}}}]); +//# sourceMappingURL=32.87cff5d2.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/32.87cff5d2.chunk.js.map b/web-app/build/static/js/32.87cff5d2.chunk.js.map new file mode 100644 index 00000000000..1dc02de1838 --- /dev/null +++ b/web-app/build/static/js/32.87cff5d2.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/32.87cff5d2.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/TLSCertificate/TLSCertificate.tsx","screens/Console/Tenants/TenantDetails/KMSPolicyInfo.tsx","screens/Console/Tenants/TenantDetails/TenantEncryption.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n AlertCloseIcon,\n Box,\n CertificateIcon,\n IconButton,\n TimeIcon,\n LanguageIcon,\n EventBusyIcon,\n} from \"mds\";\nimport { DateTime, Duration } from \"luxon\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { ICertificateInfo } from \"../../Tenants/types\";\n\nconst CertificateContainer = styled.div(({ theme }) => ({\n position: \"relative\",\n margin: 0,\n userSelect: \"none\",\n appearance: \"none\",\n maxWidth: \"100%\",\n fontFamily: \"'Inter', sans-serif\",\n fontSize: 13,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 3,\n padding: \"5px 10px\",\n \"& .certificateName\": {\n display: \"flex\",\n alignItems: \"center\",\n gap: 5,\n fontWeight: \"bold\",\n color: get(theme, \"signalColors.main\", \"#07193E\"),\n },\n \"& .deleteTagButton\": {\n backgroundColor: \"transparent\",\n border: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0,\n cursor: \"pointer\",\n opacity: 0.6,\n \"&:hover\": {\n opacity: 1,\n },\n \"& svg\": {\n fill: get(theme, `tag.grey.background`, \"#07193E\"),\n width: 10,\n height: 10,\n minWidth: 10,\n minHeight: 10,\n },\n },\n \"& .certificateContainer\": {\n margin: \"5px 10px\",\n },\n \"& .certificateExpiry\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n marginBottom: 5,\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateDomains\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificatesList\": {\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 4,\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n textTransform: \"lowercase\",\n overflowY: \"scroll\",\n maxHeight: 145,\n marginTop: 3,\n marginBottom: 5,\n padding: 0,\n \"& li\": {\n listStyle: \"none\",\n padding: \"5px 10px\",\n margin: 0,\n display: \"flex\",\n alignItems: \"center\",\n \"&:before\": {\n content: \"' '\",\n },\n },\n },\n \"& .certificatesListItem\": {\n padding: \"0px 16px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& div\": {\n minWidth: 0,\n },\n \"& svg\": {\n fontSize: 12,\n marginRight: 10,\n opacity: 0.5,\n },\n \"& span\": {\n fontSize: 12,\n },\n },\n \"& .certificateExpiring\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateExpired\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .closeIcon\": {\n transform: \"scale(0.8)\",\n },\n}));\n\ninterface ITLSCertificate {\n certificateInfo: ICertificateInfo;\n onDelete: any;\n}\n\nconst TLSCertificate = ({\n certificateInfo,\n onDelete = () => {},\n}: ITLSCertificate) => {\n const certificates = certificateInfo.domains || [];\n\n const expiry = DateTime.fromISO(certificateInfo.expiry);\n const now = DateTime.utc();\n // Expose error on Tenant if certificate is near expiration or expired\n let daysToExpiry: number = 0;\n let daysToExpiryHuman: string = \"\";\n let certificateExpiration: string = \"\";\n if (expiry) {\n let durationToExpiry = expiry.diff(now);\n daysToExpiry = durationToExpiry.as(\"days\");\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ days: 1 }))\n .shiftTo(\"days\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (daysToExpiry >= 10 && daysToExpiry < 30) {\n certificateExpiration = \"certificateExpiring\";\n }\n if (daysToExpiry < 10) {\n certificateExpiration = \"certificateExpired\";\n if (daysToExpiry < 2) {\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ minutes: 1 }))\n .shiftTo(\"hours\", \"minutes\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (durationToExpiry.as(\"minutes\") <= 1) {\n daysToExpiryHuman = \"EXPIRED\";\n }\n }\n }\n }\n\n return (\n \n \n \n \n {certificateInfo.name}\n \n \n \n \n  \n Expiry: \n {expiry.toFormat(\"yyyy/MM/dd\")}\n \n \n \n  \n Expires in: \n {daysToExpiryHuman}\n \n
\n \n {`${certificates.length} Domain (s):`}\n \n
    \n {certificates.map((dom, index) => (\n
  • \n \n {dom}\n
  • \n ))}\n
\n
\n
\n \n \n \n
\n );\n};\n\nexport default TLSCertificate;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Grid } from \"mds\";\n\nconst getPolicyData = (policies: Record = {}) => {\n const policyNames = Object.keys(policies);\n return policyNames.map((polName: string) => {\n const policyConfig = policies[polName] || {};\n return {\n name: polName || \"\",\n identities: policyConfig.identities || [],\n // v1 specific\n paths: policyConfig.paths || [],\n // v2 specific\n allow: policyConfig.allow || [],\n deny: policyConfig.deny || [],\n };\n });\n};\n\nconst PolicyItem = ({\n items = [],\n title = \"\",\n}: {\n items: string[];\n title: string;\n}) => {\n return items?.length ? (\n \n \n {title}\n \n \n {items.map((iTxt: string) => {\n return - {iTxt};\n })}\n \n \n ) : null;\n};\n\nconst KMSPolicyInfo = ({\n policies = {},\n}: {\n policies: Record;\n}) => {\n const fmtPolicies = getPolicyData(policies);\n return fmtPolicies.length ? (\n \n

Policies

\n \n {fmtPolicies.map((pConf: Record) => {\n return (\n \n
\n \n Policy Name:\n {\" \"}\n {pConf.name}\n
\n \n \n \n \n \n );\n })}\n \n
\n ) : null;\n};\n\nexport default KMSPolicyInfo;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n CodeEditor,\n FileSelector,\n FormLayout,\n Grid,\n InformativeMessage,\n InputBox,\n RadioGroup,\n SectionTitle,\n Switch,\n Tabs,\n} from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { useSelector } from \"react-redux\";\nimport { ICertificateInfo, ITenantEncryptionResponse } from \"../types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { clearValidationError } from \"../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../utils/validationFunctions\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { SecurityContext } from \"../../../../api/operatorApi\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport KMSPolicyInfo from \"./KMSPolicyInfo\";\n\nconst TenantEncryption = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const [editRawConfiguration, setEditRawConfiguration] =\n useState(\"options\");\n const [encryptionRawConfiguration, setEncryptionRawConfiguration] =\n useState(\"\");\n const [encryptionEnabled, setEncryptionEnabled] = useState(false);\n const [encryptionType, setEncryptionType] = useState(\"vault\");\n const [replicas, setReplicas] = useState(\"1\");\n const [image, setImage] = useState(\"\");\n const [refreshEncryptionInfo, setRefreshEncryptionInfo] =\n useState(false);\n const [securityContext, setSecurityContext] = useState({\n fsGroup: \"1000\",\n fsGroupChangePolicy: \"Always\",\n runAsGroup: \"1000\",\n runAsNonRoot: true,\n runAsUser: \"1000\",\n });\n const [policies, setPolicies] = useState([]);\n const [vaultConfiguration, setVaultConfiguration] = useState(null);\n const [awsConfiguration, setAWSConfiguration] = useState(null);\n const [gemaltoConfiguration, setGemaltoConfiguration] = useState(null);\n const [azureConfiguration, setAzureConfiguration] = useState(null);\n const [gcpConfiguration, setGCPConfiguration] = useState(null);\n const [enabledCustomCertificates, setEnabledCustomCertificates] =\n useState(false);\n const [updatingEncryption, setUpdatingEncryption] = useState(false);\n const [kesServerTLSCertificateSecret, setKesServerTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificateSecret, setMinioMTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificate, setMinioMTLSCertificate] =\n useState(null);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n const [isFormValid, setIsFormValid] = useState(false);\n const [kmsMTLSCertificateSecret, setKmsMTLSCertificateSecret] =\n useState(null);\n const [kmsCACertificateSecret, setKMSCACertificateSecret] =\n useState(null);\n const [kmsMTLSCertificate, setKmsMTLSCertificate] = useState(\n null,\n );\n const [kesServerCertificate, setKESServerCertificate] =\n useState(null);\n const [kmsCACertificate, setKmsCACertificate] = useState(\n null,\n );\n const [validationErrors, setValidationErrors] = useState({});\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (encryptionEnabled) {\n encryptionValidation = [\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: securityContext.runAsUser,\n customValidation:\n securityContext.runAsUser === \"\" ||\n parseInt(securityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: securityContext.runAsGroup,\n customValidation:\n securityContext.runAsGroup === \"\" ||\n parseInt(securityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: securityContext.fsGroup!,\n customValidation:\n securityContext.fsGroup === \"\" ||\n parseInt(securityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enabledCustomCertificates) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: false,\n value: kesServerCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"serverCert\",\n required: false,\n value: kesServerCertificate?.encoded_cert || \"\",\n },\n {\n fieldKey: \"clientKey\",\n required: false,\n value: minioMTLSCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"clientCert\",\n required: false,\n value: minioMTLSCertificate?.encoded_cert || \"\",\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultConfiguration?.endpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultConfiguration?.approle?.id,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultConfiguration?.approle?.secret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultConfiguration?.status?.ping,\n customValidation: parseInt(vaultConfiguration?.status?.ping) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultConfiguration?.approle?.retry,\n customValidation: parseInt(vaultConfiguration?.approle?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsConfiguration?.secretsmanager?.endpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsConfiguration?.secretsmanager?.region,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.accesskey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.secretkey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.endpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.token,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.domain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoConfiguration?.keysecure?.credentials?.retry,\n customValidation:\n parseInt(gemaltoConfiguration?.keysecure?.credentials?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"azure\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureConfiguration?.keyvault?.endpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.tenant_id,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_id,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_secret,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n setIsFormValid(Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enabledCustomCertificates,\n encryptionEnabled,\n encryptionType,\n kesServerCertificate?.encoded_key,\n kesServerCertificate?.encoded_cert,\n minioMTLSCertificate?.encoded_key,\n minioMTLSCertificate?.encoded_cert,\n kmsMTLSCertificate?.encoded_key,\n kmsMTLSCertificate?.encoded_cert,\n kmsCACertificate?.encoded_key,\n kmsCACertificate?.encoded_cert,\n securityContext,\n vaultConfiguration,\n awsConfiguration,\n gemaltoConfiguration,\n azureConfiguration,\n gcpConfiguration,\n replicas,\n ]);\n\n const fetchEncryptionInfo = () => {\n if (!refreshEncryptionInfo && tenant?.namespace && tenant?.name) {\n setRefreshEncryptionInfo(true);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n )\n .then((resp: ITenantEncryptionResponse) => {\n setEncryptionRawConfiguration(resp.raw);\n if (resp.policies) {\n setPolicies(resp.policies);\n }\n if (resp.vault) {\n setEncryptionType(\"vault\");\n setVaultConfiguration(resp.vault);\n } else if (resp.aws) {\n setEncryptionType(\"aws\");\n setAWSConfiguration(resp.aws);\n } else if (resp.gemalto) {\n setEncryptionType(\"gemalto\");\n setGemaltoConfiguration(resp.gemalto);\n } else if (resp.gcp) {\n setEncryptionType(\"gcp\");\n setGCPConfiguration(resp.gcp);\n } else if (resp.azure) {\n setEncryptionType(\"azure\");\n setAzureConfiguration(resp.azure);\n }\n\n setEncryptionEnabled(true);\n setImage(resp.image);\n setReplicas(resp.replicas);\n if (resp.securityContext) {\n setSecurityContext(resp.securityContext);\n }\n if (resp.server_tls || resp.minio_mtls || resp.kms_mtls) {\n setEnabledCustomCertificates(true);\n }\n if (resp.server_tls) {\n setKesServerTLSCertificateSecret(resp.server_tls);\n }\n if (resp.minio_mtls) {\n setMinioMTLSCertificateSecret(resp.minio_mtls);\n }\n if (resp.kms_mtls) {\n setKmsMTLSCertificateSecret(resp.kms_mtls.crt);\n setKMSCACertificateSecret(resp.kms_mtls.ca);\n }\n setRefreshEncryptionInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n setRefreshEncryptionInfo(false);\n });\n }\n };\n\n useEffect(() => {\n fetchEncryptionInfo();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tenant]);\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n if (certificateInfo.name === kesServerTLSCertificateSecret?.name) {\n setKesServerTLSCertificateSecret(null);\n }\n if (certificateInfo.name === minioMTLSCertificateSecret?.name) {\n setMinioMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsMTLSCertificateSecret?.name) {\n setKmsMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsCACertificateSecret?.name) {\n setKMSCACertificateSecret(null);\n }\n };\n\n const updateEncryptionConfiguration = () => {\n if (encryptionEnabled) {\n let insertEncrypt = {};\n switch (encryptionType) {\n case \"gemalto\":\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoConfiguration?.keysecure?.endpoint || \"\",\n credentials: {\n token:\n gemaltoConfiguration?.keysecure?.credentials?.token || \"\",\n domain:\n gemaltoConfiguration?.keysecure?.credentials?.domain || \"\",\n retry: parseInt(\n gemaltoConfiguration?.keysecure?.credentials?.retry,\n ),\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsConfiguration?.secretsmanager?.endpoint || \"\",\n region: awsConfiguration?.secretsmanager?.region || \"\",\n kmskey: awsConfiguration?.secretsmanager?.kmskey || \"\",\n credentials: {\n accesskey:\n awsConfiguration?.secretsmanager?.credentials?.accesskey ||\n \"\",\n secretkey:\n awsConfiguration?.secretsmanager?.credentials?.secretkey ||\n \"\",\n token:\n awsConfiguration?.secretsmanager?.credentials?.token || \"\",\n },\n },\n },\n };\n break;\n case \"azure\":\n insertEncrypt = {\n azure: {\n keyvault: {\n endpoint: azureConfiguration?.keyvault?.endpoint || \"\",\n credentials: {\n tenant_id:\n azureConfiguration?.keyvault?.credentials?.tenant_id || \"\",\n client_id:\n azureConfiguration?.keyvault?.credentials?.client_id || \"\",\n client_secret:\n azureConfiguration?.keyvault?.credentials?.client_secret ||\n \"\",\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpConfiguration?.secretmanager?.project_id || \"\",\n endpoint: gcpConfiguration?.secretmanager?.endpoint || \"\",\n credentials: {\n client_email:\n gcpConfiguration?.secretmanager?.credentials\n ?.client_email || \"\",\n client_id:\n gcpConfiguration?.secretmanager?.credentials?.client_id ||\n \"\",\n private_key_id:\n gcpConfiguration?.secretmanager?.credentials\n ?.private_key_id || \"\",\n private_key:\n gcpConfiguration?.secretmanager?.credentials?.private_key ||\n \"\",\n },\n },\n },\n };\n break;\n case \"vault\":\n insertEncrypt = {\n vault: {\n endpoint: vaultConfiguration?.endpoint || \"\",\n engine: vaultConfiguration?.engine || \"\",\n namespace: vaultConfiguration?.namespace || \"\",\n prefix: vaultConfiguration?.prefix || \"\",\n approle: {\n engine: vaultConfiguration?.approle?.engine || \"\",\n id: vaultConfiguration?.approle?.id || \"\",\n secret: vaultConfiguration?.approle?.secret || \"\",\n retry: parseInt(vaultConfiguration?.approle?.retry),\n },\n status: {\n ping: parseInt(vaultConfiguration?.status?.ping),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n let encryptionKMSCertificates: any = {};\n\n // MinIO -> KES (mTLS certificates)\n if (\n minioMTLSCertificate?.encoded_key &&\n minioMTLSCertificate?.encoded_cert\n ) {\n encryptionClientKeyPair = {\n minio_mtls: {\n key: minioMTLSCertificate?.encoded_key,\n crt: minioMTLSCertificate?.encoded_cert,\n },\n };\n }\n\n // KES server certificates\n if (\n kesServerCertificate?.encoded_key &&\n kesServerCertificate?.encoded_cert\n ) {\n encryptionServerKeyPair = {\n server_tls: {\n key: kesServerCertificate?.encoded_key,\n crt: kesServerCertificate?.encoded_cert,\n },\n };\n }\n\n // KES -> KMS (mTLS certificates)\n let kmsMTLSKeyPair = null;\n let kmsCAInsert = null;\n if (kmsMTLSCertificate?.encoded_key && kmsMTLSCertificate?.encoded_cert) {\n kmsMTLSKeyPair = {\n key: kmsMTLSCertificate?.encoded_key,\n crt: kmsMTLSCertificate?.encoded_cert,\n };\n }\n if (kmsCACertificate?.encoded_cert) {\n kmsCAInsert = {\n ca: kmsCACertificate?.encoded_cert,\n };\n }\n if (kmsMTLSKeyPair || kmsCAInsert) {\n encryptionKMSCertificates = {\n kms_mtls: {\n ...kmsMTLSKeyPair,\n ...kmsCAInsert,\n },\n };\n }\n\n const dataSend = {\n raw:\n editRawConfiguration === \"raw-edit\" ? encryptionRawConfiguration : \"\",\n secretsToBeDeleted: certificatesToBeRemoved || [],\n replicas: replicas,\n securityContext: securityContext,\n image: image,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...encryptionKMSCertificates,\n ...insertEncrypt,\n };\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n dataSend,\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n } else {\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n {},\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }\n };\n\n return (\n \n {confirmOpen && (\n setConfirmOpen(false)}\n onConfirm={updateEncryptionConfiguration}\n confirmationContent={\n \n {encryptionEnabled\n ? \"Data will be encrypted using and external KMS\"\n : \"Current encrypted information will not be accessible\"}\n {encryptionEnabled && (\n \n )}\n \n }\n />\n )}\n \n \n \n \n {\n setEncryptionEnabled(!encryptionEnabled);\n }}\n description=\"\"\n />\n \n }\n >\n Encryption\n \n \n {encryptionEnabled && (\n \n \n \n \n {\n setEncryptionType(e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n\n {encryptionType === \"vault\" && (\n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n endpoint: e.target.value,\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultConfiguration?.endpoint || \"\"}\n error={validationErrors[\"vault_ping\"] || \"\"}\n required\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n engine: e.target.value,\n })\n }\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultConfiguration?.engine || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n namespace: e.target.value,\n })\n }\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultConfiguration?.namespace || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n prefix: e.target.value,\n })\n }\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultConfiguration?.prefix || \"\"}\n />\n App Role\n
\n App Role\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n engine: e.target.value,\n },\n })\n }\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={\n vaultConfiguration?.approle?.engine || \"\"\n }\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n id: e.target.value,\n },\n })\n }\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultConfiguration?.approle?.id || \"\"}\n required\n error={validationErrors[\"vault_id\"] || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n secret: e.target.value,\n },\n })\n }\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={\n vaultConfiguration?.approle?.secret || \"\"\n }\n required\n error={validationErrors[\"vault_secret\"] || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n retry: e.target.value,\n },\n })\n }\n label=\"Retry (Seconds)\"\n error={validationErrors[\"vault_retry\"] || \"\"}\n value={\n vaultConfiguration?.approle?.retry || \"\"\n }\n />\n
\n
\n Status\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n status: {\n ...vaultConfiguration?.status,\n ping: e.target.value,\n },\n })\n }\n label=\"Ping (Seconds)\"\n tooltip=\"controls how often to Vault health status is checked. If not set, defaults to 10s\"\n error={validationErrors[\"vault_ping\"] || \"\"}\n value={vaultConfiguration?.status?.ping || \"\"}\n />\n
\n
\n )}\n {encryptionType === \"azure\" && (\n \n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n value={\n azureConfiguration?.keyvault?.endpoint || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n tenant_id: e.target.value,\n },\n },\n })\n }\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.tenant_id || \"\"\n }\n error={\n validationErrors[\"azure_tenant_id\"] || \"\"\n }\n />\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_id || \"\"\n }\n error={\n validationErrors[\"azure_client_id\"] || \"\"\n }\n />\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_secret: e.target.value,\n },\n },\n })\n }\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_secret || \"\"\n }\n error={\n validationErrors[\"azure_client_secret\"] ||\n \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"gcp\" && (\n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n project_id: e.target.value,\n },\n })\n }\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID\"\n value={\n gcpConfiguration?.secretmanager.project_id ||\n \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={\n gcpConfiguration?.secretmanager.endpoint || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_email: e.target.value,\n },\n },\n })\n }\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_email || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_id || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key_id: e.target.value,\n },\n },\n })\n }\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key_id || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key: e.target.value,\n },\n },\n })\n }\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key || \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"aws\" && (\n \n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={\n awsConfiguration?.secretsmanager?.endpoint ||\n \"\"\n }\n required\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n region: e.target.value,\n },\n })\n }\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={\n awsConfiguration?.secretsmanager?.region || \"\"\n }\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n kmskey: e.target.value,\n },\n })\n }\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={\n awsConfiguration?.secretsmanager?.kmskey || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n accesskey: e.target.value,\n },\n },\n })\n }\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.accesskey || \"\"\n }\n error={\n validationErrors[\"aws_accessKey\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n secretkey: e.target.value,\n },\n },\n })\n }\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.secretkey || \"\"\n }\n error={\n validationErrors[\"aws_secretKey\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"SessionToken is an optional session token for authenticating to AWS when using STS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.token || \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"gemalto\" && (\n \n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={\n gemaltoConfiguration?.keysecure?.endpoint ||\n \"\"\n }\n error={\n validationErrors[\"gemalto_endpoint\"] || \"\"\n }\n required\n />\n
\n Credentials\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.token || \"\"\n }\n error={\n validationErrors[\"gemalto_token\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n domain: e.target.value,\n },\n },\n })\n }\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.domain || \"\"\n }\n error={\n validationErrors[\"gemalto_domain\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n retry: e.target.value,\n },\n },\n })\n }\n label=\"Retry (seconds)\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.retry || \"\"\n }\n error={\n validationErrors[\"gemalto_retry\"] || \"\"\n }\n />\n
\n
\n )}\n
\n ),\n },\n {\n tabConfig: { label: \"Raw Edit\", id: \"raw-edit\" },\n content: (\n {\n setEncryptionRawConfiguration(value);\n }}\n editorHeight={\"550px\"}\n />\n ),\n },\n ]}\n onTabClick={(value) => setEditRawConfiguration(value)}\n currentTabOrPath={editRawConfiguration}\n horizontal\n />\n
\n \n Additional Configuration for KES\n \n setEnabledCustomCertificates(!enabledCustomCertificates)\n }\n label={\"Custom Certificates\"}\n />\n {enabledCustomCertificates && (\n \n
\n Encryption server certificates\n {kesServerTLSCertificateSecret ? (\n \n removeCertificate(kesServerTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setKESServerCertificate({\n encoded_key: encodedValue,\n id: kesServerCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kesServerCertificate?.cert || \"\",\n encoded_cert:\n kesServerCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"serverKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n value={kesServerCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setKESServerCertificate({\n encoded_key:\n kesServerCertificate?.encoded_key || \"\",\n id: kesServerCertificate?.id || \"\",\n key: kesServerCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"serverCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n value={kesServerCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n
\n
\n \n MinIO mTLS certificates (connection between MinIO and\n the Encryption server)\n \n {minioMTLSCertificateSecret ? (\n \n removeCertificate(minioMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setMinioMTLSCertificate({\n encoded_key: encodedValue,\n id: minioMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: minioMTLSCertificate?.cert || \"\",\n encoded_cert:\n minioMTLSCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"clientKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n value={minioMTLSCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setMinioMTLSCertificate({\n encoded_key:\n minioMTLSCertificate?.encoded_key || \"\",\n id: minioMTLSCertificate?.id || \"\",\n key: minioMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"clientCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n value={minioMTLSCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n
\n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {kmsMTLSCertificateSecret ? (\n \n removeCertificate(kmsMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setKmsMTLSCertificate({\n encoded_key: encodedValue || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kmsMTLSCertificate?.cert || \"\",\n encoded_cert:\n kmsMTLSCertificate?.encoded_cert || \"\",\n });\n }\n }}\n accept=\".key,.pem\"\n id=\"kms_mtls_key\"\n name=\"kms_mtls_key\"\n label=\"Key\"\n value={kmsMTLSCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setKmsMTLSCertificate({\n encoded_key:\n kmsMTLSCertificate?.encoded_key || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: kmsMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_cert\"\n name=\"kms_mtls_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n {kmsCACertificateSecret ? (\n \n removeCertificate(kmsCACertificateSecret)\n }\n />\n ) : (\n {\n if (encodedValue) {\n setKmsCACertificate({\n encoded_key:\n kmsCACertificate?.encoded_key || \"\",\n id: kmsCACertificate?.id || \"\",\n key: kmsCACertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_ca\"\n name=\"kms_mtls_ca\"\n label=\"CA\"\n value={kmsCACertificate?.cert || \"\"}\n returnEncodedData\n />\n )}\n
\n
\n )}\n ) =>\n setImage(e.target.value)\n }\n label=\"Image\"\n tooltip=\"KES container image\"\n placeholder=\"minio/kes:2024-03-01T18-06-46Z\"\n value={image}\n />\n ) =>\n setReplicas(e.target.value)\n }\n label=\"Replicas\"\n tooltip=\"Numer of KES pod replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n SecurityContext for KES\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsUser: e.target.value,\n });\n }}\n label=\"Run As User\"\n value={securityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsGroup: e.target.value,\n });\n }}\n label=\"Run As Group\"\n value={securityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n fsGroup: e.target.value,\n });\n }}\n label=\"FsGroup\"\n value={securityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n sx={{\n marginBottom: 12,\n }}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setSecurityContext({\n ...securityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n \n )}\n \n setConfirmOpen(true)}\n label={\"Save\"}\n />\n \n \n
\n
\n );\n};\n\nexport default TenantEncryption;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","CertificateContainer","styled","div","_ref","theme","position","margin","userSelect","appearance","maxWidth","fontFamily","gap","border","concat","get","borderRadius","padding","fontWeight","backgroundColor","cursor","opacity","fill","width","height","minWidth","minHeight","flexWrap","textTransform","listStyle","content","borderBottom","transform","_ref2","certificateInfo","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","maximumFractionDigits","minutes","_jsxs","children","Box","className","_jsx","CertificateIcon","name","EventBusyIcon","toFormat","TimeIcon","style","length","map","dom","index","LanguageIcon","IconButton","size","onClick","AlertCloseIcon","PolicyItem","items","title","Fragment","flexFlow","iTxt","policies","fmtPolicies","arguments","undefined","Object","keys","polName","policyConfig","identities","paths","allow","deny","getPolicyData","Grid","xs","sx","withBorders","overflow","pConf","borderLeft","borderRight","borderTop","TenantEncryption","_vaultConfiguration$a9","_vaultConfiguration$a10","_vaultConfiguration$a11","_vaultConfiguration$a12","_vaultConfiguration$s4","_azureConfiguration$k15","_azureConfiguration$k17","_azureConfiguration$k18","_azureConfiguration$k20","_azureConfiguration$k21","_azureConfiguration$k23","_azureConfiguration$k24","_gcpConfiguration$sec11","_gcpConfiguration$sec12","_gcpConfiguration$sec13","_gcpConfiguration$sec14","_awsConfiguration$sec16","_awsConfiguration$sec17","_awsConfiguration$sec18","_awsConfiguration$sec20","_awsConfiguration$sec21","_awsConfiguration$sec23","_awsConfiguration$sec24","_awsConfiguration$sec26","_awsConfiguration$sec27","_gemaltoConfiguration17","_gemaltoConfiguration19","_gemaltoConfiguration20","_gemaltoConfiguration22","_gemaltoConfiguration23","_gemaltoConfiguration25","_gemaltoConfiguration26","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","editRawConfiguration","setEditRawConfiguration","useState","encryptionRawConfiguration","setEncryptionRawConfiguration","encryptionEnabled","setEncryptionEnabled","encryptionType","setEncryptionType","replicas","setReplicas","image","setImage","refreshEncryptionInfo","setRefreshEncryptionInfo","securityContext","setSecurityContext","fsGroup","fsGroupChangePolicy","runAsGroup","runAsNonRoot","runAsUser","setPolicies","vaultConfiguration","setVaultConfiguration","awsConfiguration","setAWSConfiguration","gemaltoConfiguration","setGemaltoConfiguration","azureConfiguration","setAzureConfiguration","gcpConfiguration","setGCPConfiguration","enabledCustomCertificates","setEnabledCustomCertificates","updatingEncryption","setUpdatingEncryption","kesServerTLSCertificateSecret","setKesServerTLSCertificateSecret","minioMTLSCertificateSecret","setMinioMTLSCertificateSecret","minioMTLSCertificate","setMinioMTLSCertificate","certificatesToBeRemoved","setCertificatesToBeRemoved","isFormValid","setIsFormValid","kmsMTLSCertificateSecret","setKmsMTLSCertificateSecret","kmsCACertificateSecret","setKMSCACertificateSecret","kmsMTLSCertificate","setKmsMTLSCertificate","kesServerCertificate","setKESServerCertificate","kmsCACertificate","setKmsCACertificate","validationErrors","setValidationErrors","cleanValidation","fieldName","clearValidationError","confirmOpen","setConfirmOpen","useEffect","encryptionValidation","_vaultConfiguration$a","_vaultConfiguration$a2","_vaultConfiguration$s","_vaultConfiguration$s2","_vaultConfiguration$a3","_vaultConfiguration$a4","_awsConfiguration$sec","_awsConfiguration$sec2","_awsConfiguration$sec3","_awsConfiguration$sec4","_awsConfiguration$sec5","_awsConfiguration$sec6","_gemaltoConfiguration","_gemaltoConfiguration2","_gemaltoConfiguration3","_gemaltoConfiguration4","_gemaltoConfiguration5","_gemaltoConfiguration6","_gemaltoConfiguration7","_gemaltoConfiguration8","_gemaltoConfiguration9","_azureConfiguration$k","_azureConfiguration$k2","_azureConfiguration$k3","_azureConfiguration$k4","_azureConfiguration$k5","_azureConfiguration$k6","_azureConfiguration$k7","fieldKey","required","value","customValidation","parseInt","customValidationMessage","encoded_key","encoded_cert","endpoint","approle","id","secret","status","ping","retry","secretsmanager","region","credentials","accesskey","secretkey","keysecure","token","domain","keyvault","tenant_id","client_id","client_secret","commonVal","commonFormValidation","fetchEncryptionInfo","namespace","api","invoke","then","resp","raw","vault","aws","gemalto","gcp","azure","server_tls","minio_mtls","kms_mtls","crt","ca","catch","err","console","error","removeCertificate","React","ConfirmDialog","isOpen","confirmText","cancelText","onClose","onConfirm","updateEncryptionConfiguration","_gemaltoConfiguration10","_gemaltoConfiguration11","_gemaltoConfiguration12","_gemaltoConfiguration13","_gemaltoConfiguration14","_gemaltoConfiguration15","_gemaltoConfiguration16","_awsConfiguration$sec7","_awsConfiguration$sec8","_awsConfiguration$sec9","_awsConfiguration$sec10","_awsConfiguration$sec11","_awsConfiguration$sec12","_awsConfiguration$sec13","_awsConfiguration$sec14","_awsConfiguration$sec15","_azureConfiguration$k8","_azureConfiguration$k9","_azureConfiguration$k10","_azureConfiguration$k11","_azureConfiguration$k12","_azureConfiguration$k13","_azureConfiguration$k14","_gcpConfiguration$sec","_gcpConfiguration$sec2","_gcpConfiguration$sec3","_gcpConfiguration$sec4","_gcpConfiguration$sec5","_gcpConfiguration$sec6","_gcpConfiguration$sec7","_gcpConfiguration$sec8","_gcpConfiguration$sec9","_gcpConfiguration$sec10","_vaultConfiguration$a5","_vaultConfiguration$a6","_vaultConfiguration$a7","_vaultConfiguration$a8","_vaultConfiguration$s3","insertEncrypt","kmskey","secretmanager","project_id","client_email","private_key_id","private_key","engine","prefix","encryptionServerKeyPair","encryptionClientKeyPair","encryptionKMSCertificates","key","kmsMTLSKeyPair","kmsCAInsert","dataSend","secretsToBeDeleted","setErrorSnackMessage","confirmationContent","InformativeMessage","message","variant","FormLayout","containerPadding","container","item","SectionTitle","separator","actions","Switch","indicatorLabels","checked","onChange","description","Tabs","options","tabConfig","KMSPolicyInfo","RadioGroup","currentValue","e","target","selectorOptions","InputBox","tooltip","type","min","_azureConfiguration$k16","_azureConfiguration$k19","_azureConfiguration$k22","_awsConfiguration$sec19","_awsConfiguration$sec22","_awsConfiguration$sec25","_gemaltoConfiguration18","_gemaltoConfiguration21","_gemaltoConfiguration24","CodeEditor","mode","editorHeight","onTabClick","currentTabOrPath","horizontal","TLSCertificate","FileSelector","event","fileName","encodedValue","cert","accept","returnEncodedData","placeholder","Button","disabled"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/33.8113b137.chunk.js b/web-app/build/static/js/33.8113b137.chunk.js deleted file mode 100644 index 8c385a13ff7..00000000000 --- a/web-app/build/static/js/33.8113b137.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[33],{81806:function(e,t,n){var a=n(1413),i=n(45987),r=(n(72791),n(11135)),s=n(25787),l=n(80184),c=["classes","children"];t.Z=(0,s.Z)((function(e){return(0,r.Z)({root:{padding:0,margin:0,border:0,backgroundColor:"transparent",textDecoration:"underline",cursor:"pointer",fontSize:"inherit",color:e.palette.info.main,fontFamily:"Inter, sans-serif"}})}))((function(e){var t=e.classes,n=e.children,r=(0,i.Z)(e,c);return(0,l.jsx)("button",(0,a.Z)((0,a.Z)({},r),{},{className:t.root,children:n}))}))},75578:function(e,t,n){var a=n(1413),i=n(72791),r=n(80184);t.Z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(n){return(0,r.jsx)(i.Suspense,{fallback:t,children:(0,r.jsx)(e,(0,a.Z)({},n))})}}},27454:function(e,t,n){var a=n(1413),i=n(72791),r=n(96040),s=n(80184);t.Z=function(e){var t=e.tooltip,n=e.children,l=e.errorProps,c=void 0===l?null:l,o=e.placement;return(0,s.jsx)(r.Z,{title:t,placement:o,children:(0,s.jsx)("span",{children:c?(0,i.cloneElement)(n,(0,a.Z)({},c)):n})})}},76033:function(e,t,n){n.r(t),n.d(t,{default:function(){return L}});var a=n(29439),i=n(72791),r=n(75952),s=n(61889),l=n(57482),c=n(57689),o=n(17238),u=n(82295),d=n(45248),h=n(80184),f=function(e){var t=e.label,n=e.value,a=e.unit,r=e.variant,s=void 0===r?"normal":r;return(0,h.jsxs)("div",{style:{margin:"0px 20px"},children:[(0,h.jsxs)("div",{style:{textAlign:"center"},children:[(0,h.jsx)("span",{style:{fontSize:18,color:"normal"===s?"#000":"#999",fontWeight:400},children:n}),a&&(0,h.jsxs)(i.Fragment,{children:[" ",(0,h.jsx)("span",{style:{fontSize:12,color:"#8F9090",fontWeight:"bold"},children:a})]})]}),(0,h.jsx)("div",{style:{textAlign:"center",color:"normal"===s?"#767676":"#bababa",fontSize:12,whiteSpace:"nowrap"},children:t})]})},x=n(74815),p=n(41320),v=(0,n(72455).Z)((function(e){return{redState:{color:e.palette.error.main,"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},yellowState:{color:e.palette.warning.main,"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},greenState:{color:e.palette.success.main,"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},greyState:{color:"grey","& .min-icon":{width:16,height:16,float:"left",marginRight:4}},tenantItem:{border:"1px solid #EAEAEA",marginBottom:16,padding:"15px 30px","&:hover":{backgroundColor:"#FAFAFA",cursor:"pointer"}},titleContainer:{display:"flex",justifyContent:"space-between",width:"100%"},title:{fontSize:18,fontWeight:"bold"},namespaceLabel:{display:"inline-flex",backgroundColor:"#EAEDEF",borderRadius:2,padding:"4px 8px",fontSize:10,marginRight:20},status:{fontSize:12,color:"#8F9090"}}})),m=function(e){var t=e.tenant,n=(0,p.TL)(),a=(0,c.s0)(),l=v(),m={value:"n/a",unit:""},g={value:"n/a",unit:""},j={value:"n/a",unit:""},y={value:"n/a",unit:""},b={value:"n/a",unit:""};if(t.capacity_raw){var Z=(0,d.ae)("".concat(t.capacity_raw),!0).split(" ");m.value=Z[0],m.unit=Z[1]}if(t.capacity){var S=(0,d.ae)("".concat(t.capacity),!0).split(" ");g.value=S[0],g.unit=S[1]}if(t.capacity_usage){var C=(0,d.l5)(t.capacity_usage,!0).split(" ");j.value=C[0],j.unit=C[1]}var w=[];if(t.tiers&&0!==t.tiers.length){var A,F;w=null===(A=t.tiers)||void 0===A?void 0:A.map((function(e){return{value:e.size,variant:e.name}}));var _=null===(F=t.tiers)||void 0===F?void 0:F.filter((function(e){return"internal"===e.type})).reduce((function(e,t){return e+t.size}),0),z=t.tiers.filter((function(e){return"internal"!==e.type})).reduce((function(e,t){return e+t.size}),0),T=(0,d.l5)(z,!0).split(" ");b.value=T[0],b.unit=T[1];var P=(0,d.l5)(_,!0).split(" ");y.value=P[0],y.unit=P[1]}else w=[{value:t.capacity_usage||0,variant:"STANDARD"}];return(0,h.jsx)(i.Fragment,{children:(0,h.jsx)("div",{className:l.tenantItem,id:"list-tenant-".concat(t.name),onClick:function(){n((0,o.V7)({name:t.name,namespace:t.namespace})),n((0,u.v)()),a("/namespaces/".concat(t.namespace,"/tenants/").concat(t.name,"/summary"))},children:(0,h.jsxs)(s.ZP,{container:!0,children:[(0,h.jsxs)(s.ZP,{item:!0,xs:12,className:l.titleContainer,children:[(0,h.jsx)("div",{className:l.title,children:(0,h.jsx)("span",{children:t.name})}),(0,h.jsx)("div",{children:(0,h.jsxs)("span",{className:l.namespaceLabel,children:["Namespace:\xa0",t.namespace]})})]}),(0,h.jsx)(s.ZP,{item:!0,xs:12,sx:{marginTop:2},children:(0,h.jsxs)(s.ZP,{container:!0,children:[(0,h.jsx)(s.ZP,{item:!0,xs:2,children:(0,h.jsx)(x.Z,{totalCapacity:t.capacity||0,usedSpaceVariants:w,statusClass:function(e){switch(e){case"red":return l.redState;case"yellow":return l.yellowState;case"green":return l.greenState;default:return l.greyState}}(t.health_status)})}),(0,h.jsxs)(s.ZP,{item:!0,xs:!0,children:[(0,h.jsxs)(s.ZP,{item:!0,xs:!0,sx:{display:"flex",justifyContent:"flex-start",alignItems:"center",marginTop:"10px"},children:[(0,h.jsx)(f,{label:"Raw Capacity",value:m.value,unit:m.unit}),(0,h.jsx)(f,{label:"Usable Capacity",value:g.value,unit:g.unit}),(0,h.jsx)(f,{label:"Pools",value:"".concat(t.pool_count),variant:"faded"})]}),(0,h.jsx)(s.ZP,{item:!0,xs:12,sx:{paddingLeft:"20px",marginTop:"15px"},children:(0,h.jsxs)("span",{className:l.status,children:[(0,h.jsx)("strong",{children:"State:"})," ",t.currentState]})})]}),(0,h.jsx)(s.ZP,{item:!0,xs:3,children:(0,h.jsx)(i.Fragment,{children:(0,h.jsxs)(s.ZP,{container:!0,children:[(0,h.jsxs)(s.ZP,{item:!0,xs:2,textAlign:"center",justifyContent:"center",justifyItems:"center",children:[(0,h.jsx)(r.FU8,{style:{width:25,color:"rgb(91,91,91)"}}),(0,h.jsx)("div",{style:{color:"rgb(118, 118, 118)",fontSize:12,fontWeight:"400"},children:"Usage"})]}),(0,h.jsx)(s.ZP,{item:!0,xs:1}),(0,h.jsxs)(s.ZP,{item:!0,style:{paddingTop:8},children:[(!t.tiers||0===t.tiers.length)&&(0,h.jsxs)("div",{style:{fontSize:14,fontWeight:400},children:[(0,h.jsxs)("span",{style:{color:"rgb(62,62,62)"},children:["Internal:"," "]})," ","".concat(j.value," ").concat(j.unit)]}),t.tiers&&t.tiers.length>0&&(0,h.jsxs)(i.Fragment,{children:[(0,h.jsxs)("div",{style:{fontSize:14,fontWeight:400},children:[(0,h.jsxs)("span",{style:{color:"rgb(62,62,62)"},children:["Internal:"," "]})," ","".concat(y.value," ").concat(y.unit)]}),(0,h.jsxs)("div",{style:{fontSize:14,fontWeight:400},children:[(0,h.jsxs)("span",{style:{color:"rgb(62,62,62)"},children:["Tiered:"," "]})," ","".concat(b.value," ").concat(b.unit)]})]})]})]})})})]})})]})})})},g=n(81806),j=n(75578),y=n(22338),b=n(79762),Z=n(5171),S={},C=function(e){var t=e.rowRenderFunction,n=e.totalItems,a=e.defaultHeight,r=function(e){var n=e.index,a=e.style;return(0,h.jsx)("div",{style:a,children:t(n)})};return(0,h.jsx)(i.Fragment,{children:(0,h.jsx)(b.Z,{isItemLoaded:function(e){return!!S[e]},loadMoreItems:function(e,t){for(var n=e;n<=t;n++)S[n]=1;for(var a=e;a<=t;a++)S[a]=2},itemCount:n,children:function(e){var t=e.onItemsRendered,i=e.ref;return(0,h.jsx)(Z.qj,{children:function(e){var s=e.width,l=e.height;return(0,h.jsx)(y.t7,{itemSize:a||220,height:l,itemCount:n,width:s,ref:i,onItemsRendered:t,children:r})}})}})})},w=n(4942),A=n(1413),F=n(63466),_=n(27391),z=n(25787),T=n(11135),P=n(23814),R=(0,z.Z)((function(e){return(0,T.Z)({searchField:(0,A.Z)({},P.qg.searchField),adornment:{}})}))((function(e){var t=e.placeholder,n=void 0===t?"":t,a=e.classes,i=e.onChange,s=e.adornmentPosition,l=void 0===s?"end":s,c=e.overrideClass,o=e.value,u=(0,w.Z)({disableUnderline:!0},"".concat(l,"Adornment"),(0,h.jsx)(F.Z,{position:l,className:a.adornment,children:(0,h.jsx)(r.W1M,{})}));return(0,h.jsx)(_.Z,{placeholder:n,className:c||a.searchField,id:"search-resource",label:"",InputProps:u,onChange:function(e){i(e.target.value)},variant:"standard",value:o})})),I=n(74794),k=n(87995),N=n(90673),D=n(27454),E=n(47974),W=n(79626),B=(0,j.Z)(i.lazy((function(){return n.e(798).then(n.bind(n,37798))}))),L=function(){var e=(0,p.TL)(),t=(0,c.s0)(),n=(0,i.useState)(!1),o=(0,a.Z)(n,2),u=o[0],d=o[1],f=(0,i.useState)(""),x=(0,a.Z)(f,2),v=x[0],j=x[1],y=(0,i.useState)([]),b=(0,a.Z)(y,2),Z=b[0],S=b[1],w=(0,i.useState)(!1),A=(0,a.Z)(w,2),F=A[0],_=A[1],z=(0,i.useState)(null),T=(0,a.Z)(z,2),P=T[0],L=T[1],U=(0,i.useState)("name"),M=(0,a.Z)(U,2),V=M[0],K=M[1],q=Z.filter((function(e){return""===v||e.name.indexOf(v)>=0}));q.sort((function(e,t){switch(V){case"capacity":return e.capacity&&t.capacity?e.capacity>t.capacity?1:e.capacityt.capacity_usage?1:e.capacity_usaget.name?1:e.name10?g=[{value:v-j.value,color:"#2781B0",label:"Total Tiers Space"}]:g=n.filter((function(e){return"STANDARD"!==e.variant})).map((function(e,t){return{value:e.value,color:x[t],label:"Tier - ".concat(e.variant)}}));var y="#07193E",b=100*j.value/t;b>=90?y="#C83B51":b>=75&&(y="#FFAB0F");var Z=[{value:j.value,color:y,label:"Used Space by Tenant"}].concat((0,a.Z)(g),[{value:m,color:"bar"===f?p:"transparent",label:"Empty Space"}]);if("bar"===f){var S=Z.map((function(e){return{value:e.value,color:e.color,itemName:e.label}}));return(0,o.jsx)("div",{style:{width:"100%",marginBottom:15},children:(0,o.jsx)(u,{totalValue:t,sizeItems:S,bgColor:p})})}return(0,o.jsxs)("div",{style:{position:"relative",width:110,height:110},children:[(0,o.jsx)("div",{style:{position:"absolute",right:-5,top:15,zIndex:400},className:d,children:(0,o.jsx)(c.J$M,{style:{border:"#fff 2px solid",borderRadius:"100%",width:20,height:20}})}),(0,o.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",fontWeight:"bold",color:"#000",fontSize:11},children:isNaN(v)?"N/A":(0,l.l5)(v)}),(0,o.jsx)("div",{children:(0,o.jsxs)(i.u,{width:110,height:110,children:[(0,o.jsx)(r.b,{data:[{value:100}],cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,fill:p,isAnimationActive:!1,stroke:"none"}),(0,o.jsx)(r.b,{data:Z,cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,children:Z.map((function(e,t){return(0,o.jsx)(s.b,{fill:e.color,stroke:"none"},"cellCapacity-".concat(t))}))})]})})]})}}}]); -//# sourceMappingURL=33.8113b137.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/33.8113b137.chunk.js.map b/web-app/build/static/js/33.8113b137.chunk.js.map deleted file mode 100644 index 1261e58c6da..00000000000 --- a/web-app/build/static/js/33.8113b137.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/33.8113b137.chunk.js","mappings":"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","sources":["screens/Console/Common/AButton/AButton.tsx","screens/Console/Common/Components/withSuspense.tsx","screens/Console/Common/TooltipWrapper/TooltipWrapper.tsx","screens/Console/Tenants/ListTenants/InformationItem.tsx","screens/Console/Tenants/ListTenants/TenantListItem.tsx","screens/Console/Common/VirtualizedList/VirtualizedList.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/ListTenants/ListTenants.tsx","screens/Console/Common/UsageBar/UsageBar.tsx","screens/Console/Tenants/ListTenants/TenantCapacity.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { IconButtonProps } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n padding: 0,\n margin: 0,\n border: 0,\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n fontSize: \"inherit\",\n color: theme.palette.info.main,\n fontFamily: \"Inter, sans-serif\",\n },\n });\n\ninterface IAButton extends IconButtonProps {\n classes: any;\n children: any;\n}\n\nconst AButton = ({ classes, children, ...rest }: IAButton) => {\n return (\n \n );\n};\n\nexport default withStyles(styles)(AButton);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null,\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { cloneElement } from \"react\";\nimport { Tooltip } from \"@mui/material\";\n\ninterface ITooltipWrapperProps {\n tooltip: string;\n children: any;\n errorProps?: any;\n placement?:\n | \"bottom-end\"\n | \"bottom-start\"\n | \"bottom\"\n | \"left-end\"\n | \"left-start\"\n | \"left\"\n | \"right-end\"\n | \"right-start\"\n | \"right\"\n | \"top-end\"\n | \"top-start\"\n | \"top\";\n}\n\nconst TooltipWrapper = ({\n tooltip,\n children,\n errorProps = null,\n placement,\n}: ITooltipWrapperProps) => {\n return (\n \n \n {errorProps ? cloneElement(children, { ...errorProps }) : children}\n \n \n );\n};\n\nexport default TooltipWrapper;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\n\ninterface IInformationItemProps {\n label: string;\n value: string;\n unit?: string;\n variant?: \"normal\" | \"faded\";\n}\n\nconst InformationItem = ({\n label,\n value,\n unit,\n variant = \"normal\",\n}: IInformationItemProps) => {\n return (\n

\n
\n \n {value}\n \n {unit && (\n \n {\" \"}\n \n {unit}\n \n \n )}\n
\n \n {label}\n
\n \n );\n};\n\nexport default InformationItem;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\n\nimport { useNavigate } from \"react-router-dom\";\nimport { Theme } from \"@mui/material/styles\";\nimport { CapacityValues, ValueUnit } from \"./types\";\nimport { setTenantName } from \"../tenantsSlice\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { DrivesIcon } from \"mds\";\nimport { niceBytes, niceBytesInt } from \"../../../../common/utils\";\nimport Grid from \"@mui/material/Grid\";\nimport InformationItem from \"./InformationItem\";\nimport TenantCapacity from \"./TenantCapacity\";\nimport { useAppDispatch } from \"../../../../store\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { TenantList } from \"../../../../api/operatorApi\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n redState: {\n color: theme.palette.error.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n yellowState: {\n color: theme.palette.warning.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n greenState: {\n color: theme.palette.success.main,\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n greyState: {\n color: \"grey\",\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n tenantItem: {\n border: \"1px solid #EAEAEA\",\n marginBottom: 16,\n padding: \"15px 30px\",\n \"&:hover\": {\n backgroundColor: \"#FAFAFA\",\n cursor: \"pointer\",\n },\n },\n titleContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n },\n title: {\n fontSize: 18,\n fontWeight: \"bold\",\n },\n namespaceLabel: {\n display: \"inline-flex\",\n backgroundColor: \"#EAEDEF\",\n borderRadius: 2,\n padding: \"4px 8px\",\n fontSize: 10,\n marginRight: 20,\n },\n status: {\n fontSize: 12,\n color: \"#8F9090\",\n },\n}));\n\nconst TenantListItem = ({ tenant }: { tenant: TenantList }) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const classes = useStyles();\n\n const healthStatusToClass = (health_status: string) => {\n switch (health_status) {\n case \"red\":\n return classes.redState;\n case \"yellow\":\n return classes.yellowState;\n case \"green\":\n return classes.greenState;\n default:\n return classes.greyState;\n }\n };\n\n let raw: ValueUnit = { value: \"n/a\", unit: \"\" };\n let capacity: ValueUnit = { value: \"n/a\", unit: \"\" };\n let used: ValueUnit = { value: \"n/a\", unit: \"\" };\n let localUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n let tieredUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n\n if (tenant.capacity_raw) {\n const b = niceBytes(`${tenant.capacity_raw}`, true);\n const parts = b.split(\" \");\n raw.value = parts[0];\n raw.unit = parts[1];\n }\n if (tenant.capacity) {\n const b = niceBytes(`${tenant.capacity}`, true);\n const parts = b.split(\" \");\n capacity.value = parts[0];\n capacity.unit = parts[1];\n }\n if (tenant.capacity_usage) {\n const b = niceBytesInt(tenant.capacity_usage, true);\n const parts = b.split(\" \");\n used.value = parts[0];\n used.unit = parts[1];\n }\n\n let spaceVariants: CapacityValues[] = [];\n if (!tenant.tiers || tenant.tiers.length === 0) {\n spaceVariants = [\n { value: tenant.capacity_usage || 0, variant: \"STANDARD\" },\n ];\n } else {\n spaceVariants = tenant.tiers?.map((itemTenant) => {\n return { value: itemTenant.size!, variant: itemTenant.name! };\n });\n let internalUsage = tenant.tiers\n ?.filter((itemTenant) => {\n return itemTenant.type === \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n let tieredUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type !== \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n\n const t = niceBytesInt(tieredUsage, true);\n const parts = t.split(\" \");\n tieredUse.value = parts[0];\n tieredUse.unit = parts[1];\n\n const is = niceBytesInt(internalUsage, true);\n const partsInternal = is.split(\" \");\n localUse.value = partsInternal[0];\n localUse.unit = partsInternal[1];\n }\n\n const openTenantDetails = () => {\n dispatch(\n setTenantName({\n name: tenant.name!,\n namespace: tenant.namespace!,\n }),\n );\n dispatch(getTenantAsync());\n navigate(`/namespaces/${tenant.namespace}/tenants/${tenant.name}/summary`);\n };\n\n return (\n \n \n \n \n
\n {tenant.name}\n
\n
\n \n Namespace: {tenant.namespace}\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n State: {tenant.currentState}\n \n \n \n \n \n \n \n \n \n Usage\n \n \n \n \n {(!tenant.tiers || tenant.tiers.length === 0) && (\n \n \n Internal:{\" \"}\n {\" \"}\n {`${used.value} ${used.unit}`}\n \n )}\n\n {tenant.tiers && tenant.tiers.length > 0 && (\n \n \n \n Internal:{\" \"}\n {\" \"}\n {`${localUse.value} ${localUse.unit}`}\n \n \n \n Tiered:{\" \"}\n {\" \"}\n {`${tieredUse.value} ${tieredUse.unit}`}\n \n \n )}\n \n \n \n \n
\n \n \n \n
\n );\n};\n\nexport default TenantListItem;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, ReactElement } from \"react\";\nimport { FixedSizeList as List } from \"react-window\";\nimport InfiniteLoader from \"react-window-infinite-loader\";\nimport { AutoSizer } from \"react-virtualized\";\n\ninterface IVirtualizedList {\n rowRenderFunction: (index: number) => ReactElement | null;\n totalItems: number;\n defaultHeight?: number;\n}\n\nlet itemStatusMap: any = {};\nconst LOADING = 1;\nconst LOADED = 2;\n\nconst VirtualizedList = ({\n rowRenderFunction,\n totalItems,\n defaultHeight,\n}: IVirtualizedList) => {\n const isItemLoaded = (index: any) => !!itemStatusMap[index];\n\n const loadMoreItems = (startIndex: number, stopIndex: number) => {\n for (let index = startIndex; index <= stopIndex; index++) {\n itemStatusMap[index] = LOADING;\n }\n\n for (let index = startIndex; index <= stopIndex; index++) {\n itemStatusMap[index] = LOADED;\n }\n };\n\n const RenderItemLine = ({ index, style }: any) => {\n return
{rowRenderFunction(index)}
;\n };\n\n return (\n \n \n {({ onItemsRendered, ref }) => (\n // @ts-ignore\n \n {({ width, height }) => {\n return (\n \n {RenderItemLine}\n \n );\n }}\n \n )}\n \n \n );\n};\n\nexport default VirtualizedList;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport { SearchIcon } from \"mds\";\nimport TextField from \"@mui/material/TextField\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { searchField } from \"./FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n },\n adornment: {},\n });\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n classes: any;\n onChange: (value: string) => void;\n adornmentPosition?: \"start\" | \"end\";\n overrideClass?: any;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n classes,\n onChange,\n adornmentPosition = \"end\",\n overrideClass,\n value,\n}: SearchBoxProps) => {\n const inputProps = {\n disableUnderline: true,\n [`${adornmentPosition}Adornment`]: (\n \n \n \n ),\n };\n return (\n {\n onChange(e.target.value);\n }}\n variant=\"standard\"\n value={value}\n />\n );\n};\n\nexport default withStyles(styles)(SearchBox);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { AddIcon, Button, HelpBox, RefreshIcon, TenantsIcon } from \"mds\";\nimport Grid from \"@mui/material/Grid\";\nimport { LinearProgress, SelectChangeEvent } from \"@mui/material\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport TenantListItem from \"./TenantListItem\";\nimport AButton from \"../../Common/AButton/AButton\";\n\nimport withSuspense from \"../../Common/Components/withSuspense\";\nimport VirtualizedList from \"../../Common/VirtualizedList/VirtualizedList\";\nimport SearchBox from \"../../Common/SearchBox\";\nimport PageLayout from \"../../Common/Layout/PageLayout\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../../../store\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { api } from \"../../../../api\";\nimport {\n Error,\n HttpResponse,\n ListTenantsResponse,\n TenantList,\n} from \"../../../../api/operatorApi\";\n\nconst CredentialsPrompt = withSuspense(\n React.lazy(() => import(\"../../Common/CredentialsPrompt/CredentialsPrompt\")),\n);\n\nconst ListTenants = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [isLoading, setIsLoading] = useState(false);\n const [filterTenants, setFilterTenants] = useState(\"\");\n const [records, setRecords] = useState([]);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [createdAccount, setCreatedAccount] =\n useState(null);\n const [sortValue, setSortValue] = useState(\"name\");\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setCreatedAccount(null);\n };\n\n const filteredRecords = records.filter((b: any) => {\n if (filterTenants === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterTenants) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n filteredRecords.sort((a, b) => {\n switch (sortValue) {\n case \"capacity\":\n if (!a.capacity || !b.capacity) {\n return 0;\n }\n\n if (a.capacity > b.capacity) {\n return 1;\n }\n\n if (a.capacity < b.capacity) {\n return -1;\n }\n\n return 0;\n case \"usage\":\n if (!a.capacity_usage || !b.capacity_usage) {\n return 0;\n }\n\n if (a.capacity_usage > b.capacity_usage) {\n return 1;\n }\n\n if (a.capacity_usage < b.capacity_usage) {\n return -1;\n }\n\n return 0;\n case \"active_status\":\n if (a.health_status === \"red\" && b.health_status !== \"red\") {\n return 1;\n }\n\n if (a.health_status !== \"red\" && b.health_status === \"red\") {\n return -1;\n }\n\n return 0;\n case \"failing_status\":\n if (a.health_status === \"green\" && b.health_status !== \"green\") {\n return 1;\n }\n\n if (a.health_status !== \"green\" && b.health_status === \"green\") {\n return -1;\n }\n\n return 0;\n default:\n if (a.name! > b.name!) {\n return 1;\n }\n if (a.name! < b.name!) {\n return -1;\n }\n return 0;\n }\n });\n\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api.tenants\n .listAllTenants()\n .then((res: HttpResponse) => {\n if (!res.data) {\n setIsLoading(false);\n return;\n }\n let resTenants: TenantList[] =\n (res.data.tenants as TenantList[]) ?? [];\n\n setRecords(resTenants);\n setIsLoading(false);\n })\n .catch((err) => {\n dispatch(setErrorSnackMessage(err));\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, dispatch]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const renderItemLine = (index: number) => {\n const tenant = filteredRecords[index] || null;\n\n if (tenant) {\n return ;\n }\n\n return null;\n };\n\n return (\n \n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n {\n setFilterTenants(val);\n }}\n value={filterTenants}\n />\n }\n actions={\n \n \n {\n setIsLoading(true);\n }}\n icon={}\n variant={\"regular\"}\n />\n \n \n {\n navigate(\"/tenants/add\");\n }}\n icon={}\n variant={\"callAction\"}\n />\n \n \n }\n />\n \n \n {isLoading && }\n {!isLoading && (\n \n {filteredRecords.length !== 0 && (\n \n \n \n \n Sort by\n \n ) => {\n setSortValue(e.target.value as string);\n }}\n name={\"sort-by\"}\n options={[\n { label: \"Name\", value: \"name\" },\n {\n label: \"Capacity\",\n value: \"capacity\",\n },\n {\n label: \"Usage\",\n value: \"usage\",\n },\n {\n label: \"Active Status\",\n value: \"active_status\",\n },\n {\n label: \"Failing Status\",\n value: \"failing_status\",\n },\n ]}\n />\n \n \n \n \n )}\n {filteredRecords.length === 0 && (\n \n \n }\n title={\"Tenants\"}\n help={\n \n Tenant is the logical structure to represent a MinIO\n deployment. A tenant can have different size and\n configurations from other tenants, even a different\n storage class.\n
\n
\n To get started, \n {\n navigate(\"/tenants/add\");\n }}\n >\n Create a Tenant.\n \n
\n }\n />\n
\n \n )}\n \n )}\n \n \n \n );\n};\n\nexport default ListTenants;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\nexport interface ISizeBarItem {\n value: number;\n itemName: string;\n color: string;\n}\n\nexport interface IUsageBar {\n totalValue: number;\n sizeItems: ISizeBarItem[];\n bgColor?: string;\n}\n\nconst UsageBar = ({\n totalValue,\n sizeItems,\n bgColor = \"#ededed\",\n}: IUsageBar) => {\n return (\n \n {sizeItems.map((sizeElement, index) => {\n const itemPercentage = (sizeElement.value * 100) / totalValue;\n return (\n \n );\n })}\n \n );\n};\n\nexport default UsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Cell, Pie, PieChart } from \"recharts\";\nimport { CapacityValue, CapacityValues } from \"./types\";\nimport { niceBytesInt } from \"../../../../common/utils\";\nimport { CircleIcon } from \"mds\";\nimport UsageBar, { ISizeBarItem } from \"../../Common/UsageBar/UsageBar\";\n\ninterface ITenantCapacity {\n totalCapacity: number;\n usedSpaceVariants: CapacityValues[];\n statusClass: string;\n render?: \"pie\" | \"bar\";\n}\n\nconst TenantCapacity = ({\n totalCapacity,\n usedSpaceVariants,\n statusClass,\n render = \"pie\",\n}: ITenantCapacity) => {\n const colors = [\n \"#8dacd3\",\n \"#bca1ea\",\n \"#92e8d2\",\n \"#efc9ac\",\n \"#97f274\",\n \"#f7d291\",\n \"#71ACCB\",\n \"#f28282\",\n \"#e28cc1\",\n \"#2781B0\",\n ];\n\n const BGColor = \"#ededed\";\n\n const totalUsedSpace = usedSpaceVariants.reduce((acc, currValue) => {\n return acc + currValue.value;\n }, 0);\n\n const emptySpace = totalCapacity - totalUsedSpace;\n\n let tiersList: CapacityValue[] = [];\n\n const standardTier = usedSpaceVariants.find(\n (tier) => tier.variant === \"STANDARD\",\n ) || {\n value: 0,\n variant: \"empty\",\n };\n\n if (usedSpaceVariants.length > 10) {\n const totalUsedByTiers = totalUsedSpace - standardTier.value;\n\n tiersList = [\n { value: totalUsedByTiers, color: \"#2781B0\", label: \"Total Tiers Space\" },\n ];\n } else {\n tiersList = usedSpaceVariants\n .filter((variant) => variant.variant !== \"STANDARD\")\n .map((variant, index) => {\n return {\n value: variant.value,\n color: colors[index],\n label: `Tier - ${variant.variant}`,\n };\n });\n }\n\n let standardTierColor = \"#07193E\";\n\n const usedPercentage = (standardTier.value * 100) / totalCapacity;\n\n if (usedPercentage >= 90) {\n standardTierColor = \"#C83B51\";\n } else if (usedPercentage >= 75) {\n standardTierColor = \"#FFAB0F\";\n }\n\n const plotValues: CapacityValue[] = [\n {\n value: standardTier.value,\n color: standardTierColor,\n label: \"Used Space by Tenant\",\n },\n ...tiersList,\n {\n value: emptySpace,\n color: render === \"bar\" ? BGColor : \"transparent\",\n label: \"Empty Space\",\n },\n ];\n\n if (render === \"bar\") {\n const plotValuesForUsageBar: ISizeBarItem[] = plotValues.map((plotVal) => {\n return {\n value: plotVal.value,\n color: plotVal.color,\n itemName: plotVal.label,\n };\n });\n\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n \n {!isNaN(totalUsedSpace) ? niceBytesInt(totalUsedSpace) : \"N/A\"}\n \n
\n \n \n \n {plotValues.map((entry, index) => (\n \n ))}\n \n \n
\n \n );\n};\n\nexport default TenantCapacity;\n"],"names":["withStyles","theme","createStyles","root","padding","margin","border","backgroundColor","textDecoration","cursor","fontSize","color","palette","info","main","fontFamily","_ref","classes","children","rest","_objectWithoutProperties","_excluded","_jsx","_objectSpread","className","WrappedComponent","fallback","arguments","length","undefined","props","Suspense","tooltip","_ref$errorProps","errorProps","placement","Tooltip","title","cloneElement","label","value","unit","_ref$variant","variant","_jsxs","style","textAlign","fontWeight","Fragment","whiteSpace","useStyles","makeStyles","redState","error","width","height","float","marginRight","yellowState","warning","greenState","success","greyState","tenantItem","marginBottom","titleContainer","display","justifyContent","namespaceLabel","borderRadius","status","tenant","dispatch","useAppDispatch","navigate","useNavigate","raw","capacity","used","localUse","tieredUse","capacity_raw","parts","niceBytes","concat","split","capacity_usage","niceBytesInt","spaceVariants","tiers","_tenant$tiers","_tenant$tiers2","map","itemTenant","size","name","internalUsage","filter","type","reduce","sum","tieredUsage","partsInternal","id","onClick","setTenantName","namespace","getTenantAsync","Grid","container","item","xs","sx","marginTop","TenantCapacity","totalCapacity","usedSpaceVariants","statusClass","health_status","healthStatusToClass","alignItems","InformationItem","pool_count","paddingLeft","currentState","justifyItems","DrivesIcon","paddingTop","itemStatusMap","rowRenderFunction","totalItems","defaultHeight","RenderItemLine","_ref2","index","InfiniteLoader","isItemLoaded","loadMoreItems","startIndex","stopIndex","itemCount","_ref3","onItemsRendered","ref","AutoSizer","_ref4","List","itemSize","searchField","adornment","_ref$placeholder","placeholder","onChange","_ref$adornmentPositio","adornmentPosition","overrideClass","inputProps","_defineProperty","disableUnderline","InputAdornment","position","SearchIcon","TextField","InputProps","e","target","CredentialsPrompt","withSuspense","React","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","_useState3","_useState4","filterTenants","setFilterTenants","_useState5","_useState6","records","setRecords","_useState7","_useState8","showNewCredentials","setShowNewCredentials","_useState9","_useState10","createdAccount","setCreatedAccount","_useState11","_useState12","sortValue","setSortValue","filteredRecords","b","indexOf","sort","a","useEffect","api","tenants","listAllTenants","then","res","data","resTenants","catch","err","setErrorSnackMessage","newServiceAccount","open","closeModal","entity","PageHeaderWrapper","middleComponent","SearchBox","val","actions","TooltipWrapper","Button","icon","RefreshIcon","AddIcon","PageLayout","LinearProgress","maxWidth","flexDirection","SelectWrapper","options","VirtualizedList","TenantListItem","alignContent","HelpBox","iconComponent","TenantsIcon","help","AButton","totalValue","sizeItems","_ref$bgColor","bgColor","transitionDuration","overflow","sizeElement","itemPercentage","toString","_ref$render","render","colors","BGColor","totalUsedSpace","acc","currValue","emptySpace","tiersList","standardTier","find","tier","standardTierColor","usedPercentage","plotValues","_toConsumableArray","plotValuesForUsageBar","plotVal","itemName","UsageBar","right","top","zIndex","CircleIcon","left","transform","isNaN","PieChart","Pie","cx","cy","dataKey","outerRadius","innerRadius","fill","isAnimationActive","stroke","entry","Cell"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/331.483c2ef9.chunk.js b/web-app/build/static/js/331.483c2ef9.chunk.js new file mode 100644 index 00000000000..69c34b3f495 --- /dev/null +++ b/web-app/build/static/js/331.483c2ef9.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[331],{3814:(e,t,n)=>{n.d(t,{I:()=>o,O:()=>a});const a={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},o={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},9505:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(2791),o=n(1207);const s=(e,t)=>{const[n,s]=(0,a.useState)(!1);return[n,(n,a,l,r)=>{s(!0),o.Z.invoke(n,a,l,r).then((t=>{s(!1),e(t)})).catch((e=>{s(!1),t(e)}))}]}},9114:(e,t,n)=>{n.d(t,{Z:()=>s});n(2791);var a=n(9945),o=n(184);const s=e=>{let{placeholder:t="",onChange:n,overrideClass:s,value:l,id:r="search-resource",label:i="",sx:c}=e;return(0,o.jsx)(a.Wzg,{placeholder:t,className:s||"",id:r,label:i,onChange:e=>{n(e.target.value)},value:l,startIcon:(0,o.jsx)(a.W1M,{}),sx:c})}},7331:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});var a=n(2791),o=n(9434),s=n(7689),l=n(9945),r=n(3814),i=n(5248),c=n(1320),d=n(7995),m=n(1207),p=n(9505),u=n(3508),h=n(184);const g=e=>{let{deleteOpen:t,selectedPod:n,closeDeleteModalAndRefresh:o}=e;const s=(0,c.TL)(),[r,i]=(0,a.useState)(""),[m,g]=(0,p.Z)((()=>o(!0)),(e=>s((0,d.Ih)(e))));return(0,h.jsx)(u.Z,{title:"Delete Pod",confirmText:"Delete",isOpen:t,titleIcon:(0,h.jsx)(l.NvT,{}),isLoading:m,onConfirm:()=>{r===n.name?g("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.tenant,"/pods/").concat(n.name)):(0,d.Ih)({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:()=>o(!1),confirmButtonProps:{disabled:r!==n.name||m},confirmationContent:(0,h.jsxs)(a.Fragment,{children:["To continue please type ",(0,h.jsx)("b",{children:n.name})," in the box.",(0,h.jsx)(l.xuv,{sx:{marginTop:15},children:(0,h.jsx)(l.Wzg,{id:"retype-pod",name:"retype-pod",onChange:e=>{i(e.target.value)},label:"",value:r})})]})})};var x=n(7454),f=n(9114);const b=()=>{const e=(0,c.TL)(),t=(0,s.s0)(),{tenantName:n,tenantNamespace:p}=(0,s.UO)(),u=(0,o.v9)((e=>e.tenants.loadingTenant)),[b,j]=(0,a.useState)([]),[y,v]=(0,a.useState)(!0),[C,S]=(0,a.useState)(!1),[w,T]=(0,a.useState)(null),[E,I]=(0,a.useState)(""),[Z,k]=(0,a.useState)(""),[P,L]=(0,a.useState)(!1),[N,z]=(0,a.useState)(!1),[A,B]=(0,a.useState)(!1),[D,R]=(0,a.useState)(!1),[F,K]=(0,a.useState)("");(0,a.useEffect)((()=>{if(N){let e=document.createElement("a");e.setAttribute("href","data:application/gzip;base64,".concat(Z)),e.setAttribute("download",F),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e),z(!1),B(!0)}}),[N,F,Z]);const O=b.filter((e=>e.name.toLowerCase().includes(E.toLowerCase()))),M=[{type:"view",onClick:e=>{t("/namespaces/".concat(p||"","/tenants/").concat(n||"","/pods/").concat(e.name))}},{type:"delete",onClick:e=>{e.tenant=n,e.namespace=p,T(e),S(!0)}}];(0,a.useEffect)((()=>{u&&v(!0)}),[u]),(0,a.useEffect)((()=>{y&&m.Z.invoke("GET","/api/v1/namespaces/".concat(p||"","/tenants/").concat(n||"","/pods")).then((e=>{for(let t=0;t{e((0,d.Ih)({errorMessage:"Error loading pods",detailedError:t.detailedError}))}))}),[y,n,p,e]),(0,a.useEffect)((()=>{P?(k(""),m.Z.invoke("GET","/api/v1/namespaces/".concat(p,"/tenants/").concat(n,"/log-report")).then((async e=>{k(decodeURIComponent(e.blob)),K(e.filename||"tenant-log-report.zip"),L(!1),z(!0),0===e.filename.length||0===e.blob.length?R(!0):R(!1)})).catch((t=>{e((0,d.Ih)(t)),L(!1),R(!0)}))):L(!1)}),[n,p,P,e]);return(0,h.jsxs)(a.Fragment,{children:[C&&(0,h.jsx)(g,{deleteOpen:C,selectedPod:w,closeDeleteModalAndRefresh:e=>{S(!1),v(!0)}}),(0,h.jsx)(l.NZf,{separator:!0,sx:{marginBottom:15},actions:(0,h.jsx)(x.Z,{tooltip:"A report of all tenant logs will be generated as a .zip file and downloaded for analysis. This report can be uploaded to SUBNET to enable our team to best assist you in troubleshooting.",children:(0,h.jsx)(l.zxk,{id:"log_report",onClick:()=>{L(!0)},disabled:0===b.length,children:"Download Log Report"})}),children:"Pods"}),A&&!D&&(0,h.jsx)(l.J6i,{title:"Success",message:"Tenant report downloaded to "+F,variant:"success"}),D&&(0,h.jsx)(l.J6i,{title:"Error",message:"There was a problem generating the report",variant:"error"}),(0,h.jsxs)(l.rjZ,{container:!0,sx:{marginBottom:15},children:[(0,h.jsx)(l.rjZ,{item:!0,xs:4,sx:{display:"flex",alignItems:"center"}}),(0,h.jsx)(l.rjZ,{item:!0,xs:4,sx:{display:"flex",justifyContent:"flex-end",alignItems:"center"}})]}),(0,h.jsx)(l.rjZ,{item:!0,xs:12,sx:r.O.actionsTray,children:(0,h.jsx)(f.Z,{value:E,onChange:e=>{I(e)},placeholder:"Search Pods",id:"search-resource"})}),(0,h.jsx)(l.rjZ,{item:!0,xs:12,children:(0,h.jsx)(l.wQF,{columns:[{label:"Name",elementKey:"name",width:200},{label:"Status",elementKey:"status"},{label:"Age",elementKey:"time"},{label:"Pod IP",elementKey:"podIP"},{label:"Restarts",elementKey:"restarts",renderFunction:e=>null!==e?e:0},{label:"Node",elementKey:"node"}],isLoading:y,records:O,itemActions:M,entityName:"Pods",idField:"name",customPaperHeight:"calc(100vh - 400px)"})})]})}}}]); +//# sourceMappingURL=331.483c2ef9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/331.483c2ef9.chunk.js.map b/web-app/build/static/js/331.483c2ef9.chunk.js.map new file mode 100644 index 00000000000..b7dc2db900b --- /dev/null +++ b/web-app/build/static/js/331.483c2ef9.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/331.483c2ef9.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/Hooks/useApi.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/TenantDetails/DeletePod.tsx","screens/Console/Tenants/TenantDetails/PodsSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { ConfirmDeleteIcon, Box, InputBox } from \"mds\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeletePod {\n deleteOpen: boolean;\n selectedPod: IPodListElement;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeletePod = ({\n deleteOpen,\n selectedPod,\n closeDeleteModalAndRefresh,\n}: IDeletePod) => {\n const dispatch = useAppDispatch();\n const [retypePod, setRetypePod] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePod !== selectedPod.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPod.namespace}/tenants/${selectedPod.tenant}/pods/${selectedPod.name}`,\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePod !== selectedPod.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPod.name} in the box.\n \n ) => {\n setRetypePod(event.target.value);\n }}\n label=\"\"\n value={retypePod}\n />\n \n \n }\n />\n );\n};\n\nexport default DeletePod;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { Button, DataTable, Grid, InformativeMessage, SectionTitle } from \"mds\";\nimport { actionsTray } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport DeletePod from \"./DeletePod\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport SearchBox from \"../../Common/SearchBox\";\n\nconst PodsSummary = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [pods, setPods] = useState([]);\n const [loadingPods, setLoadingPods] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPod, setSelectedPod] = useState(null);\n const [filter, setFilter] = useState(\"\");\n const [logReportFileContent, setLogReportFileContent] = useState(\"\");\n const [startLogReport, setStartLogReport] = useState(false);\n const [downloadReport, setDownloadReport] = useState(false);\n const [downloadSuccess, setDownloadSuccess] = useState(false);\n const [reportError, setReportError] = useState(false);\n const [filename, setFilename] = useState(\"\");\n\n const podViewAction = (pod: IPodListElement) => {\n navigate(\n `/namespaces/${tenantNamespace || \"\"}/tenants/${tenantName || \"\"}/pods/${\n pod.name\n }`,\n );\n return;\n };\n\n useEffect(() => {\n if (downloadReport) {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n `data:application/gzip;base64,${logReportFileContent}`,\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n setDownloadReport(false);\n setDownloadSuccess(true);\n }\n }, [downloadReport, filename, logReportFileContent]);\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n setLoadingPods(true);\n };\n\n const confirmDeletePod = (pod: IPodListElement) => {\n pod.tenant = tenantName;\n pod.namespace = tenantNamespace;\n setSelectedPod(pod);\n setDeleteOpen(true);\n };\n\n const filteredRecords: IPodListElement[] = pods.filter((elementItem) =>\n elementItem.name.toLowerCase().includes(filter.toLowerCase()),\n );\n\n const podTableActions = [\n { type: \"view\", onClick: podViewAction },\n { type: \"delete\", onClick: confirmDeletePod },\n ];\n\n useEffect(() => {\n if (loadingTenant) {\n setLoadingPods(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loadingPods) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace || \"\"}/tenants/${\n tenantName || \"\"\n }/pods`,\n )\n .then((result: IPodListElement[]) => {\n for (let i = 0; i < result.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n result[i].time = niceDays(\n (currentTime - parseInt(result[i].timeCreated)).toString(),\n );\n }\n setPods(result);\n setLoadingPods(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"Error loading pods\",\n detailedError: err.detailedError,\n }),\n );\n });\n }\n }, [loadingPods, tenantName, tenantNamespace, dispatch]);\n\n useEffect(() => {\n if (startLogReport) {\n setLogReportFileContent(\"\");\n\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/log-report`,\n )\n .then(async (res: any) => {\n setLogReportFileContent(decodeURIComponent(res.blob));\n //@ts-ignore\n setFilename(res.filename || \"tenant-log-report.zip\");\n setStartLogReport(false);\n setDownloadReport(true);\n if (res.filename.length === 0 || res.blob.length === 0) {\n setReportError(true);\n } else {\n setReportError(false);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setStartLogReport(false);\n setReportError(true);\n });\n } else {\n // reset start status\n setStartLogReport(false);\n }\n }, [tenantName, tenantNamespace, startLogReport, dispatch]);\n\n const generateTenantLogReport = () => {\n setStartLogReport(true);\n };\n\n return (\n \n {deleteOpen && (\n \n )}\n \n \n Download Log Report\n \n \n }\n >\n Pods\n \n {downloadSuccess && !reportError && (\n \n )}\n\n {reportError && (\n \n )}\n \n \n \n \n \n {\n setFilter(value);\n }}\n placeholder={\"Search Pods\"}\n id=\"search-resource\"\n />\n \n \n {\n return input !== null ? input : 0;\n },\n },\n { label: \"Node\", elementKey: \"node\" },\n ]}\n isLoading={loadingPods}\n records={filteredRecords}\n itemActions={podTableActions}\n entityName=\"Pods\"\n idField=\"name\"\n customPaperHeight={\"calc(100vh - 400px)\"}\n />\n \n \n );\n};\n\nexport default PodsSummary;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","placeholder","onChange","overrideClass","value","id","sx","_jsx","InputBox","className","e","target","startIcon","SearchIcon","deleteOpen","selectedPod","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypePod","setRetypePod","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","tenant","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","Box","event","PodsSummary","navigate","useNavigate","tenantName","tenantNamespace","useParams","loadingTenant","useSelector","state","tenants","pods","setPods","loadingPods","setLoadingPods","setDeleteOpen","setSelectedPod","filter","setFilter","logReportFileContent","setLogReportFileContent","startLogReport","setStartLogReport","downloadReport","setDownloadReport","downloadSuccess","setDownloadSuccess","reportError","setReportError","filename","setFilename","useEffect","element","document","createElement","setAttribute","style","body","appendChild","click","removeChild","filteredRecords","elementItem","toLowerCase","includes","podTableActions","type","onClick","pod","result","i","length","currentTime","Date","now","time","niceDays","parseInt","timeCreated","toString","async","decodeURIComponent","blob","DeletePod","reloadData","SectionTitle","separator","actions","TooltipWrapper","tooltip","Button","generateTenantLogReport","InformativeMessage","message","variant","Grid","container","item","xs","SearchBox","DataTable","columns","elementKey","width","renderFunction","input","records","itemActions","entityName","idField","customPaperHeight"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/332.577d2d47.chunk.js b/web-app/build/static/js/332.577d2d47.chunk.js new file mode 100644 index 00000000000..5536a5eb8c4 --- /dev/null +++ b/web-app/build/static/js/332.577d2d47.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[332],{3814:(e,t,n)=>{n.d(t,{I:()=>s,O:()=>i});const i={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},s={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},666:(e,t,n)=>{n.d(t,{Z:()=>d});n(2791);var i=n(9945),s=n(9779),a=n(6444),r=n(6181),o=n.n(r),c=n(184);const l=a.ZP.div((e=>{let{theme:t}=e;return{position:"relative",margin:0,userSelect:"none",appearance:"none",maxWidth:"100%",fontFamily:"'Inter', sans-serif",fontSize:13,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,border:"1px solid ".concat(o()(t,"borderColor","#E2E2E2")),borderRadius:3,padding:"5px 10px","& .certificateName":{display:"flex",alignItems:"center",gap:5,fontWeight:"bold",color:o()(t,"signalColors.main","#07193E")},"& .deleteTagButton":{backgroundColor:"transparent",border:0,display:"flex",alignItems:"center",justifyContent:"center",padding:0,cursor:"pointer",opacity:.6,"&:hover":{opacity:1},"& svg":{fill:o()(t,"tag.grey.background","#07193E"),width:10,height:10,minWidth:10,minHeight:10}},"& .certificateContainer":{margin:"5px 10px"},"& .certificateExpiry":{color:o()(t,"secondaryText","#5B5C5C"),display:"flex",alignItems:"center",flexWrap:"wrap",marginBottom:5,"& .label":{fontWeight:"bold"}},"& .certificateDomains":{color:o()(t,"secondaryText","#5B5C5C"),"& .label":{fontWeight:"bold"}},"& .certificatesList":{border:"1px solid ".concat(o()(t,"borderColor","#E2E2E2")),borderRadius:4,color:o()(t,"secondaryText","#5B5C5C"),textTransform:"lowercase",overflowY:"scroll",maxHeight:145,marginTop:3,marginBottom:5,padding:0,"& li":{listStyle:"none",padding:"5px 10px",margin:0,display:"flex",alignItems:"center","&:before":{content:"' '"}}},"& .certificatesListItem":{padding:"0px 16px",borderBottom:"1px solid ".concat(o()(t,"borderColor","#E2E2E2")),"& div":{minWidth:0},"& svg":{fontSize:12,marginRight:10,opacity:.5},"& span":{fontSize:12}},"& .certificateExpiring":{color:o()(t,"signalColors.warning","#FFBD62"),"& .label":{fontWeight:"bold"}},"& .certificateExpired":{color:o()(t,"signalColors.danger","#C51B3F"),"& .label":{fontWeight:"bold"}},"& .closeIcon":{transform:"scale(0.8)"}}})),d=e=>{let{certificateInfo:t,onDelete:n=(()=>{})}=e;const a=t.domains||[],r=s.ou.fromISO(t.expiry),o=s.ou.utc();let d=0,m="",x="";if(r){let e=r.diff(o);d=e.as("days"),m=e.minus(s.nL.fromObject({days:1})).shiftTo("days").toHuman({listStyle:"long",maximumFractionDigits:0}),d>=10&&d<30&&(x="certificateExpiring"),d<10&&(x="certificateExpired",d<2&&(m=e.minus(s.nL.fromObject({minutes:1})).shiftTo("hours","minutes").toHuman({listStyle:"long",maximumFractionDigits:0}),e.as("minutes")<=1&&(m="EXPIRED")))}return(0,c.jsxs)(l,{children:[(0,c.jsxs)(i.xuv,{children:[(0,c.jsxs)(i.xuv,{className:"certificateName",children:[(0,c.jsx)(i.Baz,{}),(0,c.jsx)("span",{children:t.name})]}),(0,c.jsxs)(i.xuv,{className:"certificateContainer",children:[(0,c.jsxs)(i.xuv,{className:"certificateExpiry",children:[(0,c.jsx)(i.U7Y,{color:"inherit",fontSize:"small"}),"\xa0",(0,c.jsx)("span",{className:"label",children:"Expiry:\xa0"}),(0,c.jsx)("span",{children:r.toFormat("yyyy/MM/dd")})]}),(0,c.jsxs)(i.xuv,{className:"certificateExpiry",children:[(0,c.jsx)(i.wZd,{}),"\xa0",(0,c.jsx)("span",{className:"label",children:"Expires in:\xa0"}),(0,c.jsx)("span",{className:x,children:m})]}),(0,c.jsx)("hr",{style:{marginBottom:12}}),(0,c.jsx)(i.xuv,{className:"certificateDomains",children:(0,c.jsx)("span",{className:"label",children:"".concat(a.length," Domain (s):")})}),(0,c.jsx)("ul",{className:"certificatesList",children:a.map(((e,t)=>(0,c.jsxs)("li",{className:"certificatesListItem",children:[(0,c.jsx)(i.os0,{}),(0,c.jsx)("span",{children:e})]},"".concat(e,"-").concat(t))))})]})]}),(0,c.jsx)(i.hU,{size:"small",onClick:n,className:"closeIcon",children:(0,c.jsx)(i.eEZ,{})})]})}},8070:(e,t,n)=>{n.d(t,{Z:()=>c});n(2791);var i=n(9434),s=n(9945),a=n(7689),r=n(184);const o=e=>{let{icon:t,description:n}=e;return(0,r.jsxs)(s.xuv,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,r.jsx)(s.xuv,{className:"muted",sx:{fontSize:"14px",fontStyle:"italic"},children:n})]})},c=()=>{const e=(0,a.UO)(),t=e.tenantName||"",n=e.tenantNamespace||"",c=(0,i.v9)((e=>""!==n?n:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:"")),l=(0,i.v9)((e=>""!==t?t:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""));return(0,r.jsx)(s.xuv,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",["@media (max-width: ".concat(s.Egj.sm,"px)")]:{marginTop:0}},children:(0,r.jsxs)(s.xuv,{sx:{display:"flex",flexFlow:"column"},children:[(0,r.jsx)(o,{icon:(0,r.jsx)(s.Baz,{}),description:"TLS Certificates Warning"}),(0,r.jsxs)(s.xuv,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),"If you wish to continue only with ",(0,r.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),(0,r.jsxs)(s.xuv,{sx:{fontSize:"14px",fontStyle:"italic"},className:"muted",children:["minio.",c,(0,r.jsx)("br",{}),"minio.",c,".svc",(0,r.jsx)("br",{}),"minio.",c,".svc.",(0,r.jsx)("br",{}),"*.",l,"-hl.",c,".svc.",(0,r.jsx)("br",{}),"*.",c,".svc."]}),(0,r.jsx)("br",{}),"Replace ",(0,r.jsx)("em",{children:""}),","," ",(0,r.jsx)("em",{children:""})," and",(0,r.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),"You can learn more at our"," ",(0,r.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}},2332:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var i=n(2791),s=n(9434),a=n(9945),r=n(3814),o=n(1320),c=n(7995),l=n(1207),d=n(3508),m=n(666),x=n(184);const u=e=>{let{runAsGroup:t,runAsUser:n,fsGroup:r,fsGroupChangePolicy:o,runAsNonRoot:c,setRunAsUser:l,setRunAsGroup:d,setFSGroup:m,setRunAsNonRoot:u,setFSGroupChangePolicy:h}=e;const p=(0,s.I0)();return(0,x.jsx)(i.Fragment,{children:(0,x.jsxs)("fieldset",{className:"inputItem",children:[(0,x.jsx)("legend",{children:"Security Context"}),(0,x.jsxs)(a.xuv,{sx:{"& .multiContainerStackNarrow":{display:"flex",alignItems:"center",justifyContent:"flex-start",gap:"8px","@media (max-width: 750px)":{flexFlow:"column",flexDirection:"column"}},"& .configSectionItem":{marginRight:15,marginBottom:10}},children:[(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:(0,x.jsxs)(a.xuv,{className:"multiContainerStackNarrow",children:[(0,x.jsx)(a.xuv,{className:"configSectionItem",children:(0,x.jsx)(a.Wzg,{type:"number",id:"securityContext_runAsUser",name:"securityContext_runAsUser",onChange:e=>{p(l(e.target.value))},label:"Run As User",value:n,required:!0,min:"0"})}),(0,x.jsx)(a.xuv,{className:"configSectionItem",children:(0,x.jsx)(a.Wzg,{type:"number",id:"securityContext_runAsGroup",name:"securityContext_runAsGroup",onChange:e=>{p(d(e.target.value))},label:"Run As Group",value:t,required:!0,min:"0"})})]})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:(0,x.jsxs)(a.xuv,{className:"multiContainerStackNarrow ",children:[(0,x.jsx)(a.xuv,{className:"configSectionItem",children:(0,x.jsx)(a.Wzg,{type:"number",id:"securityContext_fsGroup",name:"securityContext_fsGroup",onChange:e=>{p(m(e.target.value))},label:"FsGroup",value:r,required:!0,min:"0"})}),(0,x.jsx)(a.xuv,{className:"configSectionItem",children:(0,x.jsx)(a.PhF,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",onChange:e=>{p(h(e))},value:o,options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:(0,x.jsx)(a.rsf,{value:"SecurityContextRunAsNonRoot",id:"securityContext_runAsNonRoot",name:"securityContext_runAsNonRoot",checked:c,onChange:()=>{p(u(!c))},label:"Do not run as Root"})})]})]})})};var h=n(1078),p=n(8070);const f=()=>{const e=(0,o.TL)(),t=(0,s.v9)((e=>e.tenants.tenantInfo)),n=(0,s.v9)((e=>e.tenants.loadingTenant)),[f,j]=(0,i.useState)(!1),[g,C]=(0,i.useState)(!1),[y,v]=(0,i.useState)(!1),[b,S]=(0,i.useState)(!1),[k,A]=(0,i.useState)(!1),[N,w]=(0,i.useState)([]),[I,R]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[T,Z]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[E,F]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[_,G]=(0,i.useState)([]),[B,D]=(0,i.useState)([]),[z,L]=(0,i.useState)([]),P=(0,s.v9)((e=>e.editTenantSecurityContext.runAsGroup)),U=(0,s.v9)((e=>e.editTenantSecurityContext.runAsUser)),O=(0,s.v9)((e=>e.editTenantSecurityContext.fsGroup)),W=(0,s.v9)((e=>e.editTenantSecurityContext.runAsNonRoot)),M=(0,s.v9)((e=>e.editTenantSecurityContext.fsGroupChangePolicy)),H=(0,i.useCallback)((()=>{l.Z.invoke("GET","/api/v1/namespaces/".concat(null===t||void 0===t?void 0:t.namespace,"/tenants/").concat(null===t||void 0===t?void 0:t.name,"/security")).then((t=>{S(t.autoCert),v(t.autoCert),(t.customCertificates.minio||t.customCertificates.client||t.customCertificates.minioCAs)&&(A(!0),v(!0)),G(t.customCertificates.minio||[]),D(t.customCertificates.client||[]),L(t.customCertificates.minioCAs||[]),e((0,h.Be)(t.securityContext.runAsGroup)),e((0,h.wT)(t.securityContext.runAsUser)),e((0,h.FP)(t.securityContext.fsGroup)),e((0,h.vM)(t.securityContext.runAsNonRoot)),e((0,h.rR)(t.securityContext.fsGroupChangePolicy))})).catch((t=>{e((0,c.Ih)(t))}))}),[t,e]);(0,i.useEffect)((()=>{t&&H()}),[t,H]);const K=e=>{w([...N,e.name]);const t=_.filter((t=>t.name!==e.name)),n=B.filter((t=>t.name!==e.name)),i=z.filter((t=>t.name!==e.name));G(t),D(n),L(i)},Y=(e,t,n,i,s)=>{let a=I,r=()=>{};switch(e){case"minio":a=I,r=R;break;case"client":a=T,r=Z;break;case"minioCAs":a=E,r=F}r(a.map((e=>e.id===t?{...e,[n]:i,["encoded_".concat(n)]:s}:e)))},q=(e,t)=>{let n=I,i=()=>{};switch(e){case"minio":n=I,i=R;break;case"client":n=T,i=Z;break;case"minioCAs":n=E,i=F}if(n.length>1){i(n.filter((e=>e.id!==t)))}},X=e=>{let t=I,n=()=>{};switch(e){case"minio":t=I,n=R;break;case"client":t=T,n=Z;break;case"minioCAs":t=E,n=F}n([...t,{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}])};return(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(d.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,x.jsx)(a.EjK,{}),isLoading:f,onClose:()=>C(!1),isOpen:g,onConfirm:()=>{j(!0);let n={autoCert:b,customCertificates:{},securityContext:{runAsGroup:P,runAsUser:U,runAsNonRoot:W,fsGroup:O,fsGroupChangePolicy:M}};n.customCertificates=k?{secretsToBeDeleted:N,minioServerCertificates:I.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key)),minioClientCertificates:T.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key)),minioCAsCertificates:E.map((e=>e.encoded_cert)).filter((e=>e))}:{secretsToBeDeleted:[..._.map((e=>e.name)),...B.map((e=>e.name)),...z.map((e=>e.name))],minioServerCertificates:[],minioClientCertificates:[],minioCAsCertificates:[]},l.Z.invoke("POST","/api/v1/namespaces/".concat(null===t||void 0===t?void 0:t.namespace,"/tenants/").concat(null===t||void 0===t?void 0:t.name,"/security"),n).then((()=>{j(!1),C(!1),R([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),Z([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),F([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),H()})).catch((t=>{e((0,c.Ih)(t)),j(!1)}))},confirmationContent:(0,x.jsx)(i.Fragment,{children:"Are you sure you want to save the changes and restart the service?"})}),n?(0,x.jsx)(a.xuv,{sx:{textAlign:"center"},children:(0,x.jsx)(a.aNw,{})}):(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(a.xuv,{children:(0,x.jsx)(a.NZf,{separator:!0,sx:{marginBottom:15},children:"Security"})}),(0,x.jsxs)(a.ltY,{withBorders:!1,containerPadding:!1,sx:{"& .minioCertificateRows":{display:"flex",alignItems:"center",justifyContent:"flex-start",padding:5,"& .inputItem":{marginBottom:0},"&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1}},"& .overlayAction":{marginLeft:10},"& .rowActions":{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}}},children:[(0,x.jsx)(a.rsf,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:y,onChange:e=>{const t=e.target.checked;v(t)},label:"TLS",description:"Securing all the traffic using TLS. This is required for Encryption Configuration"}),y&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(a.rsf,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:b,onChange:e=>{const t=e.target.checked;S(t)},label:"AutoCert",description:"The internode certificates will be generated and managed by MinIO Operator"}),(0,x.jsx)(a.rsf,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:k,onChange:e=>{const t=e.target.checked;A(t)},label:"Custom Certificates",description:"Certificates used to terminated TLS at MinIO"}),k&&(0,x.jsxs)(i.Fragment,{children:[!b&&(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:(0,x.jsx)(p.Z,{})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)("h5",{children:"MinIO Server Certificates"})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:_.map((e=>(0,x.jsx)(m.Z,{certificateInfo:e,onDelete:()=>K(e)})))}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:I.map(((e,t)=>(0,x.jsxs)(a.rjZ,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.F5R,{onChange:(t,n,i)=>{i&&Y("minio",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0}),(0,x.jsx)(a.F5R,{onChange:(t,n,i)=>{i&&Y("minio",e.id,"key",n,i)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key,returnEncodedData:!0}),(0,x.jsxs)(a.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>X("minio"),disabled:t!==I.length-1,children:(0,x.jsx)(a.dtP,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>q("minio",e.id),disabled:I.length<=1,children:(0,x.jsx)(a.HFL,{})})})]})]},e.id)))}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)("h5",{children:"MinIO Client Certificates"})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:B.map((e=>(0,x.jsx)(m.Z,{certificateInfo:e,onDelete:()=>K(e)})))}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:T.map(((e,t)=>(0,x.jsxs)(a.rjZ,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.F5R,{onChange:(t,n,i)=>{i&&Y("client",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0}),(0,x.jsx)(a.F5R,{onChange:(t,n,i)=>{i&&Y("client",e.id,"key",n,i)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key,returnEncodedData:!0}),(0,x.jsxs)(a.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>X("client"),disabled:t!==T.length-1,children:(0,x.jsx)(a.dtP,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>q("client",e.id),disabled:T.length<=1,children:(0,x.jsx)(a.HFL,{})})})]})]},e.id)))}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:(0,x.jsx)("h5",{children:"MinIO CA Certificates"})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:z.map((e=>(0,x.jsx)(m.Z,{certificateInfo:e,onDelete:()=>K(e)})))}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,children:E.map(((e,t)=>(0,x.jsxs)(a.rjZ,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.rjZ,{item:!0,xs:10,children:(0,x.jsx)(a.F5R,{onChange:(t,n,i)=>{i&&Y("minioCAs",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0})}),(0,x.jsx)(a.rjZ,{item:!0,xs:2,children:(0,x.jsxs)("div",{className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>X("minioCAs"),disabled:t!==E.length-1,children:(0,x.jsx)(a.dtP,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.hU,{size:"small",onClick:()=>q("minioCAs",e.id),disabled:E.length<=1,children:(0,x.jsx)(a.HFL,{})})})]})})]},e.id)))})]})]}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)(a.NZf,{separator:!0,children:"Security Context"})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)(u,{runAsGroup:P,runAsUser:U,fsGroup:O,runAsNonRoot:W,fsGroupChangePolicy:M,setFSGroup:t=>e((0,h.FP)(t)),setRunAsUser:t=>e((0,h.wT)(t)),setRunAsGroup:t=>e((0,h.Be)(t)),setRunAsNonRoot:t=>e((0,h.vM)(t)),setFSGroupChangePolicy:t=>e((0,h.rR)(t))})}),(0,x.jsx)(a.rjZ,{item:!0,xs:12,sx:r.I.modalButtonBar,children:(0,x.jsx)(a.zxk,{id:"save-security",type:"submit",variant:"callAction",disabled:g||f,onClick:()=>C(!0),label:"Save"})})]})]})]})}}}]); +//# sourceMappingURL=332.577d2d47.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/332.577d2d47.chunk.js.map b/web-app/build/static/js/332.577d2d47.chunk.js.map new file mode 100644 index 00000000000..405df35ccc0 --- /dev/null +++ b/web-app/build/static/js/332.577d2d47.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/332.577d2d47.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/TLSCertificate/TLSCertificate.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx","screens/Console/Tenants/securityContextSelector.tsx","screens/Console/Tenants/TenantDetails/TenantSecurity.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n AlertCloseIcon,\n Box,\n CertificateIcon,\n IconButton,\n TimeIcon,\n LanguageIcon,\n EventBusyIcon,\n} from \"mds\";\nimport { DateTime, Duration } from \"luxon\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { ICertificateInfo } from \"../../Tenants/types\";\n\nconst CertificateContainer = styled.div(({ theme }) => ({\n position: \"relative\",\n margin: 0,\n userSelect: \"none\",\n appearance: \"none\",\n maxWidth: \"100%\",\n fontFamily: \"'Inter', sans-serif\",\n fontSize: 13,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 3,\n padding: \"5px 10px\",\n \"& .certificateName\": {\n display: \"flex\",\n alignItems: \"center\",\n gap: 5,\n fontWeight: \"bold\",\n color: get(theme, \"signalColors.main\", \"#07193E\"),\n },\n \"& .deleteTagButton\": {\n backgroundColor: \"transparent\",\n border: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0,\n cursor: \"pointer\",\n opacity: 0.6,\n \"&:hover\": {\n opacity: 1,\n },\n \"& svg\": {\n fill: get(theme, `tag.grey.background`, \"#07193E\"),\n width: 10,\n height: 10,\n minWidth: 10,\n minHeight: 10,\n },\n },\n \"& .certificateContainer\": {\n margin: \"5px 10px\",\n },\n \"& .certificateExpiry\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n marginBottom: 5,\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateDomains\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificatesList\": {\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 4,\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n textTransform: \"lowercase\",\n overflowY: \"scroll\",\n maxHeight: 145,\n marginTop: 3,\n marginBottom: 5,\n padding: 0,\n \"& li\": {\n listStyle: \"none\",\n padding: \"5px 10px\",\n margin: 0,\n display: \"flex\",\n alignItems: \"center\",\n \"&:before\": {\n content: \"' '\",\n },\n },\n },\n \"& .certificatesListItem\": {\n padding: \"0px 16px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& div\": {\n minWidth: 0,\n },\n \"& svg\": {\n fontSize: 12,\n marginRight: 10,\n opacity: 0.5,\n },\n \"& span\": {\n fontSize: 12,\n },\n },\n \"& .certificateExpiring\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateExpired\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .closeIcon\": {\n transform: \"scale(0.8)\",\n },\n}));\n\ninterface ITLSCertificate {\n certificateInfo: ICertificateInfo;\n onDelete: any;\n}\n\nconst TLSCertificate = ({\n certificateInfo,\n onDelete = () => {},\n}: ITLSCertificate) => {\n const certificates = certificateInfo.domains || [];\n\n const expiry = DateTime.fromISO(certificateInfo.expiry);\n const now = DateTime.utc();\n // Expose error on Tenant if certificate is near expiration or expired\n let daysToExpiry: number = 0;\n let daysToExpiryHuman: string = \"\";\n let certificateExpiration: string = \"\";\n if (expiry) {\n let durationToExpiry = expiry.diff(now);\n daysToExpiry = durationToExpiry.as(\"days\");\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ days: 1 }))\n .shiftTo(\"days\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (daysToExpiry >= 10 && daysToExpiry < 30) {\n certificateExpiration = \"certificateExpiring\";\n }\n if (daysToExpiry < 10) {\n certificateExpiration = \"certificateExpired\";\n if (daysToExpiry < 2) {\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ minutes: 1 }))\n .shiftTo(\"hours\", \"minutes\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (durationToExpiry.as(\"minutes\") <= 1) {\n daysToExpiryHuman = \"EXPIRED\";\n }\n }\n }\n }\n\n return (\n \n \n \n \n {certificateInfo.name}\n \n \n \n \n  \n Expiry: \n {expiry.toFormat(\"yyyy/MM/dd\")}\n \n \n \n  \n Expires in: \n {daysToExpiryHuman}\n \n
\n \n {`${certificates.length} Domain (s):`}\n \n
    \n {certificates.map((dom, index) => (\n
  • \n \n {dom}\n
  • \n ))}\n
\n
\n
\n \n \n \n
\n );\n};\n\nexport default TLSCertificate;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CertificateIcon, Box, breakPoints } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n let defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n let defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n
\n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n \n \n \n );\n};\n\nexport default TLSHelpBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Grid, InputBox, Select, Switch } from \"mds\";\nimport { useDispatch } from \"react-redux\";\nimport { fsGroupChangePolicyType } from \"./types\";\n\ninterface IEditSecurityContextProps {\n runAsUser: string;\n runAsGroup: string;\n fsGroup: string;\n fsGroupChangePolicy: fsGroupChangePolicyType;\n runAsNonRoot: boolean;\n setRunAsUser: any;\n setRunAsGroup: any;\n setFSGroup: any;\n setRunAsNonRoot: any;\n setFSGroupChangePolicy: any;\n}\n\nconst SecurityContextSelector = ({\n runAsGroup,\n runAsUser,\n fsGroup,\n fsGroupChangePolicy,\n runAsNonRoot,\n setRunAsUser,\n setRunAsGroup,\n setFSGroup,\n setRunAsNonRoot,\n setFSGroupChangePolicy,\n}: IEditSecurityContextProps) => {\n const dispatch = useDispatch();\n return (\n \n
\n Security Context\n \n \n \n \n ) => {\n dispatch(setRunAsUser(e.target.value));\n }}\n label=\"Run As User\"\n value={runAsUser}\n required\n min=\"0\"\n />\n \n \n ) => {\n dispatch(setRunAsGroup(e.target.value));\n }}\n label=\"Run As Group\"\n value={runAsGroup}\n required\n min=\"0\"\n />\n \n \n \n \n \n \n ) => {\n dispatch(setFSGroup(e.target.value));\n }}\n label=\"FsGroup\"\n value={fsGroup}\n required\n min=\"0\"\n />\n \n \n {\n dispatch(setFSGroupChangePolicy(value));\n }}\n value={fsGroupChangePolicy}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n \n \n \n \n {\n dispatch(setRunAsNonRoot(!runAsNonRoot));\n }}\n label={\"Do not run as Root\"}\n />\n \n \n
\n
\n );\n};\n\nexport default SecurityContextSelector;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n AddIcon,\n Box,\n Button,\n ConfirmModalIcon,\n FileSelector,\n FormLayout,\n Grid,\n IconButton,\n Loader,\n RemoveIcon,\n SectionTitle,\n Switch,\n} from \"mds\";\nimport {\n fsGroupChangePolicyType,\n ICertificateInfo,\n ITenantSecurityResponse,\n} from \"../types\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport SecurityContextSelector from \"../securityContextSelector\";\nimport {\n setFSGroup,\n setFSGroupChangePolicy,\n setRunAsGroup,\n setRunAsNonRoot,\n setRunAsUser,\n} from \"../tenantSecurityContextSlice\";\nimport TLSHelpBox from \"../HelpBox/TLSHelpBox\";\n\nconst TenantSecurity = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [enableTLS, setEnableTLS] = useState(false);\n const [enableAutoCert, setEnableAutoCert] = useState(false);\n const [enableCustomCerts, setEnableCustomCerts] = useState(false);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n // MinIO certificates\n const [minioServerCertificates, setMinioServerCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioClientCertificates, setMinioClientCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioCaCertificates, setMinioCaCertificates] = useState([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioServerCertificateSecrets, setMinioServerCertificateSecrets] =\n useState([]);\n const [minioClientCertificateSecrets, setMinioClientCertificateSecrets] =\n useState([]);\n const [minioTLSCaCertificateSecrets, setMinioTLSCaCertificateSecrets] =\n useState([]);\n\n const runAsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsGroup,\n );\n const runAsUser = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsUser,\n );\n const fsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroup,\n );\n const runAsNonRoot = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsNonRoot,\n );\n const fsGroupChangePolicy = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroupChangePolicy,\n );\n\n const getTenantSecurityInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n )\n .then((res: ITenantSecurityResponse) => {\n setEnableAutoCert(res.autoCert);\n setEnableTLS(res.autoCert);\n if (\n res.customCertificates.minio ||\n res.customCertificates.client ||\n res.customCertificates.minioCAs\n ) {\n setEnableCustomCerts(true);\n setEnableTLS(true);\n }\n setMinioServerCertificateSecrets(res.customCertificates.minio || []);\n setMinioClientCertificateSecrets(res.customCertificates.client || []);\n setMinioTLSCaCertificateSecrets(res.customCertificates.minioCAs || []);\n dispatch(setRunAsGroup(res.securityContext.runAsGroup));\n dispatch(setRunAsUser(res.securityContext.runAsUser));\n dispatch(setFSGroup(res.securityContext.fsGroup!));\n dispatch(setRunAsNonRoot(res.securityContext.runAsNonRoot));\n dispatch(\n setFSGroupChangePolicy(\n res.securityContext.fsGroupChangePolicy as fsGroupChangePolicyType,\n ),\n );\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantSecurityInfo();\n }\n }, [tenant, getTenantSecurityInfo]);\n\n const updateTenantSecurity = () => {\n setIsSending(true);\n let payload = {\n autoCert: enableAutoCert,\n customCertificates: {},\n securityContext: {\n runAsGroup: runAsGroup,\n runAsUser: runAsUser,\n runAsNonRoot: runAsNonRoot,\n fsGroup: fsGroup,\n fsGroupChangePolicy: fsGroupChangePolicy,\n },\n };\n if (enableCustomCerts) {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: certificatesToBeRemoved,\n minioServerCertificates: minioServerCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioClientCertificates: minioClientCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioCAsCertificates: minioCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((cert: any) => cert),\n };\n } else {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: [\n ...minioServerCertificateSecrets.map((cert) => cert.name),\n ...minioClientCertificateSecrets.map((cert) => cert.name),\n ...minioTLSCaCertificateSecrets.map((cert) => cert.name),\n ],\n minioServerCertificates: [],\n minioClientCertificates: [],\n minioCAsCertificates: [],\n };\n }\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n // Refresh Information and reset forms\n setMinioServerCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioClientCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioCaCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n getTenantSecurityInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n // TLS certificate secrets can be referenced MinIO, Console or KES, we need to remove the secret from all list and update\n // the arrays\n // Add certificate to the global list of secrets to be removed\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n\n // Update MinIO server TLS certificate secrets\n const updatedMinioServerCertificateSecrets =\n minioServerCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n // Update MinIO client TLS certificate secrets\n const updatedMinioClientCertificateSecrets =\n minioClientCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n const updatedMinIOTLSCaCertificateSecrets =\n minioTLSCaCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n setMinioServerCertificateSecrets(updatedMinioServerCertificateSecrets);\n setMinioClientCertificateSecrets(updatedMinioClientCertificateSecrets);\n setMinioTLSCaCertificateSecrets(updatedMinIOTLSCaCertificateSecrets);\n };\n\n const addFileToKeyPair = (\n type: string,\n id: string,\n key: string,\n fileName: string,\n value: string,\n ) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n const NCertList = certificates.map((item: KeyPair) => {\n if (item.id === id) {\n return {\n ...item,\n [key]: fileName,\n [`encoded_${key}`]: value,\n };\n }\n return item;\n });\n updateCertificates(NCertList);\n };\n\n const deleteKeyPair = (type: string, id: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n if (certificates.length > 1) {\n const cleanCertsList = certificates.filter(\n (item: KeyPair) => item.id !== id,\n );\n updateCertificates(cleanCertsList);\n }\n };\n\n const addKeyPair = (type: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n const updatedCertificates = [\n ...certificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n updateCertificates(updatedCertificates);\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantSecurity}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n \n \n \n ) : (\n \n \n \n Security\n \n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableTLS(checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n {enableTLS && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableAutoCert(checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableCustomCerts(checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n\n {enableCustomCerts && (\n \n {!enableAutoCert && (\n \n \n \n )}\n \n
MinIO Server Certificates
\n
\n \n {minioServerCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioServerCertificates.map((keyPair, index) => (\n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n
\n addKeyPair(\"minio\")}\n disabled={\n index !== minioServerCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minio\", keyPair.id)\n }\n disabled={minioServerCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n\n \n
MinIO Client Certificates
\n
\n \n {minioClientCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioClientCertificates.map((keyPair, index) => (\n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n
\n addKeyPair(\"client\")}\n disabled={\n index !== minioClientCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"client\", keyPair.id)\n }\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n\n \n
MinIO CA Certificates
\n
\n \n {minioTLSCaCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioCaCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minioCAs\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n \n \n
\n
\n addKeyPair(\"minioCAs\")}\n disabled={\n index !== minioCaCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minioCAs\", keyPair.id)\n }\n disabled={minioCaCertificates.length <= 1}\n >\n \n \n
\n
\n
\n
\n ))}\n \n
\n )}\n
\n )}\n \n Security Context\n \n \n dispatch(setFSGroup(value))}\n setRunAsUser={(value: string) => dispatch(setRunAsUser(value))}\n setRunAsGroup={(value: string) =>\n dispatch(setRunAsGroup(value))\n }\n setRunAsNonRoot={(value: boolean) =>\n dispatch(setRunAsNonRoot(value))\n }\n setFSGroupChangePolicy={(value: fsGroupChangePolicyType) =>\n dispatch(setFSGroupChangePolicy(value))\n }\n />\n \n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n \n
\n )}\n
\n );\n};\n\nexport default TenantSecurity;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","CertificateContainer","styled","div","_ref","theme","position","margin","userSelect","appearance","maxWidth","fontFamily","gap","border","concat","get","borderRadius","padding","fontWeight","backgroundColor","cursor","opacity","fill","width","height","minWidth","minHeight","flexWrap","textTransform","listStyle","content","borderBottom","transform","_ref2","certificateInfo","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","maximumFractionDigits","minutes","_jsxs","children","Box","className","_jsx","CertificateIcon","name","EventBusyIcon","toFormat","TimeIcon","style","length","map","dom","index","LanguageIcon","IconButton","size","onClick","AlertCloseIcon","FeatureItem","icon","description","sx","fontStyle","TLSHelpBox","params","useParams","tenantNameParam","tenantName","tenantNamespaceParam","tenantNamespace","namespace","useSelector","state","createTenant","fields","nameTenant","flex","flexFlow","breakPoints","sm","href","target","rel","runAsGroup","runAsUser","fsGroup","fsGroupChangePolicy","runAsNonRoot","setRunAsUser","setRunAsGroup","setFSGroup","setRunAsNonRoot","setFSGroupChangePolicy","dispatch","useDispatch","Fragment","flexDirection","Grid","item","xs","InputBox","type","id","onChange","e","value","required","min","Select","options","Switch","checked","TenantSecurity","useAppDispatch","tenant","tenants","tenantInfo","loadingTenant","isSending","setIsSending","useState","dialogOpen","setDialogOpen","enableTLS","setEnableTLS","enableAutoCert","setEnableAutoCert","enableCustomCerts","setEnableCustomCerts","certificatesToBeRemoved","setCertificatesToBeRemoved","minioServerCertificates","setMinioServerCertificates","Date","toString","key","cert","encoded_key","encoded_cert","minioClientCertificates","setMinioClientCertificates","minioCaCertificates","setMinioCaCertificates","minioServerCertificateSecrets","setMinioServerCertificateSecrets","minioClientCertificateSecrets","setMinioClientCertificateSecrets","minioTLSCaCertificateSecrets","setMinioTLSCaCertificateSecrets","editTenantSecurityContext","getTenantSecurityInfo","useCallback","api","invoke","then","res","autoCert","customCertificates","minio","client","minioCAs","securityContext","catch","err","setErrorSnackMessage","useEffect","removeCertificate","updatedMinioServerCertificateSecrets","filter","certificateSecret","updatedMinioClientCertificateSecrets","updatedMinIOTLSCaCertificateSecrets","addFileToKeyPair","fileName","updateCertificates","deleteKeyPair","addKeyPair","React","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","updateTenantSecurity","payload","secretsToBeDeleted","keyPair","crt","minioCAsCertificates","confirmationContent","textAlign","Loader","SectionTitle","separator","FormLayout","withBorders","containerPadding","TLSCertificate","FileSelector","event","encodedValue","accept","returnEncodedData","disabled","AddIcon","RemoveIcon","SecurityContextSelector","Button","variant"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/332.ae2fe11c.chunk.js b/web-app/build/static/js/332.ae2fe11c.chunk.js deleted file mode 100644 index 846039b3fec..00000000000 --- a/web-app/build/static/js/332.ae2fe11c.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[332],{54639:function(e,n,t){t.d(n,{Z:function(){return v}});var i=t(29439),r=t(1413),s=t(72791),a=t(26181),o=t.n(a),c=t(61889),l=t(30829),d=t(96040),u=t(13400),m=t(99663),x=t(86711),f=t(11135),h=t(25787),p=t(23814),j=t(75952),C=t(22512),Z=t(80184),v=(0,h.Z)((function(e){return(0,f.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({},p.YI),p.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},p.bV),{},{inputLabel:(0,r.Z)((0,r.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,r.Z)((0,r.Z)({},p.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var n=e.label,t=e.classes,r=e.onChange,a=e.id,f=e.name,h=e.disabled,p=void 0!==h&&h,v=e.tooltip,g=void 0===v?"":v,y=e.required,b=e.error,A=void 0===b?"":b,N=e.accept,S=void 0===N?"":N,k=e.value,w=void 0===k?"":k,R=(0,s.useState)(!1),P=(0,i.Z)(R,2),T=P[0],I=P[1];return(0,Z.jsx)(s.Fragment,{children:(0,Z.jsxs)(c.ZP,{item:!0,xs:12,className:"".concat(t.fileInputField," ").concat(t.fieldBottom," ").concat(t.fieldContainer," ").concat(""!==A?t.errorInField:""),children:[""!==n&&(0,Z.jsxs)(l.Z,{htmlFor:a,className:"".concat(""!==A?t.fieldLabelError:""," ").concat(t.inputLabel),children:[(0,Z.jsxs)("span",{children:[n,y?"*":""]}),""!==g&&(0,Z.jsx)("div",{className:t.tooltipContainer,children:(0,Z.jsx)(d.Z,{title:g,placement:"top-start",children:(0,Z.jsx)("div",{className:t.tooltip,children:(0,Z.jsx)(j.byK,{})})})})]}),T||""===w?(0,Z.jsxs)("div",{className:t.textBoxContainer,children:[(0,Z.jsx)("input",{type:"file",name:f,onChange:function(e){var n=o()(e,"target.files[0].name","");!function(e,n){var t=e.target.files[0],i=new FileReader;i.readAsDataURL(t),i.onload=function(){var e=i.result;if(e){var t=e.toString().split("base64,");2===t.length&&n(t[1])}}}(e,(function(e){r(e,n)}))},accept:S,required:y,disabled:p,className:t.fileInputField}),""!==w&&(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){I(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(x.Z,{})}),""!==A&&(0,Z.jsx)(C.Z,{errorMessage:A})]}):(0,Z.jsxs)("div",{className:t.fileReselect,children:[(0,Z.jsx)("div",{className:t.valueString,children:w}),(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){I(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(m.Z,{})})]})]})})}))},13871:function(e,n,t){var i,r=t(30168),s=(0,t(26088).Z)("hr")(i||(i=(0,r.Z)(["\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n"])));n.Z=s},80666:function(e,n,t){t(72791);var i=t(99779),r=t(11135),s=t(25787),a=t(90983),o=t(81918),c=t(89164),l=t(61889),d=t(20890),u=t(64554),m=t(94721),x=t(90493),f=t(84852),h=t(20653),p=t(49900),j=t(52502),C=t(69212),Z=t(75952),v=t(80184);n.Z=(0,s.Z)((function(e){return(0,r.Z)({certificateIcon:{float:"left",paddingTop:"5px !important",paddingRight:"10px !important"},certificateInfo:{float:"right"},certificateWrapper:{height:"auto",margin:5,border:"1px solid #E2E2E2",userSelect:"text",borderRadius:4,"& h6":{fontWeight:"bold"},"& div":{padding:0}},certificateExpiry:{color:"#616161",display:"flex",alignItems:"center",flexWrap:"wrap",marginBottom:5,"& .label":{fontWeight:"bold"}},certificateDomains:{color:"#616161","& .label":{fontWeight:"bold"}},certificatesList:{border:"1px solid #E2E2E2",borderRadius:4,color:"#616161",textTransform:"lowercase",overflowY:"scroll",maxHeight:145,marginBottom:10},certificatesListItem:{padding:"0px 16px",borderBottom:"1px solid #E2E2E2","& div":{minWidth:0},"& svg":{fontSize:12,marginRight:10,opacity:.5},"& span":{fontSize:12}},certificateExpiring:{color:"orange","& .label":{fontWeight:"bold"}},certificateExpired:{color:"red","& .label":{fontWeight:"bold"}}})}))((function(e){var n=e.classes,t=e.certificateInfo,r=e.onDelete,s=void 0===r?function(){}:r,g=t.domains||[],y=i.ou.fromISO(t.expiry),b=i.ou.utc(),A=0,N="",S="";if(y){var k=y.diff(b);A=k.as("days"),N=k.minus(i.nL.fromObject({days:1})).shiftTo("days").toHuman({listStyle:"long",maximumFractionDigits:0}),A>=10&&A<30&&(S=n.certificateExpiring),A<10&&(S=n.certificateExpired,A<2&&(N=k.minus(i.nL.fromObject({minutes:1})).shiftTo("hours","minutes").toHuman({listStyle:"long",maximumFractionDigits:0}),k.as("minutes")<=1&&(N="EXPIRED")))}return(0,v.jsx)(o.Z,{variant:"outlined",color:"primary",className:n.certificateWrapper,label:(0,v.jsxs)(c.Z,{children:[(0,v.jsx)(l.ZP,{item:!0,xs:1,className:n.certificateIcon,children:(0,v.jsx)(Z.Baz,{})}),(0,v.jsxs)(l.ZP,{item:!0,xs:11,className:n.certificateInfo,children:[(0,v.jsx)(d.Z,{variant:"subtitle1",display:"block",gutterBottom:!0,children:t.name}),(0,v.jsxs)(u.Z,{className:n.certificateExpiry,children:[(0,v.jsx)(j.Z,{color:"inherit",fontSize:"small"}),"\xa0",(0,v.jsx)("span",{className:"label",children:"Expiry:\xa0"}),(0,v.jsx)("span",{children:y.toFormat("yyyy/MM/dd")})]}),(0,v.jsxs)(u.Z,{className:n.certificateExpiry,children:[(0,v.jsx)(C.Z,{color:"inherit",fontSize:"small"}),"\xa0",(0,v.jsx)("span",{className:"label",children:"Expires in:\xa0"}),(0,v.jsx)("span",{className:S,children:N})]}),(0,v.jsx)(m.Z,{}),(0,v.jsx)("br",{}),(0,v.jsx)(u.Z,{className:n.certificateDomains,children:(0,v.jsx)("span",{className:"label",children:"".concat(g.length," Domain (s):")})}),(0,v.jsx)(x.Z,{className:n.certificatesList,children:g.map((function(e,t){return(0,v.jsxs)(f.ZP,{className:n.certificatesListItem,children:[(0,v.jsx)(h.Z,{children:(0,v.jsx)(a.Z,{})}),(0,v.jsx)(p.Z,{primary:e})]},"".concat(e,"-").concat(t))}))})]})]}),onDelete:s},t.name)}))},88070:function(e,n,t){t(72791);var i=t(78687),r=t(64554),s=t(75952),a=t(57689),o=t(80184),c=function(e){var n=e.icon,t=e.description;return(0,o.jsxs)(r.Z,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[n," ",(0,o.jsx)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:t})]})};n.Z=function(){var e=(0,a.UO)(),n=e.tenantName||"",t=e.tenantNamespace||"",l=(0,i.v9)((function(e){return""!==t?t:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:""})),d=(0,i.v9)((function(e){return""!==n?n:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""}));return(0,o.jsx)(r.Z,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",marginTop:{xs:"0px"}},children:(0,o.jsxs)(r.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,o.jsx)(c,{icon:(0,o.jsx)(s.Baz,{}),description:"TLS Certificates Warning"}),(0,o.jsxs)(r.Z,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),"If you wish to continue only with ",(0,o.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),(0,o.jsxs)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:["minio.",l,(0,o.jsx)("br",{}),"minio.",l,".svc",(0,o.jsx)("br",{}),"minio.",l,".svc.",(0,o.jsx)("br",{}),"*.",d,"-hl.",l,".svc.",(0,o.jsx)("br",{}),"*.",l,".svc."]}),(0,o.jsx)("br",{}),"Replace ",(0,o.jsx)("em",{children:""}),","," ",(0,o.jsx)("em",{children:""})," and",(0,o.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),"You can learn more at our"," ",(0,o.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}},62332:function(e,n,t){t.r(n),t.d(n,{default:function(){return T}});var i=t(4942),r=t(93433),s=t(29439),a=t(1413),o=t(72791),c=t(78687),l=t(51691),d=t(13400),u=t(75952),m=t(11135),x=t(25787),f=t(61889),h=t(23814),p=t(41320),j=t(87995),C=t(37516),Z=t(54639),v=t(81207),g=t(40306),y=t(80666),b=t(21435),A=t(90673),N=t(80184),S=(0,x.Z)((function(e){return(0,m.Z)({configSectionItem:{marginRight:15,marginBottom:15,"& .multiContainer":{border:"1px solid red"}}})}))((function(e){var n=e.classes,t=e.runAsGroup,i=e.runAsUser,r=e.fsGroup,s=e.fsGroupChangePolicy,a=e.runAsNonRoot,l=e.setRunAsUser,d=e.setRunAsGroup,u=e.setFSGroup,m=e.setRunAsNonRoot,x=e.setFSGroupChangePolicy,h=(0,c.I0)();return(0,N.jsx)(o.Fragment,{children:(0,N.jsxs)("fieldset",{className:"".concat(n.fieldGroup," ").concat(n.fieldSpaceTop," "),children:[(0,N.jsx)("legend",{className:n.descriptionText,children:"Security Context"}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsxs)("div",{className:"".concat(n.multiContainerStackNarrow," "),children:[(0,N.jsx)("div",{className:n.configSectionItem,children:(0,N.jsx)(b.Z,{type:"number",id:"securityContext_runAsUser",name:"securityContext_runAsUser",onChange:function(e){h(l(e.target.value))},label:"Run As User",value:i,required:!0,min:"0"})}),(0,N.jsx)("div",{className:n.configSectionItem,children:(0,N.jsx)(b.Z,{type:"number",id:"securityContext_runAsGroup",name:"securityContext_runAsGroup",onChange:function(e){h(d(e.target.value))},label:"Run As Group",value:t,required:!0,min:"0"})})]})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsxs)("div",{className:"".concat(n.multiContainerStackNarrow," "),children:[(0,N.jsx)("div",{className:n.configSectionItem,children:(0,N.jsx)(b.Z,{type:"number",id:"securityContext_fsGroup",name:"securityContext_fsGroup",onChange:function(e){h(u(e.target.value))},label:"FsGroup",value:r,required:!0,min:"0"})}),(0,N.jsx)("div",{className:n.configSectionItem,children:(0,N.jsx)(A.Z,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",onChange:function(e){h(x(e.target.value))},value:s,options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsx)("div",{className:n.multiContainer,children:(0,N.jsx)(C.Z,{value:"SecurityContextRunAsNonRoot",id:"securityContext_runAsNonRoot",name:"securityContext_runAsNonRoot",checked:a,onChange:function(){h(m(!a))},label:"Do not run as Root"})})})]})})})),k=t(1078),w=t(88070),R=t(13871),P=(0,c.$j)((function(e){return{loadingTenant:e.tenants.loadingTenant,selectedTenant:e.tenants.currentTenant,tenant:e.tenants.tenantInfo}}),null),T=(0,x.Z)((function(e){return(0,m.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},h.oZ),h.bK),{},{minioCertificateRows:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1}},minioCACertsRow:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},rowActions:{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},loaderAlign:{textAlign:"center"},fileItem:{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}}},h.Bz),h.QV),h.DF),h.oO),h.AK))}))(P((function(e){var n=e.classes,t=(0,p.TL)(),m=(0,c.v9)((function(e){return e.tenants.tenantInfo})),x=(0,c.v9)((function(e){return e.tenants.loadingTenant})),h=(0,o.useState)(!1),b=(0,s.Z)(h,2),A=b[0],P=b[1],T=(0,o.useState)(!1),I=(0,s.Z)(T,2),F=I[0],E=I[1],_=(0,o.useState)(!1),G=(0,s.Z)(_,2),B=G[0],L=G[1],D=(0,o.useState)(!1),z=(0,s.Z)(D,2),O=z[0],W=z[1],M=(0,o.useState)(!1),U=(0,s.Z)(M,2),K=U[0],H=U[1],q=(0,o.useState)([]),Y=(0,s.Z)(q,2),V=Y[0],Q=Y[1],X=(0,o.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),$=(0,s.Z)(X,2),J=$[0],ee=$[1],ne=(0,o.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),te=(0,s.Z)(ne,2),ie=te[0],re=te[1],se=(0,o.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),ae=(0,s.Z)(se,2),oe=ae[0],ce=ae[1],le=(0,o.useState)([]),de=(0,s.Z)(le,2),ue=de[0],me=de[1],xe=(0,o.useState)([]),fe=(0,s.Z)(xe,2),he=fe[0],pe=fe[1],je=(0,o.useState)([]),Ce=(0,s.Z)(je,2),Ze=Ce[0],ve=Ce[1],ge=(0,c.v9)((function(e){return e.editTenantSecurityContext.runAsGroup})),ye=(0,c.v9)((function(e){return e.editTenantSecurityContext.runAsUser})),be=(0,c.v9)((function(e){return e.editTenantSecurityContext.fsGroup})),Ae=(0,c.v9)((function(e){return e.editTenantSecurityContext.runAsNonRoot})),Ne=(0,c.v9)((function(e){return e.editTenantSecurityContext.fsGroupChangePolicy})),Se=(0,o.useCallback)((function(){v.Z.invoke("GET","/api/v1/namespaces/".concat(null===m||void 0===m?void 0:m.namespace,"/tenants/").concat(null===m||void 0===m?void 0:m.name,"/security")).then((function(e){W(e.autoCert),L(e.autoCert),(e.customCertificates.minio||e.customCertificates.client||e.customCertificates.minioCAs)&&(H(!0),L(!0)),me(e.customCertificates.minio||[]),pe(e.customCertificates.client||[]),ve(e.customCertificates.minioCAs||[]),t((0,k.Be)(e.securityContext.runAsGroup)),t((0,k.wT)(e.securityContext.runAsUser)),t((0,k.FP)(e.securityContext.fsGroup)),t((0,k.vM)(e.securityContext.runAsNonRoot)),t((0,k.rR)(e.securityContext.fsGroupChangePolicy))})).catch((function(e){t((0,j.Ih)(e))}))}),[m,t]);(0,o.useEffect)((function(){m&&Se()}),[m,Se]);var ke=function(e){Q([].concat((0,r.Z)(V),[e.name]));var n=ue.filter((function(n){return n.name!==e.name})),t=he.filter((function(n){return n.name!==e.name})),i=Ze.filter((function(n){return n.name!==e.name}));me(n),pe(t),ve(i)},we=function(e,n,t,r,s){var o=J,c=function(){};switch(e){case"minio":o=J,c=ee;break;case"client":o=ie,c=re;break;case"minioCAs":o=oe,c=ce}c(o.map((function(e){var o;return e.id===n?(0,a.Z)((0,a.Z)({},e),{},(o={},(0,i.Z)(o,t,r),(0,i.Z)(o,"encoded_".concat(t),s),o)):e})))},Re=function(e,n){var t=J,i=function(){};switch(e){case"minio":t=J,i=ee;break;case"client":t=ie,i=re;break;case"minioCAs":t=oe,i=ce}t.length>1&&i(t.filter((function(e){return e.id!==n})))},Pe=function(e){var n=J,t=function(){};switch(e){case"minio":n=J,t=ee;break;case"client":n=ie,t=re;break;case"minioCAs":n=oe,t=ce}t([].concat((0,r.Z)(n),[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]))};return(0,N.jsxs)(o.Fragment,{children:[(0,N.jsx)(g.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,N.jsx)(u.EjK,{}),isLoading:A,onClose:function(){return E(!1)},isOpen:F,onConfirm:function(){P(!0);var e={autoCert:O,customCertificates:{},securityContext:{runAsGroup:ge,runAsUser:ye,runAsNonRoot:Ae,fsGroup:be,fsGroupChangePolicy:Ne}};e.customCertificates=K?{secretsToBeDeleted:V,minioServerCertificates:J.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key})),minioClientCertificates:ie.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key})),minioCAsCertificates:oe.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}:{secretsToBeDeleted:[].concat((0,r.Z)(ue.map((function(e){return e.name}))),(0,r.Z)(he.map((function(e){return e.name}))),(0,r.Z)(Ze.map((function(e){return e.name})))),minioServerCertificates:[],minioClientCertificates:[],minioCAsCertificates:[]},v.Z.invoke("POST","/api/v1/namespaces/".concat(null===m||void 0===m?void 0:m.namespace,"/tenants/").concat(null===m||void 0===m?void 0:m.name,"/security"),e).then((function(){P(!1),E(!1),ee([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),re([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),ce([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),Se()})).catch((function(e){t((0,j.Ih)(e)),P(!1)}))},confirmationContent:(0,N.jsx)(l.Z,{children:"Are you sure you want to save the changes and restart the service?"})}),x?(0,N.jsx)("div",{className:n.loaderAlign,children:(0,N.jsx)(u.aNw,{})}):(0,N.jsxs)(f.ZP,{container:!0,spacing:1,children:[(0,N.jsxs)(f.ZP,{item:!0,xs:12,children:[(0,N.jsx)("h1",{className:n.sectionTitle,children:"Security"}),(0,N.jsx)(R.Z,{})]}),(0,N.jsxs)(f.ZP,{container:!0,spacing:1,children:[(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsx)(C.Z,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:B,onChange:function(e){var n=e.target.checked;L(n)},label:"TLS",description:"Securing all the traffic using TLS. This is required for Encryption Configuration"})}),B&&(0,N.jsxs)(o.Fragment,{children:[(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,N.jsx)(C.Z,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:O,onChange:function(e){var n=e.target.checked;W(n)},label:"AutoCert",description:"The internode certificates will be generated and managed by MinIO Operator"})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,N.jsx)(C.Z,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:K,onChange:function(e){var n=e.target.checked;H(n)},label:"Custom Certificates",description:"Certificates used to terminated TLS at MinIO"})}),K&&(0,N.jsxs)(o.Fragment,{children:[!O&&(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsx)(w.Z,{})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,N.jsx)("h5",{children:"MinIO Server Certificates"})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:ue.map((function(e){return(0,N.jsx)(y.Z,{certificateInfo:e,onDelete:function(){return ke(e)}})}))}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:J.map((function(e,t){return(0,N.jsxs)(f.ZP,{item:!0,xs:12,className:n.minioCertificateRows,children:[(0,N.jsxs)(f.ZP,{item:!0,xs:10,className:n.fileItem,children:[(0,N.jsx)(Z.Z,{onChange:function(n,t){return we("minio",e.id,"cert",t,n)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert}),(0,N.jsx)(Z.Z,{onChange:function(n,t){return we("minio",e.id,"key",t,n)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})]}),(0,N.jsxs)(f.ZP,{item:!0,xs:2,className:n.rowActions,children:[(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Pe("minio")},disabled:t!==J.length-1,children:(0,N.jsx)(u.dtP,{})})}),(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Re("minio",e.id)},disabled:J.length<=1,children:(0,N.jsx)(u.HFL,{})})})]})]},e.id)}))}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,N.jsx)("h5",{children:"MinIO Client Certificates"})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:he.map((function(e){return(0,N.jsx)(y.Z,{certificateInfo:e,onDelete:function(){return ke(e)}})}))}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:ie.map((function(e,t){return(0,N.jsxs)(f.ZP,{item:!0,xs:12,className:n.minioCertificateRows,children:[(0,N.jsxs)(f.ZP,{item:!0,xs:10,className:n.fileItem,children:[(0,N.jsx)(Z.Z,{onChange:function(n,t){return we("client",e.id,"cert",t,n)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert}),(0,N.jsx)(Z.Z,{onChange:function(n,t){return we("client",e.id,"key",t,n)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})]}),(0,N.jsxs)(f.ZP,{item:!0,xs:2,className:n.rowActions,children:[(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Pe("client")},disabled:t!==ie.length-1,children:(0,N.jsx)(u.dtP,{})})}),(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Re("client",e.id)},disabled:ie.length<=1,children:(0,N.jsx)(u.HFL,{})})})]})]},e.id)}))}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:(0,N.jsx)("h5",{children:"MinIO CA Certificates"})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:Ze.map((function(e){return(0,N.jsx)(y.Z,{certificateInfo:e,onDelete:function(){return ke(e)}})}))}),(0,N.jsx)(f.ZP,{item:!0,xs:12,children:oe.map((function(e,t){return(0,N.jsxs)(f.ZP,{item:!0,xs:12,className:n.minioCACertsRow,children:[(0,N.jsx)(f.ZP,{item:!0,xs:10,children:(0,N.jsx)(Z.Z,{onChange:function(n,t){return we("minioCAs",e.id,"cert",t,n)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),(0,N.jsx)(f.ZP,{item:!0,xs:2,children:(0,N.jsxs)("div",{className:n.rowActions,children:[(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Pe("minioCAs")},disabled:t!==oe.length-1,children:(0,N.jsx)(u.dtP,{})})}),(0,N.jsx)("div",{className:n.overlayAction,children:(0,N.jsx)(d.Z,{size:"small",onClick:function(){return Re("minioCAs",e.id)},disabled:oe.length<=1,children:(0,N.jsx)(u.HFL,{})})})]})})]},e.id)}))})]})]}),(0,N.jsxs)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:[(0,N.jsx)("h1",{className:n.sectionTitle,children:"Security Context"}),(0,N.jsx)(R.Z,{})]}),(0,N.jsx)(f.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,N.jsx)(S,{classes:n,runAsGroup:ge,runAsUser:ye,fsGroup:be,runAsNonRoot:Ae,fsGroupChangePolicy:Ne,setFSGroup:function(e){return t((0,k.FP)(e))},setRunAsUser:function(e){return t((0,k.wT)(e))},setRunAsGroup:function(e){return t((0,k.Be)(e))},setRunAsNonRoot:function(e){return t((0,k.vM)(e))},setFSGroupChangePolicy:function(e){return t((0,k.rR)(e))}})}),(0,N.jsx)(f.ZP,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:(0,N.jsx)(u.zxk,{id:"save-security",type:"submit",variant:"callAction",disabled:F||A,onClick:function(){return E(!0)},label:"Save"})})]})]})]})})))},22512:function(e,n,t){var i=t(72791),r=t(20890),s=t(11135),a=t(25787),o=t(80184);n.Z=(0,a.Z)((function(e){var n;return(0,s.Z)({errorBlock:{color:(null===(n=e.palette)||void 0===n?void 0:n.error.main)||"#C83B51"}})}))((function(e){var n=e.classes,t=e.errorMessage,s=e.withBreak,a=void 0===s||s;return(0,o.jsxs)(i.Fragment,{children:[a&&(0,o.jsx)("br",{}),(0,o.jsx)(r.Z,{component:"p",variant:"body1",className:n.errorBlock,children:t})]})}))}}]); -//# sourceMappingURL=332.ae2fe11c.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/332.ae2fe11c.chunk.js.map b/web-app/build/static/js/332.ae2fe11c.chunk.js.map deleted file mode 100644 index afacefa5d54..00000000000 --- a/web-app/build/static/js/332.ae2fe11c.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/332.ae2fe11c.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Common/FormHr.tsx","screens/Console/Common/TLSCertificate/TLSCertificate.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx","screens/Console/Tenants/securityContextSelector.tsx","screens/Console/Tenants/TenantDetails/TenantSecurity.tsx","screens/shared/ErrorBlock.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport { HelpIcon } from \"mds\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport styled from \"@emotion/styled\";\n\nconst FormHr = styled(\"hr\")`\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n`;\n\nexport default FormHr;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { DateTime, Duration } from \"luxon\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { ICertificateInfo } from \"../../Tenants/types\";\nimport LanguageIcon from \"@mui/icons-material/Language\";\nimport Chip from \"@mui/material/Chip\";\nimport {\n Box,\n Container,\n Divider,\n Grid,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Typography,\n} from \"@mui/material\";\nimport EventBusyIcon from \"@mui/icons-material/EventBusy\";\nimport AccessTimeIcon from \"@mui/icons-material/AccessTime\";\nimport { CertificateIcon } from \"mds\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n certificateIcon: {\n float: \"left\",\n paddingTop: \"5px !important\",\n paddingRight: \"10px !important\",\n },\n certificateInfo: { float: \"right\" },\n certificateWrapper: {\n height: \"auto\",\n margin: 5,\n border: \"1px solid #E2E2E2\",\n userSelect: \"text\",\n borderRadius: 4,\n \"& h6\": {\n fontWeight: \"bold\",\n },\n \"& div\": {\n padding: 0,\n },\n },\n certificateExpiry: {\n color: \"#616161\",\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n marginBottom: 5,\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificateDomains: {\n color: \"#616161\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificatesList: {\n border: \"1px solid #E2E2E2\",\n borderRadius: 4,\n color: \"#616161\",\n textTransform: \"lowercase\",\n overflowY: \"scroll\",\n maxHeight: 145,\n marginBottom: 10,\n },\n certificatesListItem: {\n padding: \"0px 16px\",\n borderBottom: \"1px solid #E2E2E2\",\n \"& div\": {\n minWidth: 0,\n },\n \"& svg\": {\n fontSize: 12,\n marginRight: 10,\n opacity: 0.5,\n },\n \"& span\": {\n fontSize: 12,\n },\n },\n certificateExpiring: {\n color: \"orange\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificateExpired: {\n color: \"red\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n });\n\ninterface ITLSCertificate {\n classes: any;\n certificateInfo: ICertificateInfo;\n onDelete: any;\n}\n\nconst TLSCertificate = ({\n classes,\n certificateInfo,\n onDelete = () => {},\n}: ITLSCertificate) => {\n const certificates = certificateInfo.domains || [];\n\n const expiry = DateTime.fromISO(certificateInfo.expiry);\n const now = DateTime.utc();\n // Expose error on Tenant if certificate is near expiration or expired\n let daysToExpiry: number = 0;\n let daysToExpiryHuman: string = \"\";\n let certificateExpiration: string = \"\";\n if (expiry) {\n let durationToExpiry = expiry.diff(now);\n daysToExpiry = durationToExpiry.as(\"days\");\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ days: 1 }))\n .shiftTo(\"days\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (daysToExpiry >= 10 && daysToExpiry < 30) {\n certificateExpiration = classes.certificateExpiring;\n }\n if (daysToExpiry < 10) {\n certificateExpiration = classes.certificateExpired;\n if (daysToExpiry < 2) {\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ minutes: 1 }))\n .shiftTo(\"hours\", \"minutes\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (durationToExpiry.as(\"minutes\") <= 1) {\n daysToExpiryHuman = \"EXPIRED\";\n }\n }\n }\n }\n\n return (\n \n \n \n \n \n \n {certificateInfo.name}\n \n \n \n  \n Expiry: \n {expiry.toFormat(\"yyyy/MM/dd\")}\n \n \n \n  \n Expires in: \n {daysToExpiryHuman}\n \n \n
\n \n {`${certificates.length} Domain (s):`}\n \n \n {certificates.map((dom, index) => (\n \n \n \n \n \n \n ))}\n \n
\n \n }\n onDelete={onDelete}\n />\n );\n};\n\nexport default withStyles(styles)(TLSCertificate);\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box } from \"@mui/material\";\nimport { CertificateIcon } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n {description}\n
\n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n var defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n var defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n \n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n
\n \n \n );\n};\n\nexport default TLSHelpBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport SelectWrapper from \"../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { Grid, SelectChangeEvent } from \"@mui/material\";\nimport { useDispatch } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { fsGroupChangePolicyType } from \"./types\";\n\ninterface IEditSecurityContextProps {\n classes: any;\n runAsUser: string;\n runAsGroup: string;\n fsGroup: string;\n fsGroupChangePolicy: fsGroupChangePolicyType;\n runAsNonRoot: boolean;\n setRunAsUser: any;\n setRunAsGroup: any;\n setFSGroup: any;\n setRunAsNonRoot: any;\n setFSGroupChangePolicy: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n configSectionItem: {\n marginRight: 15,\n marginBottom: 15,\n \"& .multiContainer\": {\n border: \"1px solid red\",\n },\n },\n });\n\nconst SecurityContextSelector = ({\n classes,\n runAsGroup,\n runAsUser,\n fsGroup,\n fsGroupChangePolicy,\n runAsNonRoot,\n setRunAsUser,\n setRunAsGroup,\n setFSGroup,\n setRunAsNonRoot,\n setFSGroupChangePolicy,\n}: IEditSecurityContextProps) => {\n const dispatch = useDispatch();\n return (\n \n
\n Security Context\n\n \n
\n
\n ) => {\n dispatch(setRunAsUser(e.target.value));\n }}\n label=\"Run As User\"\n value={runAsUser}\n required\n min=\"0\"\n />\n
\n
\n ) => {\n dispatch(setRunAsGroup(e.target.value));\n }}\n label=\"Run As Group\"\n value={runAsGroup}\n required\n min=\"0\"\n />\n
\n
\n
\n \n
\n
\n ) => {\n dispatch(setFSGroup(e.target.value));\n }}\n label=\"FsGroup\"\n value={fsGroup}\n required\n min=\"0\"\n />\n
\n\n
\n ) => {\n dispatch(setFSGroupChangePolicy(e.target.value));\n }}\n value={fsGroupChangePolicy}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n
\n
\n
\n \n
\n {\n dispatch(setRunAsNonRoot(!runAsNonRoot));\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(SecurityContextSelector);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { DialogContentText, IconButton } from \"@mui/material\";\nimport { AddIcon, Button, ConfirmModalIcon, Loader, RemoveIcon } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n fsGroupChangePolicyType,\n ICertificateInfo,\n ITenantSecurityResponse,\n} from \"../types\";\nimport {\n containerForHeader,\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n spacingUtils,\n tenantDetailsStyles,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport SecurityContextSelector from \"../securityContextSelector\";\nimport {\n setFSGroup,\n setFSGroupChangePolicy,\n setRunAsGroup,\n setRunAsNonRoot,\n setRunAsUser,\n} from \"../tenantSecurityContextSlice\";\nimport TLSHelpBox from \"../HelpBox/TLSHelpBox\";\nimport FormHr from \"../../Common/FormHr\";\n\ninterface ITenantSecurity {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...spacingUtils,\n minioCertificateRows: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n minioCACertsRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n loaderAlign: {\n textAlign: \"center\",\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...containerForHeader,\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSecurity = ({ classes }: ITenantSecurity) => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [enableTLS, setEnableTLS] = useState(false);\n const [enableAutoCert, setEnableAutoCert] = useState(false);\n const [enableCustomCerts, setEnableCustomCerts] = useState(false);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n // MinIO certificates\n const [minioServerCertificates, setMinioServerCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioClientCertificates, setMinioClientCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioCaCertificates, setMinioCaCertificates] = useState([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioServerCertificateSecrets, setMinioServerCertificateSecrets] =\n useState([]);\n const [minioClientCertificateSecrets, setMinioClientCertificateSecrets] =\n useState([]);\n const [minioTLSCaCertificateSecrets, setMinioTLSCaCertificateSecrets] =\n useState([]);\n\n const runAsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsGroup,\n );\n const runAsUser = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsUser,\n );\n const fsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroup,\n );\n const runAsNonRoot = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsNonRoot,\n );\n const fsGroupChangePolicy = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroupChangePolicy,\n );\n\n const getTenantSecurityInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n )\n .then((res: ITenantSecurityResponse) => {\n setEnableAutoCert(res.autoCert);\n setEnableTLS(res.autoCert);\n if (\n res.customCertificates.minio ||\n res.customCertificates.client ||\n res.customCertificates.minioCAs\n ) {\n setEnableCustomCerts(true);\n setEnableTLS(true);\n }\n setMinioServerCertificateSecrets(res.customCertificates.minio || []);\n setMinioClientCertificateSecrets(res.customCertificates.client || []);\n setMinioTLSCaCertificateSecrets(res.customCertificates.minioCAs || []);\n dispatch(setRunAsGroup(res.securityContext.runAsGroup));\n dispatch(setRunAsUser(res.securityContext.runAsUser));\n dispatch(setFSGroup(res.securityContext.fsGroup!));\n dispatch(setRunAsNonRoot(res.securityContext.runAsNonRoot));\n dispatch(\n setFSGroupChangePolicy(\n res.securityContext.fsGroupChangePolicy as fsGroupChangePolicyType,\n ),\n );\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantSecurityInfo();\n }\n }, [tenant, getTenantSecurityInfo]);\n\n const updateTenantSecurity = () => {\n setIsSending(true);\n let payload = {\n autoCert: enableAutoCert,\n customCertificates: {},\n securityContext: {\n runAsGroup: runAsGroup,\n runAsUser: runAsUser,\n runAsNonRoot: runAsNonRoot,\n fsGroup: fsGroup,\n fsGroupChangePolicy: fsGroupChangePolicy,\n },\n };\n if (enableCustomCerts) {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: certificatesToBeRemoved,\n minioServerCertificates: minioServerCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioClientCertificates: minioClientCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioCAsCertificates: minioCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((cert: any) => cert),\n };\n } else {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: [\n ...minioServerCertificateSecrets.map((cert) => cert.name),\n ...minioClientCertificateSecrets.map((cert) => cert.name),\n ...minioTLSCaCertificateSecrets.map((cert) => cert.name),\n ],\n minioServerCertificates: [],\n minioClientCertificates: [],\n minioCAsCertificates: [],\n };\n }\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n // Refresh Information and reset forms\n setMinioServerCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioClientCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioCaCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n getTenantSecurityInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n // TLS certificate secrets can be referenced MinIO, Console or KES, we need to remove the secret from all list and update\n // the arrays\n // Add certificate to the global list of secrets to be removed\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n\n // Update MinIO server TLS certificate secrets\n const updatedMinioServerCertificateSecrets =\n minioServerCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n // Update MinIO client TLS certificate secrets\n const updatedMinioClientCertificateSecrets =\n minioClientCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n const updatedMinIOTLSCaCertificateSecrets =\n minioTLSCaCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n setMinioServerCertificateSecrets(updatedMinioServerCertificateSecrets);\n setMinioClientCertificateSecrets(updatedMinioClientCertificateSecrets);\n setMinioTLSCaCertificateSecrets(updatedMinIOTLSCaCertificateSecrets);\n };\n\n const addFileToKeyPair = (\n type: string,\n id: string,\n key: string,\n fileName: string,\n value: string,\n ) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n const NCertList = certificates.map((item: KeyPair) => {\n if (item.id === id) {\n return {\n ...item,\n [key]: fileName,\n [`encoded_${key}`]: value,\n };\n }\n return item;\n });\n updateCertificates(NCertList);\n };\n\n const deleteKeyPair = (type: string, id: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n if (certificates.length > 1) {\n const cleanCertsList = certificates.filter(\n (item: KeyPair) => item.id !== id,\n );\n updateCertificates(cleanCertsList);\n }\n };\n\n const addKeyPair = (type: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n const updatedCertificates = [\n ...certificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n updateCertificates(updatedCertificates);\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantSecurity}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n
\n \n
\n ) : (\n \n \n

Security

\n \n
\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableTLS(checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n \n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableAutoCert(checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableCustomCerts(checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n \n\n {enableCustomCerts && (\n \n {!enableAutoCert && (\n \n \n \n )}\n \n
MinIO Server Certificates
\n
\n \n {minioServerCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioServerCertificates.map((keyPair, index) => (\n \n \n \n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n )\n }\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n )\n }\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n \n
\n addKeyPair(\"minio\")}\n disabled={\n index !== minioServerCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minio\", keyPair.id)\n }\n disabled={minioServerCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n\n \n
MinIO Client Certificates
\n
\n \n {minioClientCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioClientCertificates.map((keyPair, index) => (\n \n \n \n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n )\n }\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n )\n }\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n \n
\n addKeyPair(\"client\")}\n disabled={\n index !== minioClientCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"client\", keyPair.id)\n }\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n\n \n
MinIO CA Certificates
\n
\n \n {minioTLSCaCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioCaCertificates.map((keyPair: KeyPair, index) => (\n \n \n \n addFileToKeyPair(\n \"minioCAs\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n )\n }\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n
\n
\n addKeyPair(\"minioCAs\")}\n disabled={\n index !== minioCaCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minioCAs\", keyPair.id)\n }\n disabled={minioCaCertificates.length <= 1}\n >\n \n \n
\n
\n
\n
\n ))}\n \n \n )}\n \n )}\n \n

Security Context

\n \n
\n \n dispatch(setFSGroup(value))}\n setRunAsUser={(value: string) => dispatch(setRunAsUser(value))}\n setRunAsGroup={(value: string) =>\n dispatch(setRunAsGroup(value))\n }\n setRunAsNonRoot={(value: boolean) =>\n dispatch(setRunAsNonRoot(value))\n }\n setFSGroupChangePolicy={(value: fsGroupChangePolicyType) =>\n dispatch(setFSGroupChangePolicy(value))\n }\n />\n \n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.loadingTenant,\n selectedTenant: state.tenants.currentTenant,\n tenant: state.tenants.tenantInfo,\n});\n\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(TenantSecurity));\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n"],"names":["withStyles","theme","createStyles","_objectSpread","fieldBasic","tooltipHelper","valueString","maxWidth","whiteSpace","overflow","textOverflow","marginTop","fileInputField","margin","flexFlow","fileInputStyles","inputLabel","fontWeight","textBoxContainer","border","paddingLeft","_ref","label","classes","onChange","id","name","_ref$disabled","disabled","_ref$tooltip","tooltip","required","_ref$error","error","_ref$accept","accept","_ref$value","value","_useState","useState","_useState2","_slicedToArray","showFileSelector","setShowSelector","_jsx","React","children","_jsxs","Grid","item","xs","className","concat","fieldBottom","fieldContainer","errorInField","InputLabel","htmlFor","fieldLabelError","tooltipContainer","Tooltip","title","placement","HelpIcon","type","e","fileName","get","evt","callback","file","target","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","color","component","onClick","disableRipple","disableFocusRipple","size","CancelIcon","ErrorBlock","errorMessage","fileReselect","AttachFileIcon","FormHr","styled","_templateObject","_taggedTemplateLiteral","certificateIcon","float","paddingTop","paddingRight","certificateInfo","certificateWrapper","height","userSelect","borderRadius","padding","certificateExpiry","display","alignItems","flexWrap","marginBottom","certificateDomains","certificatesList","textTransform","overflowY","maxHeight","certificatesListItem","borderBottom","minWidth","fontSize","marginRight","opacity","certificateExpiring","certificateExpired","_ref$onDelete","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","listStyle","maximumFractionDigits","minutes","Chip","variant","Container","CertificateIcon","Typography","gutterBottom","Box","EventBusyIcon","toFormat","AccessTimeIcon","Divider","List","map","dom","index","ListItem","ListItemAvatar","LanguageIcon","ListItemText","primary","FeatureItem","icon","description","sx","width","style","fontStyle","params","useParams","tenantNameParam","tenantName","tenantNamespaceParam","tenantNamespace","namespace","useSelector","state","createTenant","fields","nameTenant","flex","href","rel","configSectionItem","runAsGroup","runAsUser","fsGroup","fsGroupChangePolicy","runAsNonRoot","setRunAsUser","setRunAsGroup","setFSGroup","setRunAsNonRoot","setFSGroupChangePolicy","dispatch","useDispatch","Fragment","fieldGroup","fieldSpaceTop","descriptionText","multiContainerStackNarrow","InputBoxWrapper","min","SelectWrapper","options","multiContainer","FormSwitchWrapper","checked","connector","connect","loadingTenant","tenants","selectedTenant","currentTenant","tenant","tenantInfo","tenantDetailsStyles","spacingUtils","minioCertificateRows","justifyContent","minioCACertsRow","rowActions","overlayAction","marginLeft","background","loaderAlign","textAlign","fileItem","containerForHeader","createTenantCommon","formFieldStyles","modalBasic","wizardCommon","useAppDispatch","isSending","setIsSending","_useState3","_useState4","dialogOpen","setDialogOpen","_useState5","_useState6","enableTLS","setEnableTLS","_useState7","_useState8","enableAutoCert","setEnableAutoCert","_useState9","_useState10","enableCustomCerts","setEnableCustomCerts","_useState11","_useState12","certificatesToBeRemoved","setCertificatesToBeRemoved","_useState13","Date","key","cert","encoded_key","encoded_cert","_useState14","minioServerCertificates","setMinioServerCertificates","_useState15","_useState16","minioClientCertificates","setMinioClientCertificates","_useState17","_useState18","minioCaCertificates","setMinioCaCertificates","_useState19","_useState20","minioServerCertificateSecrets","setMinioServerCertificateSecrets","_useState21","_useState22","minioClientCertificateSecrets","setMinioClientCertificateSecrets","_useState23","_useState24","minioTLSCaCertificateSecrets","setMinioTLSCaCertificateSecrets","editTenantSecurityContext","getTenantSecurityInfo","useCallback","api","invoke","then","res","autoCert","customCertificates","minio","client","minioCAs","securityContext","catch","err","setErrorSnackMessage","useEffect","removeCertificate","_toConsumableArray","updatedMinioServerCertificateSecrets","filter","certificateSecret","updatedMinioClientCertificateSecrets","updatedMinIOTLSCaCertificateSecrets","addFileToKeyPair","updateCertificates","_objectSpread2","_defineProperty","deleteKeyPair","addKeyPair","ConfirmDialog","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","payload","secretsToBeDeleted","keyPair","crt","minioCAsCertificates","confirmationContent","DialogContentText","Loader","container","spacing","sectionTitle","formFieldRow","TLSHelpBox","TLSCertificate","FileSelector","encodedValue","AddIcon","RemoveIcon","SecurityContextSelector","Button","_theme$palette","errorBlock","palette","main","_ref$withBreak","withBreak"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/350.8e4c2698.chunk.js b/web-app/build/static/js/350.8e4c2698.chunk.js new file mode 100644 index 00000000000..5b7678daab8 --- /dev/null +++ b/web-app/build/static/js/350.8e4c2698.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[350],{9505:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(2791),s=n(1207);const l=(e,t)=>{const[n,l]=(0,a.useState)(!1);return[n,(n,a,r,o)=>{l(!0),s.Z.invoke(n,a,r,o).then((t=>{l(!1),e(t)})).catch((e=>{l(!1),t(e)}))}]}},8350:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(2791),s=n(9945),l=n(7995),r=n(1320),o=n(9505),i=n(3508),c=n(184);const d=e=>{let{deleteOpen:t,selectedTenant:n,closeDeleteModalAndRefresh:d}=e;const m=(0,r.TL)(),[p,u]=(0,a.useState)(""),[h,x]=(0,a.useState)(!1),[j,v]=(0,o.Z)((()=>d(!0)),(e=>m((0,l.Ih)(e))));return(0,c.jsx)(i.Z,{title:"Delete Tenant",confirmText:"Delete",isOpen:t,titleIcon:(0,c.jsx)(s.NvT,{}),isLoading:j,onConfirm:()=>{p===n.name?v("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.name),{delete_pvcs:h}):(0,l.Ih)({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:()=>d(!1),confirmButtonProps:{disabled:p!==n.name||j},confirmationContent:(0,c.jsxs)(s.ltY,{withBorders:!1,containerPadding:!1,children:[h&&(0,c.jsx)(s.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,c.jsx)(s.J6i,{variant:"error",title:"WARNING",message:"Delete Volumes: Data will be permanently deleted. Please proceed with caution."})}),"To continue please type ",(0,c.jsx)("b",{children:n.name})," in the box.",(0,c.jsxs)(s.rjZ,{item:!0,xs:12,children:[(0,c.jsx)(s.Wzg,{id:"retype-tenant",name:"retype-tenant",onChange:e=>{u(e.target.value)},label:"",value:p}),(0,c.jsx)(s.rsf,{checked:h,id:"delete-volumes",label:"Delete Volumes",name:"delete-volumes",onChange:()=>{x(!h)}})]})]})})}}}]); +//# sourceMappingURL=350.8e4c2698.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/350.8e4c2698.chunk.js.map b/web-app/build/static/js/350.8e4c2698.chunk.js.map new file mode 100644 index 00000000000..619a25ceb86 --- /dev/null +++ b/web-app/build/static/js/350.8e4c2698.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/350.8e4c2698.chunk.js","mappings":"0IAQA,MAuBA,EAvBeA,CACbC,EACAC,KAEA,MAAOC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAkB,GAgBpD,MAAO,CAACF,EAdQG,CAACC,EAAgBC,EAAaC,EAAYC,KACxDN,GAAa,GACbO,EAAAA,EACGC,OAAOL,EAAQC,EAAKC,EAAMC,GAC1BG,MAAMC,IACLV,GAAa,GACbH,EAAUa,EAAI,IAEfC,OAAOC,IACNZ,GAAa,GACbF,EAAQc,EAAI,GACZ,EAGqB,C,wHCU7B,MAoFA,EApFqBC,IAIC,IAJA,WACpBC,EAAU,eACVC,EAAc,2BACdC,GACcH,EACd,MAAMI,GAAWC,EAAAA,EAAAA,OACVC,EAAcC,IAAmBnB,EAAAA,EAAAA,UAAS,KAO1CoB,EAAeC,IAAoBrB,EAAAA,EAAAA,WAAkB,IAErDsB,EAAeC,IAAmB5B,EAAAA,EAAAA,IAPpB6B,IAAMT,GAA2B,KAClCJ,GAClBK,GAASS,EAAAA,EAAAA,IAAqBd,MAsBhC,OACEe,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,gBACLC,YAAa,SACbC,OAAQjB,EACRkB,WAAWL,EAAAA,EAAAA,KAACM,EAAAA,IAAiB,IAC7BlC,UAAWwB,EACXW,UAtBoBC,KAClBhB,IAAiBJ,EAAeqB,KAOpCZ,EACE,SAAS,sBAADa,OACctB,EAAeuB,UAAS,aAAAD,OAAYtB,EAAeqB,MACzE,CAAEG,YAAalB,KATfK,EAAAA,EAAAA,IAAqB,CACnBc,aAAc,2BACdC,cAAe,IAQlB,EAWCC,QA7BYA,IAAM1B,GAA2B,GA8B7C2B,mBAAoB,CAClBC,SAAUzB,IAAiBJ,EAAeqB,MAAQb,GAEpDsB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,IAAU,CAACC,aAAa,EAAOC,kBAAkB,EAAMC,SAAA,CACrD7B,IACCM,EAAAA,EAAAA,KAACwB,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAIC,UAAW,YAAYJ,UACxCvB,EAAAA,EAAAA,KAAC4B,EAAAA,IAAkB,CACjBC,QAAS,QACT3B,MAAO,UACP4B,QACE,qFAIN,4BACsB9B,EAAAA,EAAAA,KAAA,KAAAuB,SAAInC,EAAeqB,OAAS,gBACpDU,EAAAA,EAAAA,MAACK,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGH,SAAA,EAChBvB,EAAAA,EAAAA,KAAC+B,EAAAA,IAAQ,CACPC,GAAG,gBACHvB,KAAK,gBACLwB,SAAWC,IACTzC,EAAgByC,EAAMC,OAAOC,MAAM,EAErCC,MAAM,GACND,MAAO5C,KAETQ,EAAAA,EAAAA,KAACsC,EAAAA,IAAM,CACLC,QAAS7C,EACTsC,GAAE,iBACFK,MAAO,iBACP5B,KAAI,iBACJwB,SAAUA,KACRtC,GAAkBD,EAAc,WAM1C,C","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Tenants/ListTenants/DeleteTenant.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport {\n ConfirmDeleteIcon,\n FormLayout,\n InformativeMessage,\n InputBox,\n Switch,\n Grid,\n} from \"mds\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeleteTenant {\n deleteOpen: boolean;\n selectedTenant: Tenant;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeleteTenant = ({\n deleteOpen,\n selectedTenant,\n closeDeleteModalAndRefresh,\n}: IDeleteTenant) => {\n const dispatch = useAppDispatch();\n const [retypeTenant, setRetypeTenant] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteVolumes, setDeleteVolumes] = useState(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypeTenant !== selectedTenant.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedTenant.namespace}/tenants/${selectedTenant.name}`,\n { delete_pvcs: deleteVolumes },\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypeTenant !== selectedTenant.name || deleteLoading,\n }}\n confirmationContent={\n \n {deleteVolumes && (\n \n \n \n )}\n To continue please type {selectedTenant.name} in the box.\n \n ) => {\n setRetypeTenant(event.target.value);\n }}\n label=\"\"\n value={retypeTenant}\n />\n {\n setDeleteVolumes(!deleteVolumes);\n }}\n />\n \n \n }\n />\n );\n};\n\nexport default DeleteTenant;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","deleteOpen","selectedTenant","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypeTenant","setRetypeTenant","deleteVolumes","setDeleteVolumes","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","delete_pvcs","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","FormLayout","withBorders","containerPadding","children","Grid","item","xs","className","InformativeMessage","variant","message","InputBox","id","onChange","event","target","value","label","Switch","checked"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/353.f19ed86f.chunk.js b/web-app/build/static/js/353.f19ed86f.chunk.js new file mode 100644 index 00000000000..b5807e27514 --- /dev/null +++ b/web-app/build/static/js/353.f19ed86f.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[353],{3814:(e,n,t)=>{t.d(n,{I:()=>a,O:()=>i});const i={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},a={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},6028:(e,n,t)=>{t.d(n,{Z:()=>c});var i=t(2791),a=t(9434),l=t(9945),s=t(1320),o=t(7995),r=t(8057),d=t(184);const c=e=>{let{onClose:n,modalOpen:t,title:c,children:u,wideLimit:v=!0,titleIcon:m=null,iconColor:x="default",sx:g}=e;const h=(0,s.TL)(),[p,j]=(0,i.useState)(!1),f=(0,a.v9)((e=>e.system.modalSnackBar));(0,i.useEffect)((()=>{h((0,o.MK)(""))}),[h]),(0,i.useEffect)((()=>{if(f){if(""===f.message)return void j(!1);"error"!==f.type&&j(!0)}}),[f]);let b="";return f&&(b=f.detailedErrorMsg,(""===f.detailedErrorMsg||f.detailedErrorMsg.length<5)&&(b=f.message)),(0,d.jsxs)(l.cFD,{onClose:n,open:t,title:c,titleIcon:m,widthLimit:v,sx:g,iconColor:x,children:[(0,d.jsx)(r.Z,{isModal:!0}),(0,d.jsx)(l.A9Q,{onClose:()=>{j(!1),h((0,o.MK)(""))},open:p,message:b,mode:"inline",variant:"error"===f.type?"error":"default",autoHideDuration:"error"===f.type?10:5,condensed:!0}),u]})}},4815:(e,n,t)=>{t.d(n,{Z:()=>m});t(2791);var i=t(9945),a=t(2600),l=t(5390),s=t(1048),o=t(5248),r=t(184);const d=e=>{let{totalValue:n,sizeItems:t,bgColor:i="#ededed"}=e;return(0,r.jsx)("div",{style:{width:"100%",height:12,backgroundColor:i,borderRadius:30,display:"flex",transitionDuration:"0.3s",overflow:"hidden"},children:t.map(((e,t)=>{const i=100*e.value/n;return(0,r.jsx)("div",{style:{width:"".concat(i,"%"),height:"100%",backgroundColor:e.color,transitionDuration:"0.3s"}},"itemSize-".concat(t.toString()))}))})};var c=t(6444),u=t(6181),v=t.n(u);const m=e=>{let{totalCapacity:n,usedSpaceVariants:t,statusClass:u,render:m="pie"}=e;const x=["#8dacd3","#bca1ea","#92e8d2","#efc9ac","#97f274","#f7d291","#71ACCB","#f28282","#e28cc1","#2781B0"],g=(0,c.Fg)(),h="".concat(v()(g,"borderColor","#ededed"),"70"),p=t.reduce(((e,n)=>e+n.value),0),j=n-p;let f=[];const b=t.find((e=>"STANDARD"===e.variant))||{value:0,variant:"empty"};if(t.length>10){f=[{value:p-b.value,color:"#2781B0",label:"Total Tiers Space"}]}else f=t.filter((e=>"STANDARD"!==e.variant)).map(((e,n)=>({value:e.value,color:x[n],label:"Tier - ".concat(e.variant)})));let y=v()(g,"signalColors.main","#07193E");const k=100*b.value/n;k>=90?y=v()(g,"signalColors.danger","#C83B51"):k>=75&&(y=v()(g,"signalColors.warning","#FFAB0F"));const w=[{value:b.value,color:y,label:"Used Space by Tenant"},...f,{value:j,color:"bar"===m?h:"transparent",label:"Empty Space"}];if("bar"===m){const e=w.map((e=>({value:e.value,color:e.color,itemName:e.label})));return(0,r.jsx)("div",{style:{width:"100%",marginBottom:15},children:(0,r.jsx)(d,{totalValue:n,sizeItems:e,bgColor:h})})}return(0,r.jsxs)("div",{style:{position:"relative",width:110,height:110},children:[(0,r.jsx)("div",{style:{position:"absolute",right:-5,top:15,zIndex:400},className:u,children:(0,r.jsx)(i.J$M,{style:{border:"#fff 2px solid",borderRadius:"100%",width:20,height:20}})}),(0,r.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",fontWeight:"bold",fontSize:11},children:isNaN(p)?"N/A":(0,o.l5)(p)}),(0,r.jsx)("div",{children:(0,r.jsxs)(a.u,{width:110,height:110,children:[(0,r.jsx)(l.b,{data:[{value:100}],cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,fill:h,isAnimationActive:!1,stroke:"none"}),(0,r.jsx)(l.b,{data:w,cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,children:w.map(((e,n)=>(0,r.jsx)(s.b,{fill:e.color,stroke:"none"},"cellCapacity-".concat(n))))})]})})]})}},1353:(e,n,t)=>{t.r(n),t.d(n,{default:()=>I});var i=t(2791),a=t(9434),l=t(9945),s=t(6181),o=t.n(s),r=t(6444),d=t(3814),c=t(7995),u=t(1320),v=t(6028),m=t(1207),x=t(184);const g=e=>{let{open:n,closeModalAndRefresh:t,namespace:a,idTenant:s}=e;const o=(0,u.TL)(),[r,g]=(0,i.useState)(!1),[h,p]=(0,i.useState)(""),[j,f]=(0,i.useState)(!1),[b,y]=(0,i.useState)(""),[k,w]=(0,i.useState)(""),[S,C]=(0,i.useState)(""),[A,I]=(0,i.useState)(!0),E=(0,i.useCallback)((e=>{const n=new RegExp("^$|^((.*?)/(.*?):(.+))$");if("minioImage"===e)I(n.test(h))}),[h]);(0,i.useEffect)((()=>{E("minioImage")}),[h,E]);return(0,x.jsx)(v.Z,{title:"Update MinIO Version",modalOpen:n,onClose:()=>{t(!1)},children:(0,x.jsx)(l.ltY,{withBorders:!1,containerPadding:!1,children:(0,x.jsxs)(l.xuv,{children:[(0,x.jsx)(l.xuv,{sx:{fontSize:14},children:"Please enter the MinIO image from dockerhub to use. If blank, then latest build will be used."}),(0,x.jsx)("br",{}),(0,x.jsx)(l.Wzg,{value:h,label:"MinIO's Image",id:"minioImage",name:"minioImage",placeholder:"E.g. minio/minio:RELEASE.2022-02-26T02-54-46Z",onChange:e=>{p(e.target.value)}}),(0,x.jsx)(l.rsf,{value:"imageRegistry",id:"setImageRegistry",name:"setImageRegistry",checked:j,onChange:e=>{f(!j)},label:"Set Custom Image Registry",indicatorLabels:["Yes","No"]}),j&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(l.Wzg,{value:b,label:"Endpoint",id:"imageRegistry",name:"imageRegistry",placeholder:"E.g. https://index.docker.io/v1/",onChange:e=>{y(e.target.value)}}),(0,x.jsx)(l.Wzg,{value:k,label:"Username",id:"imageRegistryUsername",name:"imageRegistryUsername",placeholder:"Enter image registry username",onChange:e=>{w(e.target.value)}}),(0,x.jsx)(l.Wzg,{value:S,label:"Password",id:"imageRegistryPassword",name:"imageRegistryPassword",placeholder:"Enter image registry password",onChange:e=>{C(e.target.value)}})]}),(0,x.jsxs)(l.xuv,{sx:d.I.modalButtonBar,children:[(0,x.jsx)(l.zxk,{id:"clear",variant:"regular",onClick:()=>{p(""),f(!1),y(""),w(""),C("")},label:"Clear"}),(0,x.jsx)(l.zxk,{id:"save-tenant",type:"submit",variant:"callAction",disabled:!A||j&&(""===b.trim()||""===k.trim()||""===S.trim())||r,onClick:()=>{g(!0);let e={image:h};if(j){const n={image_registry:{registry:b,username:k,password:S}};e={...e,...n}}m.Z.invoke("PUT","/api/v1/namespaces/".concat(a,"/tenants/").concat(s),e).then((()=>{g(!1),o((0,c.y1)("Image updated successfully")),t(!0)})).catch((e=>{o((0,c.zb)(e)),g(!1)}))},label:"Save"})]})]})})})};var h=t(7689),p=t(2295),j=t(5248),f=t(4815);const b=r.ZP.div((e=>{let{theme:n}=e;return{width:"100%","& .tenantStatus":{marginTop:2,color:o()(n,"signalColors.disabled","#E6EBEB"),"& .min-icon":{width:16,height:16,marginRight:4},"&.red":{color:o()(n,"signalColors.danger","#C51B3F")},"&.yellow":{color:o()(n,"signalColors.warning","#FFBD62")},"&.green":{color:o()(n,"signalColors.good","#4CCB92")}}}})),y=e=>{var n,t,a,s,o,r;let{tenant:d,healthStatus:c,loading:u,error:v}=e,m={value:"n/a",unit:""},g={value:"n/a",unit:""},h={value:"n/a",unit:""},p={value:"n/a",unit:""},y={value:"n/a",unit:""};if(null!==(n=d.status)&&void 0!==n&&null!==(t=n.usage)&&void 0!==t&&t.raw){const e=(0,j.ae)("".concat(d.status.usage.raw),!0).split(" ");m.value=e[0],m.unit=e[1]}if(null!==(a=d.status)&&void 0!==a&&null!==(s=a.usage)&&void 0!==s&&s.capacity){const e=(0,j.ae)("".concat(d.status.usage.capacity),!0).split(" ");g.value=e[0],g.unit=e[1]}if(null!==(o=d.status)&&void 0!==o&&null!==(r=o.usage)&&void 0!==r&&r.capacity_usage){const e=(0,j.l5)(d.status.usage.capacity_usage,!0).split(" ");h.value=e[0],h.unit=e[1]}let k=[];if(d.tiers&&0!==d.tiers.length){k=d.tiers.map((e=>({value:e.size,variant:e.name})));let e=d.tiers.filter((e=>"internal"===e.type)).reduce(((e,n)=>e+n.size),0),n=d.tiers.filter((e=>"internal"!==e.type)).reduce(((e,n)=>e+n.size),0);const t=(0,j.l5)(n,!0).split(" ");y.value=t[0],y.unit=t[1];const i=(0,j.l5)(e,!0).split(" ");p.value=i[0],p.unit=i[1]}else{var w,S;k=[{value:(null===(w=d.status)||void 0===w||null===(S=w.usage)||void 0===S?void 0:S.capacity_usage)||0,variant:"STANDARD"}]}return(0,x.jsxs)(i.Fragment,{children:[u&&(0,x.jsx)("div",{style:{padding:5},children:(0,x.jsx)(l.rjZ,{item:!0,xs:12,style:{textAlign:"center"},children:(0,x.jsx)(l.aNw,{style:{width:40,height:40}})})}),(()=>{var e,n;return u?null:""!==v?(0,x.jsx)(l.J6i,{title:"Error",message:v,variant:"error"}):(0,x.jsxs)(b,{children:[(0,x.jsx)(f.Z,{totalCapacity:(null===(e=d.status)||void 0===e||null===(n=e.usage)||void 0===n?void 0:n.raw)||0,usedSpaceVariants:k,statusClass:"",render:"bar"}),(0,x.jsxs)(l.xuv,{sx:{display:"flex",alignItems:"stretch",margin:"0 0 15px 0",flexDirection:"row",gap:20,["@media (max-width: ".concat(l.Egj.sm,"px)")]:{flexDirection:"column",gap:5},["@media (max-width: ".concat(l.Egj.md,"px)")]:{gap:15}},children:[(!d.tiers||0===d.tiers.length)&&(0,x.jsx)(i.Fragment,{children:(0,x.jsx)(l.kKA,{label:"Internal:",direction:"row",value:"".concat(h.value," ").concat(h.unit)})}),d.tiers&&d.tiers.length>0&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(l.kKA,{label:"Internal:",direction:"row",value:"".concat(p.value," ").concat(p.unit)}),(0,x.jsx)(l.kKA,{label:"Tiered:",direction:"row",value:"".concat(y.value," ").concat(y.unit)})]}),c&&(0,x.jsx)(l.kKA,{direction:"row",label:"Health:",value:(0,x.jsx)("div",{className:"tenantStatus ".concat(c),children:(0,x.jsx)(l.J$M,{})})})]})]})})()]})},k=e=>{let{open:n,closeModalAndRefresh:t,namespace:a,idTenant:s,domains:o}=e;const r=(0,u.TL)(),[g,h]=(0,i.useState)(!1),[p,j]=(0,i.useState)(""),[f,b]=(0,i.useState)([""]),[y,k]=(0,i.useState)(!0),[w,S]=(0,i.useState)([!0]);(0,i.useEffect)((()=>{if(o){const e=o.console||"";if(j(e),""!==e){const n=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/);k(n.test(e))}else k(!0);if(o.minio&&o.minio.length>0){b(o.minio);const e=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/),n=o.minio.map((n=>""===n.trim()||e.test(n)));S(n)}}}),[o]);const C=()=>{const e=[...f],n=[...w];e.push(""),n.push(!0),b(e),S(n)};return(0,x.jsx)(v.Z,{title:"Edit Tenant Domains - ".concat(s),modalOpen:n,onClose:()=>{t(!1)},children:(0,x.jsxs)(l.xuv,{sx:d.I.modalFormScrollable,children:[(0,x.jsxs)(l.ltY,{withBorders:!1,containerPadding:!1,children:[(0,x.jsx)(l.Wzg,{id:"console_domain",name:"console_domain",onChange:e=>{j(e.target.value),k(e.target.validity.valid)},label:"Console Domain",value:p,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-.\\/]*)?$",error:y?"":"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)"}),(0,x.jsx)("h4",{children:"MinIO Domains"}),(0,x.jsx)("div",{children:f.map(((e,n)=>(0,x.jsxs)(l.xuv,{sx:{display:"flex",gap:10},children:[(0,x.jsx)(l.Wzg,{id:"minio-domain-".concat(n.toString()),name:"minio-domain-".concat(n.toString()),onChange:e=>{((e,n)=>{const t=[...f];t[n]=e,b(t)})(e.target.value,n),((e,n)=>{const t=[...w];t[n]=e,S(t)})(e.target.validity.valid,n)},label:"MinIO Domain ".concat(n+1),value:e,placeholder:"Eg. http://subdomain.domain",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$",error:w[n]?"":"MinIO domain format is incorrect (http|https://subdomain.domain)"}),(0,x.jsxs)(l.xuv,{sx:{display:"flex",alignItems:"center",gap:10,marginBottom:12},children:[(0,x.jsx)(l.hU,{size:"small",onClick:C,disabled:n!==f.length-1,children:(0,x.jsx)(l.dtP,{})}),(0,x.jsx)(l.hU,{size:"small",onClick:()=>(e=>{const n=f.filter(((n,t)=>t!==e)),t=w.filter(((n,t)=>t!==e));b(n),S(t)})(n),disabled:f.length<=1,children:(0,x.jsx)(l.HFL,{})})]})]},"minio-domain-key-".concat(n.toString()))))})]}),(0,x.jsxs)(l.xuv,{sx:d.I.modalButtonBar,children:[(0,x.jsx)(l.zxk,{id:"clear-edit-domain",type:"button",variant:"regular",onClick:()=>{j(""),k(!0),b([""]),S([!0])},label:"Clear"}),(0,x.jsx)(l.zxk,{id:"save-domain",type:"submit",variant:"callAction",disabled:g||!y||w.filter((e=>!e)).length>0,onClick:()=>{h(!0);let e={domains:{console:p,minio:f.filter((e=>""!==e.trim()))}};m.Z.invoke("PUT","/api/v1/namespaces/".concat(a,"/tenants/").concat(s,"/domains"),e).then((()=>{h(!1),r((0,c.y1)("Domains updated successfully")),t(!0)})).catch((e=>{h(!1),r((0,c.zb)(e))}))},label:"Save"})]})]})})},w=r.ZP.div((e=>{let{theme:n}=e;return{"& .linkedSection":{color:o()(n,"linkColor","#2781B0"),fontFamily:"'Inter', sans-serif"},"& .autoGeneratedLink":{fontStyle:"italic"}}})),S=e=>{var n;let{tenant:t}=e;return t?(0,x.jsx)(y,{tenant:t,label:"Storage",error:"",loading:!1,healthStatus:null===t||void 0===t||null===(n=t.status)||void 0===n?void 0:n.health_status}):null},C=function(e){return e?(0,x.jsx)(l.Yp9,{}):(0,x.jsx)(l.cmQ,{style:{color:"grey"}})},A={display:"flex",justifyContent:"space-between",marginTop:"10px","@media (max-width: 600px)":{flexFlow:"column"}},I=()=>{var e,n,t,s,r,d,c,v,m,j,f,b,y,I,E,R,Z,z,T,D,B,F,K,M;const _=(0,u.TL)(),{tenantName:N,tenantNamespace:O}=(0,h.UO)(),L=(0,a.v9)((e=>e.tenants.tenantInfo)),P=(0,a.v9)((e=>o()(e.tenants.tenantInfo,"encryptionEnabled",!1))),U=(0,a.v9)((e=>o()(e.tenants.tenantInfo,"minioTLS",!1))),W=(0,a.v9)((e=>o()(e.tenants.tenantInfo,"idpAdEnabled",!1))),$=(0,a.v9)((e=>o()(e.tenants.tenantInfo,"idpOidcEnabled",!1))),[Y,V]=(0,i.useState)(0),[G,H]=(0,i.useState)(0),[J,Q]=(0,i.useState)(0),[q,X]=(0,i.useState)(!1),[ee,ne]=(0,i.useState)(!1);(0,i.useEffect)((()=>{var e,n,t;L&&(V((null===L||void 0===L||null===(e=L.pools)||void 0===e?void 0:e.length)||0),Q((null===(n=L.pools)||void 0===n?void 0:n.reduce(((e,n)=>e+n.volumes_per_server*n.servers),0))||0),H((null===(t=L.pools)||void 0===t?void 0:t.reduce(((e,n)=>e+n.servers),0))||0))}),[L]);return(0,x.jsxs)(i.Fragment,{children:[q&&(0,x.jsx)(g,{open:q,closeModalAndRefresh:e=>{X(!1),e&&_((0,p.v)())},idTenant:N||"",namespace:O||""}),ee&&(0,x.jsx)(k,{open:ee,idTenant:N||"",namespace:O||"",domains:(null===L||void 0===L?void 0:L.domains)||null,closeModalAndRefresh:e=>{ne(!1),e&&_((0,p.v)())}}),(0,x.jsx)(l.NZf,{separator:!1,children:"Details"}),(0,x.jsx)(S,{tenant:L}),(0,x.jsx)(w,{children:(0,x.jsxs)(l.rjZ,{container:!0,children:[(0,x.jsxs)(l.rjZ,{item:!0,xs:12,sm:12,md:8,children:[(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"State:",value:null===L||void 0===L?void 0:L.currentState})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"MinIO:",value:(0,x.jsx)(l.vmT,{sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal",wordBreak:"break-all"},onClick:()=>{X(!0)},children:L?L.image:""})})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsxs)("h3",{children:["Domains",(0,x.jsx)(l.zxk,{id:"edit-domains",icon:(0,x.jsx)(l.dY8,{}),onClick:()=>{ne(!0)}})]})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Console:",value:(0,x.jsxs)(i.Fragment,{children:[null!==L&&void 0!==L&&null!==(e=L.domains)&&void 0!==e&&e.console&&""!==(null===L||void 0===L||null===(n=L.domains)||void 0===n?void 0:n.console)||null!==L&&void 0!==L&&null!==(t=L.endpoints)&&void 0!==t&&t.console?"":"-",(null===L||void 0===L||null===(s=L.endpoints)||void 0===s?void 0:s.console)&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)("a",{href:null===L||void 0===L||null===(r=L.endpoints)||void 0===r?void 0:r.console,target:"_blank",rel:"noopener",className:"linkedSection autoGeneratedLink",children:(null===L||void 0===L||null===(d=L.endpoints)||void 0===d?void 0:d.console)||"-"}),(0,x.jsx)("br",{})]}),(null===L||void 0===L||null===(c=L.domains)||void 0===c?void 0:c.console)&&""!==(null===L||void 0===L||null===(v=L.domains)||void 0===v?void 0:v.console)&&(0,x.jsx)("a",{href:(null===L||void 0===L||null===(m=L.domains)||void 0===m?void 0:m.console)||"",target:"_blank",rel:"noopener",className:"linkedSection",children:(null===L||void 0===L||null===(j=L.domains)||void 0===j?void 0:j.console)||""})]})})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"MinIO Endpoint".concat(null!==L&&void 0!==L&&null!==(f=L.endpoints)&&void 0!==f&&f.minio&&1===(null===L||void 0===L||null===(b=L.endpoints)||void 0===b?void 0:b.minio.length)?"":"s",":"),value:(0,x.jsxs)(i.Fragment,{children:[null!==L&&void 0!==L&&null!==(y=L.domains)&&void 0!==y&&y.minio||null!==L&&void 0!==L&&null!==(I=L.endpoints)&&void 0!==I&&I.minio?"":"-",(null===L||void 0===L||null===(E=L.endpoints)||void 0===E?void 0:E.minio)&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)("a",{href:null===L||void 0===L||null===(R=L.endpoints)||void 0===R?void 0:R.minio,target:"_blank",rel:"noopener",className:"linkedSection autoGeneratedLink",children:(null===L||void 0===L||null===(Z=L.endpoints)||void 0===Z?void 0:Z.minio)||"-"}),(0,x.jsx)("br",{})]}),(null===L||void 0===L||null===(z=L.domains)||void 0===z?void 0:z.minio)&&L.domains.minio.map((e=>(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)("a",{href:e,target:"_blank",rel:"noopener",className:"linkedSection",children:e}),(0,x.jsx)("br",{})]},e)))]})})})]}),(0,x.jsxs)(l.rjZ,{item:!0,xs:12,sm:12,md:4,children:[(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Instances:",value:G})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Clusters:",value:Y,sx:{marginRight:47}})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Total Drives:",value:J,sx:{marginRight:43}})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Write Quorum:",value:null!==L&&void 0!==L&&null!==(T=L.status)&&void 0!==T&&T.write_quorum?null===L||void 0===L||null===(D=L.status)||void 0===D?void 0:D.write_quorum:0})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Drives Online:",value:null!==L&&void 0!==L&&null!==(B=L.status)&&void 0!==B&&B.drives_online?null===L||void 0===L||null===(F=L.status)||void 0===F?void 0:F.drives_online:0,sx:{marginRight:8}})}),(0,x.jsx)(l.rjZ,{item:!0,xs:12,children:(0,x.jsx)(l.kKA,{label:"Drives Offline:",value:null!==L&&void 0!==L&&null!==(K=L.status)&&void 0!==K&&K.drives_offline?null===L||void 0===L||null===(M=L.status)||void 0===M?void 0:M.drives_offline:0,sx:{marginRight:7}})})]})]})}),(0,x.jsx)(l.NZf,{separator:!0,children:"Features"}),(0,x.jsxs)(l.xuv,{sx:A,children:[(0,x.jsx)(l.kKA,{direction:"row",label:"MinIO TLS:",value:C(U,"tenant-tls")}),(0,x.jsx)(l.kKA,{direction:"row",label:"AD/LDAP:",value:C(W,"tenant-sts")}),(0,x.jsx)(l.kKA,{direction:"row",label:"Encryption:",value:C(P,"tenant-enc")})]}),(0,x.jsx)(l.xuv,{sx:{...A},children:(0,x.jsx)(l.kKA,{direction:"row",label:"OpenID:",value:C($,"tenant-oidc")})})]})}}}]); +//# sourceMappingURL=353.f19ed86f.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/353.f19ed86f.chunk.js.map b/web-app/build/static/js/353.f19ed86f.chunk.js.map new file mode 100644 index 00000000000..727ca1791ff --- /dev/null +++ b/web-app/build/static/js/353.f19ed86f.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/353.f19ed86f.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/UsageBar/UsageBar.tsx","screens/Console/Tenants/ListTenants/TenantCapacity.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Common/UsageBarWrapper/SummaryUsageBar.tsx","screens/Console/Tenants/TenantDetails/EditDomains.tsx","screens/Console/Tenants/TenantDetails/TenantSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ModalBox, Snackbar } from \"mds\";\nimport { CSSObject } from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\nimport MainError from \"../MainError/MainError\";\n\ninterface IModalProps {\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n titleIcon?: React.ReactNode;\n iconColor?: \"default\" | \"delete\" | \"accept\";\n sx?: CSSObject;\n}\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n wideLimit = true,\n titleIcon = null,\n iconColor = \"default\",\n sx,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n \n \n {children}\n \n );\n};\n\nexport default ModalWrapper;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\nexport interface ISizeBarItem {\n value: number;\n itemName: string;\n color: string;\n}\n\nexport interface IUsageBar {\n totalValue: number;\n sizeItems: ISizeBarItem[];\n bgColor?: string;\n}\n\nconst UsageBar = ({\n totalValue,\n sizeItems,\n bgColor = \"#ededed\",\n}: IUsageBar) => {\n return (\n \n {sizeItems.map((sizeElement, index) => {\n const itemPercentage = (sizeElement.value * 100) / totalValue;\n return (\n \n );\n })}\n \n );\n};\n\nexport default UsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { CircleIcon } from \"mds\";\nimport { Cell, Pie, PieChart } from \"recharts\";\nimport { CapacityValue, CapacityValues } from \"./types\";\nimport { niceBytesInt } from \"../../../../common/utils\";\nimport UsageBar, { ISizeBarItem } from \"../../Common/UsageBar/UsageBar\";\nimport { useTheme } from \"styled-components\";\nimport get from \"lodash/get\";\n\ninterface ITenantCapacity {\n totalCapacity: number;\n usedSpaceVariants: CapacityValues[];\n statusClass: string;\n render?: \"pie\" | \"bar\";\n}\n\nconst TenantCapacity = ({\n totalCapacity,\n usedSpaceVariants,\n statusClass,\n render = \"pie\",\n}: ITenantCapacity) => {\n const colors = [\n \"#8dacd3\",\n \"#bca1ea\",\n \"#92e8d2\",\n \"#efc9ac\",\n \"#97f274\",\n \"#f7d291\",\n \"#71ACCB\",\n \"#f28282\",\n \"#e28cc1\",\n \"#2781B0\",\n ];\n\n const theme = useTheme();\n\n const BGColor = `${get(theme, \"borderColor\", \"#ededed\")}70`;\n\n const totalUsedSpace = usedSpaceVariants.reduce((acc, currValue) => {\n return acc + currValue.value;\n }, 0);\n\n const emptySpace = totalCapacity - totalUsedSpace;\n\n let tiersList: CapacityValue[] = [];\n\n const standardTier = usedSpaceVariants.find(\n (tier) => tier.variant === \"STANDARD\",\n ) || {\n value: 0,\n variant: \"empty\",\n };\n\n if (usedSpaceVariants.length > 10) {\n const totalUsedByTiers = totalUsedSpace - standardTier.value;\n\n tiersList = [\n { value: totalUsedByTiers, color: \"#2781B0\", label: \"Total Tiers Space\" },\n ];\n } else {\n tiersList = usedSpaceVariants\n .filter((variant) => variant.variant !== \"STANDARD\")\n .map((variant, index) => {\n return {\n value: variant.value,\n color: colors[index],\n label: `Tier - ${variant.variant}`,\n };\n });\n }\n\n let standardTierColor = get(theme, \"signalColors.main\", \"#07193E\");\n\n const usedPercentage = (standardTier.value * 100) / totalCapacity;\n\n if (usedPercentage >= 90) {\n standardTierColor = get(theme, \"signalColors.danger\", \"#C83B51\");\n } else if (usedPercentage >= 75) {\n standardTierColor = get(theme, \"signalColors.warning\", \"#FFAB0F\");\n }\n\n const plotValues: CapacityValue[] = [\n {\n value: standardTier.value,\n color: standardTierColor,\n label: \"Used Space by Tenant\",\n },\n ...tiersList,\n {\n value: emptySpace,\n color: render === \"bar\" ? BGColor : \"transparent\",\n label: \"Empty Space\",\n },\n ];\n\n if (render === \"bar\") {\n const plotValuesForUsageBar: ISizeBarItem[] = plotValues.map((plotVal) => {\n return {\n value: plotVal.value,\n color: plotVal.color,\n itemName: plotVal.label,\n };\n });\n\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n \n {!isNaN(totalUsedSpace) ? niceBytesInt(totalUsedSpace) : \"N/A\"}\n \n
\n \n \n \n {plotValues.map((entry, index) => (\n \n ))}\n \n \n
\n \n );\n};\n\nexport default TenantCapacity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { Box, Button, FormLayout, InputBox, Switch } from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IUpdateTenantModal {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n}\n\nconst UpdateTenantModal = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n}: IUpdateTenantModal) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [minioImage, setMinioImage] = useState(\"\");\n const [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] =\n useState(\"\");\n const [imageRegistryUsername, setImageRegistryUsername] =\n useState(\"\");\n const [imageRegistryPassword, setImageRegistryPassword] =\n useState(\"\");\n const [validMinioImage, setValidMinioImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [minioImage],\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\n setImageRegistry(false);\n setImageRegistryEndpoint(\"\");\n setImageRegistryUsername(\"\");\n setImageRegistryPassword(\"\");\n };\n\n const updateMinIOImage = () => {\n setIsSending(true);\n\n let payload = {\n image: minioImage,\n };\n\n if (imageRegistry) {\n const registry: any = {\n image_registry: {\n registry: imageRegistryEndpoint,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n payload = {\n ...payload,\n ...registry,\n };\n }\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Image updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSending(false);\n });\n };\n\n return (\n \n \n \n \n Please enter the MinIO image from dockerhub to use. If blank, then\n latest build will be used.\n \n
\n {\n setMinioImage(e.target.value);\n }}\n />\n ) => {\n setImageRegistry(!imageRegistry);\n }}\n label={\"Set Custom Image Registry\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n {imageRegistry && (\n \n {\n setImageRegistryEndpoint(e.target.value);\n }}\n />\n {\n setImageRegistryUsername(e.target.value);\n }}\n />\n {\n setImageRegistryPassword(e.target.value);\n }}\n />\n \n )}\n \n \n \n \n \n
\n \n );\n};\n\nexport default UpdateTenantModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport {\n CircleIcon,\n Loader,\n ValuePair,\n Grid,\n Box,\n breakPoints,\n InformativeMessage,\n} from \"mds\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport { CapacityValues, ValueUnit } from \"../../Tenants/ListTenants/types\";\nimport { niceBytes, niceBytesInt } from \"../../../../common/utils\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport TenantCapacity from \"../../Tenants/ListTenants/TenantCapacity\";\n\ninterface ISummaryUsageBar {\n tenant: Tenant;\n label: string;\n error: string;\n loading: boolean;\n labels?: boolean;\n healthStatus?: string;\n}\n\nconst TenantCapacityMain = styled.div(({ theme }) => ({\n width: \"100%\",\n \"& .tenantStatus\": {\n marginTop: 2,\n color: get(theme, \"signalColors.disabled\", \"#E6EBEB\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n \"&.red\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n },\n \"&.yellow\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n },\n \"&.green\": {\n color: get(theme, \"signalColors.good\", \"#4CCB92\"),\n },\n },\n}));\n\nconst SummaryUsageBar = ({\n tenant,\n healthStatus,\n loading,\n error,\n}: ISummaryUsageBar) => {\n let raw: ValueUnit = { value: \"n/a\", unit: \"\" };\n let capacity: ValueUnit = { value: \"n/a\", unit: \"\" };\n let used: ValueUnit = { value: \"n/a\", unit: \"\" };\n let localUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n let tieredUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n\n if (tenant.status?.usage?.raw) {\n const b = niceBytes(`${tenant.status.usage.raw}`, true);\n const parts = b.split(\" \");\n raw.value = parts[0];\n raw.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity) {\n const b = niceBytes(`${tenant.status.usage.capacity}`, true);\n const parts = b.split(\" \");\n capacity.value = parts[0];\n capacity.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity_usage) {\n const b = niceBytesInt(tenant.status.usage.capacity_usage, true);\n const parts = b.split(\" \");\n used.value = parts[0];\n used.unit = parts[1];\n }\n\n let spaceVariants: CapacityValues[] = [];\n if (!tenant.tiers || tenant.tiers.length === 0) {\n spaceVariants = [\n { value: tenant.status?.usage?.capacity_usage || 0, variant: \"STANDARD\" },\n ];\n } else {\n spaceVariants = tenant.tiers.map((itemTenant) => {\n return { value: itemTenant.size!, variant: itemTenant.name! };\n });\n let internalUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type === \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n let tieredUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type !== \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n\n const t = niceBytesInt(tieredUsage, true);\n const parts = t.split(\" \");\n tieredUse.value = parts[0];\n tieredUse.unit = parts[1];\n\n const is = niceBytesInt(internalUsage, true);\n const partsInternal = is.split(\" \");\n localUse.value = partsInternal[0];\n localUse.unit = partsInternal[1];\n }\n\n const renderComponent = () => {\n if (!loading) {\n return error !== \"\" ? (\n \n ) : (\n \n \n \n {(!tenant.tiers || tenant.tiers.length === 0) && (\n \n \n \n )}\n {tenant.tiers && tenant.tiers.length > 0 && (\n \n \n \n \n )}\n {healthStatus && (\n \n \n \n }\n />\n )}\n \n \n );\n }\n\n return null;\n };\n\n return (\n \n {loading && (\n
\n \n \n \n
\n )}\n {renderComponent()}\n
\n );\n};\n\nexport default SummaryUsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n AddIcon,\n Box,\n Button,\n FormLayout,\n IconButton,\n InputBox,\n RemoveIcon,\n} from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n ErrorResponseHandler,\n IDomainsRequest,\n} from \"../../../../common/types\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IEditDomains {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n domains: IDomainsRequest | null;\n}\n\nconst EditDomains = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n domains,\n}: IEditDomains) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [consoleDomain, setConsoleDomain] = useState(\"\");\n const [minioDomains, setMinioDomains] = useState([\"\"]);\n const [consoleDomainValid, setConsoleDomainValid] = useState(true);\n const [minioDomainValid, setMinioDomainValid] = useState([true]);\n\n useEffect(() => {\n if (domains) {\n const consoleDomainSet = domains.console || \"\";\n setConsoleDomain(consoleDomainSet);\n\n if (consoleDomainSet !== \"\") {\n // We Validate console domain\n const consoleRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n );\n\n setConsoleDomainValid(consoleRegExp.test(consoleDomainSet));\n } else {\n setConsoleDomainValid(true);\n }\n\n if (domains.minio && domains.minio.length > 0) {\n setMinioDomains(domains.minio);\n\n const minioRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n );\n\n const initialValidations = domains.minio.map((domain) => {\n if (domain.trim() !== \"\") {\n return minioRegExp.test(domain);\n } else {\n return true;\n }\n });\n\n setMinioDomainValid(initialValidations);\n }\n }\n }, [domains]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setConsoleDomain(\"\");\n setConsoleDomainValid(true);\n setMinioDomains([\"\"]);\n setMinioDomainValid([true]);\n };\n\n const updateDomainsList = () => {\n setIsSending(true);\n\n let payload = {\n domains: {\n console: consoleDomain,\n minio: minioDomains.filter((minioDomain) => minioDomain.trim() !== \"\"),\n },\n };\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}/domains`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Domains updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setIsSending(false);\n dispatch(setModalErrorSnackMessage(error));\n });\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const cloneDomains = [...minioDomains];\n cloneDomains[index] = value;\n\n setMinioDomains(cloneDomains);\n };\n\n const addNewMinIODomain = () => {\n const cloneDomains = [...minioDomains];\n const cloneValidations = [...minioDomainValid];\n\n cloneDomains.push(\"\");\n cloneValidations.push(true);\n\n setMinioDomains(cloneDomains);\n setMinioDomainValid(cloneValidations);\n };\n\n const removeMinIODomain = (removeIndex: number) => {\n const filteredDomains = minioDomains.filter(\n (_, index) => index !== removeIndex,\n );\n\n const filterValidations = minioDomainValid.filter(\n (_, index) => index !== removeIndex,\n );\n\n setMinioDomains(filteredDomains);\n setMinioDomainValid(filterValidations);\n };\n\n const setMinioDomainValidation = (domainValid: boolean, index: number) => {\n const cloneValidation = [...minioDomainValid];\n cloneValidation[index] = domainValid;\n\n setMinioDomainValid(cloneValidation);\n };\n return (\n \n \n \n ) => {\n setConsoleDomain(e.target.value);\n\n setConsoleDomainValid(e.target.validity.valid);\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\"Eg. http://subdomain.domain:port/subpath1/subpath2\"}\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?(\\\\/[a-zA-Z0-9\\\\-.\\\\/]*)?$\"\n }\n error={\n !consoleDomainValid\n ? \"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)\"\n : \"\"\n }\n />\n

MinIO Domains

\n
\n {minioDomains.map((domain, index) => {\n return (\n \n ) => {\n updateMinIODomain(e.target.value, index);\n setMinioDomainValidation(e.target.validity.valid, index);\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n pattern={\"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?$\"}\n error={\n !minioDomainValid[index]\n ? \"MinIO domain format is incorrect (http|https://subdomain.domain)\"\n : \"\"\n }\n />\n \n \n \n \n removeMinIODomain(index)}\n disabled={minioDomains.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n
\n \n \n !domain).length > 0\n }\n onClick={updateDomainsList}\n label={\"Save\"}\n />\n \n
\n \n );\n};\n\nexport default EditDomains;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n ActionLink,\n Box,\n Button,\n DisableIcon,\n EditIcon,\n Grid,\n SectionTitle,\n TierOnlineIcon,\n ValuePair,\n} from \"mds\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { useParams } from \"react-router-dom\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport SummaryUsageBar from \"../../Common/UsageBarWrapper/SummaryUsageBar\";\nimport EditDomains from \"./EditDomains\";\n\nconst SummaryMain = styled.div(({ theme }) => ({\n \"& .linkedSection\": {\n color: get(theme, \"linkColor\", \"#2781B0\"),\n fontFamily: \"'Inter', sans-serif\",\n },\n \"& .autoGeneratedLink\": {\n fontStyle: \"italic\",\n },\n}));\n\nconst StorageSummary = ({ tenant }: { tenant: Tenant | null }) => {\n if (!tenant) {\n return null;\n }\n\n return (\n \n );\n};\n\nconst getToggle = (toggleValue: boolean, idPrefix = \"\") => {\n if (toggleValue) {\n return ;\n }\n return ;\n};\n\nconst featureRowStyle = {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"10px\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n};\n\nconst TenantSummary = () => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const encryptionEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"encryptionEnabled\", false),\n );\n const minioTLS = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"minioTLS\", false),\n );\n const adEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpAdEnabled\", false),\n );\n const oidcEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpOidcEnabled\", false),\n );\n\n const [poolCount, setPoolCount] = useState(0);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n const [editDomainsOpen, setEditDomainsOpen] = useState(false);\n\n useEffect(() => {\n if (tenant) {\n setPoolCount(tenant?.pools?.length || 0);\n setVolumes(\n tenant.pools?.reduce(\n (sum, p) => sum + p.volumes_per_server * p.servers,\n 0,\n ) || 0,\n );\n setInstances(tenant.pools?.reduce((sum, p) => sum + p.servers, 0) || 0);\n }\n }, [tenant]);\n\n const closeEditDomainsModal = (refresh: boolean) => {\n setEditDomainsOpen(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n };\n\n return (\n \n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n }}\n idTenant={tenantName || \"\"}\n namespace={tenantNamespace || \"\"}\n />\n )}\n\n {editDomainsOpen && (\n \n )}\n\n Details\n \n \n \n \n \n \n \n \n {\n setUpdateMinioVersion(true);\n }}\n >\n {tenant ? tenant.image : \"\"}\n \n }\n />\n \n \n

\n Domains\n }\n onClick={() => {\n setEditDomainsOpen(true);\n }}\n />\n

\n
\n \n \n {(!tenant?.domains?.console ||\n tenant?.domains?.console === \"\") &&\n !tenant?.endpoints?.console\n ? \"-\"\n : \"\"}\n\n {tenant?.endpoints?.console && (\n \n \n {tenant?.endpoints?.console || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.console &&\n tenant?.domains?.console !== \"\" && (\n \n {tenant?.domains?.console || \"\"}\n \n )}\n
\n }\n />\n \n \n \n {!tenant?.domains?.minio && !tenant?.endpoints?.minio\n ? \"-\"\n : \"\"}\n {tenant?.endpoints?.minio && (\n \n \n {tenant?.endpoints?.minio || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.minio &&\n tenant.domains.minio.map((domain) => {\n return (\n \n \n {domain}\n \n
\n
\n );\n })}\n \n }\n />\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n Features\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TenantSummary;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","_ref","onClose","modalOpen","title","children","wideLimit","titleIcon","iconColor","sx","dispatch","useAppDispatch","openSnackbar","setOpenSnackbar","useState","modalSnackMessage","useSelector","state","system","modalSnackBar","useEffect","setModalSnackMessage","message","type","detailedErrorMsg","length","_jsxs","ModalBox","open","widthLimit","_jsx","MainError","isModal","Snackbar","closeSnackBar","mode","variant","autoHideDuration","condensed","totalValue","sizeItems","bgColor","style","width","height","backgroundColor","borderRadius","transitionDuration","overflow","map","sizeElement","index","itemPercentage","value","concat","toString","totalCapacity","usedSpaceVariants","statusClass","render","colors","theme","useTheme","BGColor","get","totalUsedSpace","reduce","acc","currValue","emptySpace","tiersList","standardTier","find","tier","filter","standardTierColor","usedPercentage","plotValues","plotValuesForUsageBar","plotVal","itemName","UsageBar","position","right","top","zIndex","className","CircleIcon","border","left","transform","fontWeight","isNaN","niceBytesInt","PieChart","Pie","data","cx","cy","dataKey","outerRadius","innerRadius","fill","isAnimationActive","stroke","entry","Cell","closeModalAndRefresh","namespace","idTenant","isSending","setIsSending","minioImage","setMinioImage","imageRegistry","setImageRegistry","imageRegistryEndpoint","setImageRegistryEndpoint","imageRegistryUsername","setImageRegistryUsername","imageRegistryPassword","setImageRegistryPassword","validMinioImage","setValidMinioImage","validateImage","useCallback","fieldToCheck","pattern","RegExp","test","ModalWrapper","closeAction","FormLayout","withBorders","containerPadding","Box","InputBox","id","name","placeholder","onChange","e","target","Switch","checked","indicatorLabels","Fragment","Button","onClick","resetForm","disabled","trim","updateMinIOImage","payload","image","registry","image_registry","username","password","api","invoke","then","setSnackBarMessage","catch","error","setModalErrorSnackMessage","TenantCapacityMain","styled","div","_ref2","_tenant$status","_tenant$status$usage","_tenant$status2","_tenant$status2$usage","_tenant$status3","_tenant$status3$usage","tenant","healthStatus","loading","raw","unit","capacity","used","localUse","tieredUse","status","usage","parts","niceBytes","split","capacity_usage","spaceVariants","tiers","itemTenant","size","internalUsage","sum","tieredUsage","partsInternal","_tenant$status4","_tenant$status4$usage","React","padding","Grid","item","xs","textAlign","Loader","renderComponent","_tenant$status5","_tenant$status5$usage","InformativeMessage","TenantCapacity","margin","flexDirection","gap","breakPoints","sm","md","ValuePair","direction","domains","consoleDomain","setConsoleDomain","minioDomains","setMinioDomains","consoleDomainValid","setConsoleDomainValid","minioDomainValid","setMinioDomainValid","consoleDomainSet","console","consoleRegExp","minio","minioRegExp","initialValidations","domain","addNewMinIODomain","cloneDomains","cloneValidations","push","validity","valid","updateMinIODomain","setMinioDomainValidation","domainValid","cloneValidation","IconButton","AddIcon","removeIndex","filteredDomains","_","filterValidations","removeMinIODomain","RemoveIcon","updateDomainsList","minioDomain","SummaryMain","fontFamily","fontStyle","StorageSummary","SummaryUsageBar","health_status","getToggle","toggleValue","TierOnlineIcon","DisableIcon","featureRowStyle","flexFlow","TenantSummary","_tenant$domains","_tenant$domains2","_tenant$endpoints","_tenant$endpoints2","_tenant$endpoints3","_tenant$endpoints4","_tenant$domains3","_tenant$domains4","_tenant$domains5","_tenant$domains6","_tenant$endpoints5","_tenant$endpoints6","_tenant$domains7","_tenant$endpoints7","_tenant$endpoints8","_tenant$endpoints9","_tenant$endpoints10","_tenant$domains8","_tenant$status6","_tenant$status7","tenantName","tenantNamespace","useParams","tenants","tenantInfo","encryptionEnabled","minioTLS","adEnabled","oidcEnabled","poolCount","setPoolCount","instances","setInstances","volumes","setVolumes","updateMinioVersion","setUpdateMinioVersion","editDomainsOpen","setEditDomainsOpen","_tenant$pools","_tenant$pools2","_tenant$pools3","pools","p","volumes_per_server","servers","UpdateTenantModal","refresh","getTenantAsync","EditDomains","SectionTitle","separator","container","currentState","ActionLink","textOverflow","wordBreak","icon","EditIcon","endpoints","href","rel","write_quorum","drives_online","drives_offline"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/367.2251aaba.chunk.js b/web-app/build/static/js/367.2251aaba.chunk.js deleted file mode 100644 index 2c412ef884a..00000000000 --- a/web-app/build/static/js/367.2251aaba.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[367],{92217:function(e,n,i){var l=i(1413),t=i(72791),o=i(61889),r=i(30829),a=i(96040),s=i(64554),d=i(11135),c=i(25787),u=i(75952),v=i(23814),m=i(78029),p=i.n(m),x=i(9534),g=i(27454),Z=i(80184);n.Z=(0,c.Z)((function(e){return(0,d.Z)((0,l.Z)({},v.YI))}))((function(e){var n=e.value,i=e.label,l=void 0===i?"":i,d=e.tooltip,c=void 0===d?"":d,v=e.mode,m=void 0===v?"json":v,h=e.classes,f=e.onBeforeChange,y=(e.readOnly,e.editorHeight),_=void 0===y?"250px":y;return(0,Z.jsxs)(t.Fragment,{children:[(0,Z.jsx)(o.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,Z.jsxs)(r.Z,{className:h.inputLabel,children:[(0,Z.jsx)("span",{children:l}),""!==c&&(0,Z.jsx)("div",{className:h.tooltipContainer,children:(0,Z.jsx)(a.Z,{title:c,placement:"top-start",children:(0,Z.jsx)("div",{className:h.tooltip,children:(0,Z.jsx)(u.byK,{})})})})]})}),(0,Z.jsx)(o.ZP,{item:!0,xs:12,style:{maxHeight:_,overflow:"auto",border:"1px solid #eaeaea"},children:(0,Z.jsx)(x.Z,{value:n,language:m,onChange:function(e){f(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:_||"initial",color:"#000000"}})}),(0,Z.jsx)(o.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,Z.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,Z.jsx)(g.Z,{tooltip:"Copy to Clipboard",children:(0,Z.jsx)(p(),{text:n,children:(0,Z.jsx)(u.zxk,{type:"button",id:"copy-code-mirror",icon:(0,Z.jsx)(u.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},54639:function(e,n,i){i.d(n,{Z:function(){return y}});var l=i(29439),t=i(1413),o=i(72791),r=i(26181),a=i.n(r),s=i(61889),d=i(30829),c=i(96040),u=i(13400),v=i(99663),m=i(86711),p=i(11135),x=i(25787),g=i(23814),Z=i(75952),h=i(22512),f=i(80184),y=(0,x.Z)((function(e){return(0,p.Z)((0,t.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},g.YI),g.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},g.bV),{},{inputLabel:(0,t.Z)((0,t.Z)({},g.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,t.Z)((0,t.Z)({},g.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var n=e.label,i=e.classes,t=e.onChange,r=e.id,p=e.name,x=e.disabled,g=void 0!==x&&x,y=e.tooltip,_=void 0===y?"":y,j=e.required,k=e.error,b=void 0===k?"":k,C=e.accept,S=void 0===C?"":C,w=e.value,K=void 0===w?"":w,P=(0,o.useState)(!1),N=(0,l.Z)(P,2),I=N[0],A=N[1];return(0,f.jsx)(o.Fragment,{children:(0,f.jsxs)(s.ZP,{item:!0,xs:12,className:"".concat(i.fileInputField," ").concat(i.fieldBottom," ").concat(i.fieldContainer," ").concat(""!==b?i.errorInField:""),children:[""!==n&&(0,f.jsxs)(d.Z,{htmlFor:r,className:"".concat(""!==b?i.fieldLabelError:""," ").concat(i.inputLabel),children:[(0,f.jsxs)("span",{children:[n,j?"*":""]}),""!==_&&(0,f.jsx)("div",{className:i.tooltipContainer,children:(0,f.jsx)(c.Z,{title:_,placement:"top-start",children:(0,f.jsx)("div",{className:i.tooltip,children:(0,f.jsx)(Z.byK,{})})})})]}),I||""===K?(0,f.jsxs)("div",{className:i.textBoxContainer,children:[(0,f.jsx)("input",{type:"file",name:p,onChange:function(e){var n=a()(e,"target.files[0].name","");!function(e,n){var i=e.target.files[0],l=new FileReader;l.readAsDataURL(i),l.onload=function(){var e=l.result;if(e){var i=e.toString().split("base64,");2===i.length&&n(i[1])}}}(e,(function(e){t(e,n)}))},accept:S,required:j,disabled:g,className:i.fileInputField}),""!==K&&(0,f.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){A(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,f.jsx)(m.Z,{})}),""!==b&&(0,f.jsx)(h.Z,{errorMessage:b})]}):(0,f.jsxs)("div",{className:i.fileReselect,children:[(0,f.jsx)("div",{className:i.valueString,children:K}),(0,f.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){A(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,f.jsx)(v.Z,{})})]})]})})}))},13871:function(e,n,i){var l,t=i(30168),o=(0,i(26088).Z)("hr")(l||(l=(0,t.Z)(["\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n"])));n.Z=o},80666:function(e,n,i){i(72791);var l=i(99779),t=i(11135),o=i(25787),r=i(90983),a=i(81918),s=i(89164),d=i(61889),c=i(20890),u=i(64554),v=i(94721),m=i(90493),p=i(84852),x=i(20653),g=i(49900),Z=i(52502),h=i(69212),f=i(75952),y=i(80184);n.Z=(0,o.Z)((function(e){return(0,t.Z)({certificateIcon:{float:"left",paddingTop:"5px !important",paddingRight:"10px !important"},certificateInfo:{float:"right"},certificateWrapper:{height:"auto",margin:5,border:"1px solid #E2E2E2",userSelect:"text",borderRadius:4,"& h6":{fontWeight:"bold"},"& div":{padding:0}},certificateExpiry:{color:"#616161",display:"flex",alignItems:"center",flexWrap:"wrap",marginBottom:5,"& .label":{fontWeight:"bold"}},certificateDomains:{color:"#616161","& .label":{fontWeight:"bold"}},certificatesList:{border:"1px solid #E2E2E2",borderRadius:4,color:"#616161",textTransform:"lowercase",overflowY:"scroll",maxHeight:145,marginBottom:10},certificatesListItem:{padding:"0px 16px",borderBottom:"1px solid #E2E2E2","& div":{minWidth:0},"& svg":{fontSize:12,marginRight:10,opacity:.5},"& span":{fontSize:12}},certificateExpiring:{color:"orange","& .label":{fontWeight:"bold"}},certificateExpired:{color:"red","& .label":{fontWeight:"bold"}}})}))((function(e){var n=e.classes,i=e.certificateInfo,t=e.onDelete,o=void 0===t?function(){}:t,_=i.domains||[],j=l.ou.fromISO(i.expiry),k=l.ou.utc(),b=0,C="",S="";if(j){var w=j.diff(k);b=w.as("days"),C=w.minus(l.nL.fromObject({days:1})).shiftTo("days").toHuman({listStyle:"long",maximumFractionDigits:0}),b>=10&&b<30&&(S=n.certificateExpiring),b<10&&(S=n.certificateExpired,b<2&&(C=w.minus(l.nL.fromObject({minutes:1})).shiftTo("hours","minutes").toHuman({listStyle:"long",maximumFractionDigits:0}),w.as("minutes")<=1&&(C="EXPIRED")))}return(0,y.jsx)(a.Z,{variant:"outlined",color:"primary",className:n.certificateWrapper,label:(0,y.jsxs)(s.Z,{children:[(0,y.jsx)(d.ZP,{item:!0,xs:1,className:n.certificateIcon,children:(0,y.jsx)(f.Baz,{})}),(0,y.jsxs)(d.ZP,{item:!0,xs:11,className:n.certificateInfo,children:[(0,y.jsx)(c.Z,{variant:"subtitle1",display:"block",gutterBottom:!0,children:i.name}),(0,y.jsxs)(u.Z,{className:n.certificateExpiry,children:[(0,y.jsx)(Z.Z,{color:"inherit",fontSize:"small"}),"\xa0",(0,y.jsx)("span",{className:"label",children:"Expiry:\xa0"}),(0,y.jsx)("span",{children:j.toFormat("yyyy/MM/dd")})]}),(0,y.jsxs)(u.Z,{className:n.certificateExpiry,children:[(0,y.jsx)(h.Z,{color:"inherit",fontSize:"small"}),"\xa0",(0,y.jsx)("span",{className:"label",children:"Expires in:\xa0"}),(0,y.jsx)("span",{className:S,children:C})]}),(0,y.jsx)(v.Z,{}),(0,y.jsx)("br",{}),(0,y.jsx)(u.Z,{className:n.certificateDomains,children:(0,y.jsx)("span",{className:"label",children:"".concat(_.length," Domain (s):")})}),(0,y.jsx)(m.Z,{className:n.certificatesList,children:_.map((function(e,i){return(0,y.jsxs)(p.ZP,{className:n.certificatesListItem,children:[(0,y.jsx)(x.Z,{children:(0,y.jsx)(r.Z,{})}),(0,y.jsx)(g.Z,{primary:e})]},"".concat(e,"-").concat(i))}))})]})]}),onDelete:o},i.name)}))},7032:function(e,n,i){i.r(n),i.d(n,{default:function(){return F}});var l=i(93433),t=i(29439),o=i(1413),r=i(75952),a=i(11135),s=i(25787),d=i(23814),c=i(72791),u=i(78687),v=i(41320),m=i(81207),p=i(37516),x=i(61889),g=i(54639),Z=i(21435),h=i(83679),f=i(51691),y=i(20165),_=i(3579),j=i(84741),k=i(40968),b=i(40306),C=i(80666),S=i(87995),w=i(25228),K=i(43896),P=i(92217),N=i(13871),I=i(80184),A=function(e){var n=e.items,i=void 0===n?[]:n,l=e.title,t=void 0===l?"":l;return null!==i&&void 0!==i&&i.length?(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)("div",{style:{fontSize:"0.83em",fontWeight:"bold"},children:t}),(0,I.jsx)("div",{style:{display:"flex",gap:"2px",flexFlow:"column",marginLeft:"8px"},children:i.map((function(e){return(0,I.jsxs)("span",{style:{fontSize:"12px"},children:["- ",e]})}))})]}):null},R=function(e){var n=e.policies,i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).map((function(n){var i=e[n]||{};return{name:n||"",identities:i.identities||[],paths:i.paths||[],allow:i.allow||[],deny:i.deny||[]}}))}(void 0===n?{}:n);return i.length?(0,I.jsxs)(x.ZP,{xs:12,marginBottom:"5px",children:[(0,I.jsx)("h4",{children:"Policies"}),(0,I.jsx)(r.xuv,{withBorders:!0,sx:{maxHeight:"200px",overflow:"auto",padding:0},children:i.map((function(e){return(0,I.jsxs)(r.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",gap:"2px",borderLeft:0,borderRight:0,borderTop:0},children:[(0,I.jsxs)("div",{children:[(0,I.jsx)("b",{style:{fontSize:"0.83em",fontWeight:"bold"},children:"Policy Name:"})," ",e.name]}),(0,I.jsx)(A,{title:"Allow",items:null===e||void 0===e?void 0:e.allow}),(0,I.jsx)(A,{title:"Deny",items:null===e||void 0===e?void 0:e.deny}),(0,I.jsx)(A,{title:"Paths",items:null===e||void 0===e?void 0:e.paths}),(0,I.jsx)(A,{title:"Identities",items:null===e||void 0===e?void 0:e.identities})]})}))})]}):null},F=(0,s.Z)((function(e){return(0,a.Z)((0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},d.oZ),d.bK),d.Bz),d.QV),d.DF),d.oO),d.AK),{},{warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}}}))}))((function(e){var n,i,a,s,d,A,F,E,z,G,q,D,T,M,V,B,W,L,H,O,U,Y,Q,X,J,$,ee,ne,ie,le,te,oe,re=e.classes,ae=(0,v.TL)(),se=(0,u.v9)((function(e){return e.tenants.tenantInfo})),de=(0,c.useState)(0),ce=(0,t.Z)(de,2),ue=ce[0],ve=ce[1],me=(0,c.useState)(""),pe=(0,t.Z)(me,2),xe=pe[0],ge=pe[1],Ze=(0,c.useState)(!1),he=(0,t.Z)(Ze,2),fe=he[0],ye=he[1],_e=(0,c.useState)("vault"),je=(0,t.Z)(_e,2),ke=je[0],be=je[1],Ce=(0,c.useState)("1"),Se=(0,t.Z)(Ce,2),we=Se[0],Ke=Se[1],Pe=(0,c.useState)(""),Ne=(0,t.Z)(Pe,2),Ie=Ne[0],Ae=Ne[1],Re=(0,c.useState)(!1),Fe=(0,t.Z)(Re,2),Ee=Fe[0],ze=Fe[1],Ge=(0,c.useState)({fsGroup:"1000",fsGroupChangePolicy:"Always",runAsGroup:"1000",runAsNonRoot:!0,runAsUser:"1000"}),qe=(0,t.Z)(Ge,2),De=qe[0],Te=qe[1],Me=(0,c.useState)([]),Ve=(0,t.Z)(Me,2),Be=Ve[0],We=Ve[1],Le=(0,c.useState)(null),He=(0,t.Z)(Le,2),Oe=He[0],Ue=He[1],Ye=(0,c.useState)(null),Qe=(0,t.Z)(Ye,2),Xe=Qe[0],Je=Qe[1],$e=(0,c.useState)(null),en=(0,t.Z)($e,2),nn=en[0],ln=en[1],tn=(0,c.useState)(null),on=(0,t.Z)(tn,2),rn=on[0],an=on[1],sn=(0,c.useState)(null),dn=(0,t.Z)(sn,2),cn=dn[0],un=dn[1],vn=(0,c.useState)(!1),mn=(0,t.Z)(vn,2),pn=mn[0],xn=mn[1],gn=(0,c.useState)(!1),Zn=(0,t.Z)(gn,2),hn=Zn[0],fn=Zn[1],yn=(0,c.useState)(null),_n=(0,t.Z)(yn,2),jn=_n[0],kn=_n[1],bn=(0,c.useState)(null),Cn=(0,t.Z)(bn,2),Sn=Cn[0],wn=Cn[1],Kn=(0,c.useState)(null),Pn=(0,t.Z)(Kn,2),Nn=Pn[0],In=Pn[1],An=(0,c.useState)([]),Rn=(0,t.Z)(An,2),Fn=Rn[0],En=Rn[1],zn=(0,c.useState)(!1),Gn=(0,t.Z)(zn,2),qn=Gn[0],Dn=Gn[1],Tn=(0,c.useState)(!1),Mn=(0,t.Z)(Tn,2),Vn=Mn[0],Bn=Mn[1],Wn=(0,c.useState)(!1),Ln=(0,t.Z)(Wn,2),Hn=Ln[0],On=Ln[1],Un=(0,c.useState)(null),Yn=(0,t.Z)(Un,2),Qn=Yn[0],Xn=Yn[1],Jn=(0,c.useState)(null),$n=(0,t.Z)(Jn,2),ei=$n[0],ni=$n[1],ii=(0,c.useState)(null),li=(0,t.Z)(ii,2),ti=li[0],oi=li[1],ri=(0,c.useState)(null),ai=(0,t.Z)(ri,2),si=ai[0],di=ai[1],ci=(0,c.useState)(null),ui=(0,t.Z)(ci,2),vi=ui[0],mi=ui[1],pi=(0,c.useState)({}),xi=(0,t.Z)(pi,2),gi=xi[0],Zi=xi[1],hi=function(e){Zi((0,j.h)(gi,e))},fi=(0,c.useState)(!1),yi=(0,t.Z)(fi,2),_i=yi[0],ji=yi[1];(0,c.useEffect)((function(){var e=[];if(fe){var n,i,t,o,r,a,s,d,c,u,v,m,p,x,g,Z,h,f,y,_,j,b,C,S,w,K,P,N;if(e=[{fieldKey:"replicas",required:!0,value:we,customValidation:parseInt(we)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:De.runAsUser,customValidation:""===De.runAsUser||parseInt(De.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:De.runAsGroup,customValidation:""===De.runAsGroup||parseInt(De.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:De.fsGroup,customValidation:""===De.fsGroup||parseInt(De.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}],pn&&(e=[].concat((0,l.Z)(e),[{fieldKey:"serverKey",required:!1,value:(null===si||void 0===si?void 0:si.encoded_key)||""},{fieldKey:"serverCert",required:!1,value:(null===si||void 0===si?void 0:si.encoded_cert)||""},{fieldKey:"clientKey",required:!1,value:(null===Nn||void 0===Nn?void 0:Nn.encoded_key)||""},{fieldKey:"clientCert",required:!1,value:(null===Nn||void 0===Nn?void 0:Nn.encoded_cert)||""}])),"vault"===ke)e=[].concat((0,l.Z)(e),[{fieldKey:"vault_endpoint",required:!0,value:null===Oe||void 0===Oe?void 0:Oe.endpoint},{fieldKey:"vault_id",required:!0,value:null===Oe||void 0===Oe||null===(n=Oe.approle)||void 0===n?void 0:n.id},{fieldKey:"vault_secret",required:!0,value:null===Oe||void 0===Oe||null===(i=Oe.approle)||void 0===i?void 0:i.secret},{fieldKey:"vault_ping",required:!1,value:null===Oe||void 0===Oe||null===(t=Oe.status)||void 0===t?void 0:t.ping,customValidation:parseInt(null===Oe||void 0===Oe||null===(o=Oe.status)||void 0===o?void 0:o.ping)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:null===Oe||void 0===Oe||null===(r=Oe.approle)||void 0===r?void 0:r.retry,customValidation:parseInt(null===Oe||void 0===Oe||null===(a=Oe.approle)||void 0===a?void 0:a.retry)<0,customValidationMessage:"Value needs to be 0 or greater"}]);if("aws"===ke)e=[].concat((0,l.Z)(e),[{fieldKey:"aws_endpoint",required:!0,value:null===Xe||void 0===Xe||null===(s=Xe.secretsmanager)||void 0===s?void 0:s.endpoint},{fieldKey:"aws_region",required:!0,value:null===Xe||void 0===Xe||null===(d=Xe.secretsmanager)||void 0===d?void 0:d.region},{fieldKey:"aws_accessKey",required:!0,value:null===Xe||void 0===Xe||null===(c=Xe.secretsmanager)||void 0===c||null===(u=c.credentials)||void 0===u?void 0:u.accesskey},{fieldKey:"aws_secretKey",required:!0,value:null===Xe||void 0===Xe||null===(v=Xe.secretsmanager)||void 0===v||null===(m=v.credentials)||void 0===m?void 0:m.secretkey}]);if("gemalto"===ke)e=[].concat((0,l.Z)(e),[{fieldKey:"gemalto_endpoint",required:!0,value:null===nn||void 0===nn||null===(p=nn.keysecure)||void 0===p?void 0:p.endpoint},{fieldKey:"gemalto_token",required:!0,value:null===nn||void 0===nn||null===(x=nn.keysecure)||void 0===x||null===(g=x.credentials)||void 0===g?void 0:g.token},{fieldKey:"gemalto_domain",required:!0,value:null===nn||void 0===nn||null===(Z=nn.keysecure)||void 0===Z||null===(h=Z.credentials)||void 0===h?void 0:h.domain},{fieldKey:"gemalto_retry",required:!1,value:null===nn||void 0===nn||null===(f=nn.keysecure)||void 0===f||null===(y=f.credentials)||void 0===y?void 0:y.retry,customValidation:parseInt(null===nn||void 0===nn||null===(_=nn.keysecure)||void 0===_||null===(j=_.credentials)||void 0===j?void 0:j.retry)<0,customValidationMessage:"Value needs to be 0 or greater"}]);if("azure"===ke)e=[].concat((0,l.Z)(e),[{fieldKey:"azure_endpoint",required:!0,value:null===rn||void 0===rn||null===(b=rn.keyvault)||void 0===b?void 0:b.endpoint},{fieldKey:"azure_tenant_id",required:!0,value:null===rn||void 0===rn||null===(C=rn.keyvault)||void 0===C||null===(S=C.credentials)||void 0===S?void 0:S.tenant_id},{fieldKey:"azure_client_id",required:!0,value:null===rn||void 0===rn||null===(w=rn.keyvault)||void 0===w||null===(K=w.credentials)||void 0===K?void 0:K.client_id},{fieldKey:"azure_client_secret",required:!0,value:null===rn||void 0===rn||null===(P=rn.keyvault)||void 0===P||null===(N=P.credentials)||void 0===N?void 0:N.client_secret}])}var I=(0,k.R)(e);Bn(0===Object.keys(I).length),Zi(I)}),[pn,fe,ke,null===si||void 0===si?void 0:si.encoded_key,null===si||void 0===si?void 0:si.encoded_cert,null===Nn||void 0===Nn?void 0:Nn.encoded_key,null===Nn||void 0===Nn?void 0:Nn.encoded_cert,null===ti||void 0===ti?void 0:ti.encoded_key,null===ti||void 0===ti?void 0:ti.encoded_cert,null===vi||void 0===vi?void 0:vi.encoded_key,null===vi||void 0===vi?void 0:vi.encoded_cert,De,Oe,Xe,nn,rn,cn,we]);var ki=function(){!Ee&&null!==se&&void 0!==se&&se.namespace&&null!==se&&void 0!==se&&se.name&&(ze(!0),m.Z.invoke("GET","/api/v1/namespaces/".concat(null===se||void 0===se?void 0:se.namespace,"/tenants/").concat(null===se||void 0===se?void 0:se.name,"/encryption")).then((function(e){ge(e.raw),e.policies&&We(e.policies),e.vault?(be("vault"),Ue(e.vault)):e.aws?(be("aws"),Je(e.aws)):e.gemalto?(be("gemalto"),ln(e.gemalto)):e.gcp?(be("gcp"),un(e.gcp)):e.azure&&(be("azure"),an(e.azure)),ye(!0),Ae(e.image),Ke(e.replicas),e.securityContext&&Te(e.securityContext),(e.server_tls||e.minio_mtls||e.kms_mtls)&&xn(!0),e.server_tls&&kn(e.server_tls),e.minio_mtls&&wn(e.minio_mtls),e.kms_mtls&&(Xn(e.kms_mtls.crt),ni(e.kms_mtls.ca)),ze(!1)})).catch((function(e){console.error(e),ze(!1)})))};(0,c.useEffect)((function(){ki()}),[se]);var bi=function(e){En([].concat((0,l.Z)(Fn),[e.name])),e.name===(null===jn||void 0===jn?void 0:jn.name)&&kn(null),e.name===(null===Sn||void 0===Sn?void 0:Sn.name)&&wn(null),e.name===(null===Qn||void 0===Qn?void 0:Qn.name)&&Xn(null),e.name===(null===ei||void 0===ei?void 0:ei.name)&&ni(null)};return(0,I.jsxs)(c.Fragment,{children:[_i&&(0,I.jsx)(b.Z,{isOpen:_i,title:fe?"Enable encryption at rest for tenant?":"Disable encryption at rest for tenant?",confirmText:fe?"Enable":"Disable",cancelText:"Cancel",onClose:function(){return ji(!1)},onConfirm:function(){var e,n,i,l,t,r,a,s,d,c,u,v,p,x,g,Z,h,f,y,_,j,k,b,C,w,K,P,N,I,A,R,F,E,z,G,q,D,T;if(fe){var M={};switch(ke){case"gemalto":M={gemalto:{keysecure:{endpoint:(null===nn||void 0===nn||null===(e=nn.keysecure)||void 0===e?void 0:e.endpoint)||"",credentials:{token:(null===nn||void 0===nn||null===(n=nn.keysecure)||void 0===n||null===(i=n.credentials)||void 0===i?void 0:i.token)||"",domain:(null===nn||void 0===nn||null===(l=nn.keysecure)||void 0===l||null===(t=l.credentials)||void 0===t?void 0:t.domain)||"",retry:parseInt(null===nn||void 0===nn||null===(r=nn.keysecure)||void 0===r||null===(a=r.credentials)||void 0===a?void 0:a.retry)}}}};break;case"aws":M={aws:{secretsmanager:{endpoint:(null===Xe||void 0===Xe||null===(s=Xe.secretsmanager)||void 0===s?void 0:s.endpoint)||"",region:(null===Xe||void 0===Xe||null===(d=Xe.secretsmanager)||void 0===d?void 0:d.region)||"",kmskey:(null===Xe||void 0===Xe||null===(c=Xe.secretsmanager)||void 0===c?void 0:c.kmskey)||"",credentials:{accesskey:(null===Xe||void 0===Xe||null===(u=Xe.secretsmanager)||void 0===u||null===(v=u.credentials)||void 0===v?void 0:v.accesskey)||"",secretkey:(null===Xe||void 0===Xe||null===(p=Xe.secretsmanager)||void 0===p||null===(x=p.credentials)||void 0===x?void 0:x.secretkey)||"",token:(null===Xe||void 0===Xe||null===(g=Xe.secretsmanager)||void 0===g||null===(Z=g.credentials)||void 0===Z?void 0:Z.token)||""}}}};break;case"azure":M={azure:{keyvault:{endpoint:(null===rn||void 0===rn||null===(h=rn.keyvault)||void 0===h?void 0:h.endpoint)||"",credentials:{tenant_id:(null===rn||void 0===rn||null===(f=rn.keyvault)||void 0===f||null===(y=f.credentials)||void 0===y?void 0:y.tenant_id)||"",client_id:(null===rn||void 0===rn||null===(_=rn.keyvault)||void 0===_||null===(j=_.credentials)||void 0===j?void 0:j.client_id)||"",client_secret:(null===rn||void 0===rn||null===(k=rn.keyvault)||void 0===k||null===(b=k.credentials)||void 0===b?void 0:b.client_secret)||""}}}};break;case"gcp":M={gcp:{secretmanager:{project_id:(null===cn||void 0===cn||null===(C=cn.secretmanager)||void 0===C?void 0:C.project_id)||"",endpoint:(null===cn||void 0===cn||null===(w=cn.secretmanager)||void 0===w?void 0:w.endpoint)||"",credentials:{client_email:(null===cn||void 0===cn||null===(K=cn.secretmanager)||void 0===K||null===(P=K.credentials)||void 0===P?void 0:P.client_email)||"",client_id:(null===cn||void 0===cn||null===(N=cn.secretmanager)||void 0===N||null===(I=N.credentials)||void 0===I?void 0:I.client_id)||"",private_key_id:(null===cn||void 0===cn||null===(A=cn.secretmanager)||void 0===A||null===(R=A.credentials)||void 0===R?void 0:R.private_key_id)||"",private_key:(null===cn||void 0===cn||null===(F=cn.secretmanager)||void 0===F||null===(E=F.credentials)||void 0===E?void 0:E.private_key)||""}}}};break;case"vault":M={vault:{endpoint:(null===Oe||void 0===Oe?void 0:Oe.endpoint)||"",engine:(null===Oe||void 0===Oe?void 0:Oe.engine)||"",namespace:(null===Oe||void 0===Oe?void 0:Oe.namespace)||"",prefix:(null===Oe||void 0===Oe?void 0:Oe.prefix)||"",approle:{engine:(null===Oe||void 0===Oe||null===(z=Oe.approle)||void 0===z?void 0:z.engine)||"",id:(null===Oe||void 0===Oe||null===(G=Oe.approle)||void 0===G?void 0:G.id)||"",secret:(null===Oe||void 0===Oe||null===(q=Oe.approle)||void 0===q?void 0:q.secret)||"",retry:parseInt(null===Oe||void 0===Oe||null===(D=Oe.approle)||void 0===D?void 0:D.retry)},status:{ping:parseInt(null===Oe||void 0===Oe||null===(T=Oe.status)||void 0===T?void 0:T.ping)}}}}var V={},B={},W={};null!==Nn&&void 0!==Nn&&Nn.encoded_key&&null!==Nn&&void 0!==Nn&&Nn.encoded_cert&&(B={minio_mtls:{key:null===Nn||void 0===Nn?void 0:Nn.encoded_key,crt:null===Nn||void 0===Nn?void 0:Nn.encoded_cert}}),null!==si&&void 0!==si&&si.encoded_key&&null!==si&&void 0!==si&&si.encoded_cert&&(V={server_tls:{key:null===si||void 0===si?void 0:si.encoded_key,crt:null===si||void 0===si?void 0:si.encoded_cert}});var L=null,H=null;null!==ti&&void 0!==ti&&ti.encoded_key&&null!==ti&&void 0!==ti&&ti.encoded_cert&&(L={key:null===ti||void 0===ti?void 0:ti.encoded_key,crt:null===ti||void 0===ti?void 0:ti.encoded_cert}),null!==vi&&void 0!==vi&&vi.encoded_cert&&(H={ca:null===vi||void 0===vi?void 0:vi.encoded_cert}),(L||H)&&(W={kms_mtls:(0,o.Z)((0,o.Z)({},L),H)});var O=(0,o.Z)((0,o.Z)((0,o.Z)((0,o.Z)({raw:ue?xe:"",secretsToBeDeleted:Fn||[],replicas:we,securityContext:De,image:Ie},B),V),W),M);hn||(fn(!0),m.Z.invoke("PUT","/api/v1/namespaces/".concat(null===se||void 0===se?void 0:se.namespace,"/tenants/").concat(null===se||void 0===se?void 0:se.name,"/encryption"),O).then((function(){ji(!1),fn(!1),ki()})).catch((function(e){fn(!1),ae((0,S.Ih)(e))})))}else hn||(fn(!0),m.Z.invoke("DELETE","/api/v1/namespaces/".concat(null===se||void 0===se?void 0:se.namespace,"/tenants/").concat(null===se||void 0===se?void 0:se.name,"/encryption"),{}).then((function(){ji(!1),fn(!1),ki()})).catch((function(e){fn(!1),ae((0,S.Ih)(e))})))},confirmationContent:(0,I.jsxs)(f.Z,{children:[fe?"Data will be encrypted using and external KMS":"Current encrypted information will not be accessible",fe&&(0,I.jsxs)("div",{className:re.warningBlock,children:[(0,I.jsx)(r.e6P,{}),(0,I.jsx)("span",{children:"The content of the KES config secret will be overwritten."})]})]})}),(0,I.jsxs)(x.ZP,{container:!0,spacing:1,children:[(0,I.jsx)(x.ZP,{item:!0,xs:!0,children:(0,I.jsx)(r.NZf,{children:"Encryption"})}),(0,I.jsx)(x.ZP,{item:!0,xs:4,justifyContent:"end",textAlign:"right",children:(0,I.jsx)(p.Z,{label:"",indicatorLabels:["Enabled","Disabled"],checked:fe,value:"tenant_encryption",id:"tenant-encryption",name:"tenant-encryption",onChange:function(){ye(!fe)},description:""})}),(0,I.jsx)(x.ZP,{xs:12,children:(0,I.jsx)(N.Z,{})}),fe&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)(w.Z,{value:ue,onChange:function(e,n){ve(n)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",variant:"scrollable",scrollButtons:"auto",children:[(0,I.jsx)(K.Z,{id:"kms-options",label:"Options"}),(0,I.jsx)(K.Z,{id:"kms-raw-configuration",label:"Raw Edit"})]})}),ue?(0,I.jsx)(c.Fragment,{children:(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(P.Z,{value:xe,mode:"yaml",onBeforeChange:function(e,n,i){ge(i)},editorHeight:"550px"})})}):(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(R,{policies:Be}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.encryptionTypeOptions,children:(0,I.jsx)(h.Z,{currentSelection:ke,id:"encryptionType",name:"encryptionType",label:"KMS",onChange:function(e){be(e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]})}),"vault"===ke&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"vault_endpoint",name:"vault_endpoint",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{endpoint:e.target.value}))},label:"Endpoint",tooltip:"Endpoint is the Hashicorp Vault endpoint",value:(null===Oe||void 0===Oe?void 0:Oe.endpoint)||"",error:gi.vault_ping||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"vault_engine",name:"vault_engine",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{engine:e.target.value}))},label:"Engine",tooltip:"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'",value:(null===Oe||void 0===Oe?void 0:Oe.engine)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"vault_namespace",name:"vault_namespace",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{namespace:e.target.value}))},label:"Namespace",tooltip:"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.",value:(null===Oe||void 0===Oe?void 0:Oe.namespace)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"vault_prefix",name:"vault_prefix",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{prefix:e.target.value}))},label:"Prefix",tooltip:"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level",value:(null===Oe||void 0===Oe?void 0:Oe.prefix)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(r.NZf,{children:"App Role"})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"App Role"}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{approle:(0,o.Z)((0,o.Z)({},null===Oe||void 0===Oe?void 0:Oe.approle),{},{engine:e.target.value})}))},label:"Engine",tooltip:"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'",value:(null===Oe||void 0===Oe||null===(n=Oe.approle)||void 0===n?void 0:n.engine)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{type:qn?"text":"password",id:"vault_id",name:"vault_id",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{approle:(0,o.Z)((0,o.Z)({},null===Oe||void 0===Oe?void 0:Oe.approle),{},{id:e.target.value})}))},label:"AppRole ID",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:(null===Oe||void 0===Oe||null===(i=Oe.approle)||void 0===i?void 0:i.id)||"",required:!0,error:gi.vault_id||"",overlayIcon:qn?(0,I.jsx)(y.Z,{}):(0,I.jsx)(_.Z,{}),overlayAction:function(){return Dn(!qn)}})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{type:Hn?"text":"password",id:"vault_secret",name:"vault_secret",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{approle:(0,o.Z)((0,o.Z)({},null===Oe||void 0===Oe?void 0:Oe.approle),{},{secret:e.target.value})}))},label:"AppRole Secret",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:(null===Oe||void 0===Oe||null===(a=Oe.approle)||void 0===a?void 0:a.secret)||"",required:!0,error:gi.vault_secret||"",overlayIcon:Hn?(0,I.jsx)(y.Z,{}):(0,I.jsx)(_.Z,{}),overlayAction:function(){return On(!Hn)}})}),(0,I.jsx)(x.ZP,{xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{approle:(0,o.Z)((0,o.Z)({},null===Oe||void 0===Oe?void 0:Oe.approle),{},{retry:e.target.value})}))},label:"Retry (Seconds)",error:gi.vault_retry||"",value:(null===Oe||void 0===Oe||null===(s=Oe.approle)||void 0===s?void 0:s.retry)||""})})]})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,style:{marginTop:15},children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Status"}),(0,I.jsx)(Z.Z,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:function(e){return Ue((0,o.Z)((0,o.Z)({},Oe),{},{status:(0,o.Z)((0,o.Z)({},null===Oe||void 0===Oe?void 0:Oe.status),{},{ping:e.target.value})}))},label:"Ping (Seconds)",tooltip:"controls how often to Vault health status is checked. If not set, defaults to 10s",error:gi.vault_ping||"",value:(null===Oe||void 0===Oe||null===(d=Oe.status)||void 0===d?void 0:d.ping)||""})]})})]}),"azure"===ke&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"azure_endpoint",name:"azure_endpoint",onChange:function(e){return an((0,o.Z)((0,o.Z)({},rn),{},{keyvault:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn?void 0:rn.keyvault),{},{endpoint:e.target.value})}))},label:"Endpoint",tooltip:"Endpoint is the Azure KeyVault endpoint",error:gi.azure_endpoint||"",value:(null===rn||void 0===rn||null===(A=rn.keyvault)||void 0===A?void 0:A.endpoint)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Credentials"}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:function(e){var n;return an((0,o.Z)((0,o.Z)({},rn),{},{keyvault:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn?void 0:rn.keyvault),{},{credentials:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn||null===(n=rn.keyvault)||void 0===n?void 0:n.credentials),{},{tenant_id:e.target.value})})}))},label:"Tenant ID",tooltip:"TenantID is the ID of the Azure KeyVault tenant",value:(null===rn||void 0===rn||null===(F=rn.keyvault)||void 0===F||null===(E=F.credentials)||void 0===E?void 0:E.tenant_id)||"",error:gi.azure_tenant_id||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"azure_client_id",name:"azure_client_id",onChange:function(e){var n;return an((0,o.Z)((0,o.Z)({},rn),{},{keyvault:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn?void 0:rn.keyvault),{},{credentials:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn||null===(n=rn.keyvault)||void 0===n?void 0:n.credentials),{},{client_id:e.target.value})})}))},label:"Client ID",tooltip:"ClientID is the ID of the client accessing Azure KeyVault",value:(null===rn||void 0===rn||null===(z=rn.keyvault)||void 0===z||null===(G=z.credentials)||void 0===G?void 0:G.client_id)||"",error:gi.azure_client_id||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"azure_client_secret",name:"azure_client_secret",onChange:function(e){var n;return an((0,o.Z)((0,o.Z)({},rn),{},{keyvault:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn?void 0:rn.keyvault),{},{credentials:(0,o.Z)((0,o.Z)({},null===rn||void 0===rn||null===(n=rn.keyvault)||void 0===n?void 0:n.credentials),{},{client_secret:e.target.value})})}))},label:"Client Secret",tooltip:"ClientSecret is the client secret accessing the Azure KeyVault",value:(null===rn||void 0===rn||null===(q=rn.keyvault)||void 0===q||null===(D=q.credentials)||void 0===D?void 0:D.client_secret)||"",error:gi.azure_client_secret||""})})]})})]}),"gcp"===ke&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"gcp_project_id",name:"gcp_project_id",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{project_id:e.target.value})}))},label:"Project ID",tooltip:"ProjectID is the GCP project ID",value:(null===cn||void 0===cn?void 0:cn.secretmanager.project_id)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{endpoint:e.target.value})}))},label:"Endpoint",tooltip:"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443",value:(null===cn||void 0===cn?void 0:cn.secretmanager.endpoint)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Credentials"}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gcp_client_email",name:"gcp_client_email",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager.credentials),{},{client_email:e.target.value})})}))},label:"Client Email",tooltip:"Is the Client email of the GCP service account used to access the SecretManager",value:(null===cn||void 0===cn||null===(T=cn.secretmanager.credentials)||void 0===T?void 0:T.client_email)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gcp_client_id",name:"gcp_client_id",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager.credentials),{},{client_id:e.target.value})})}))},label:"Client ID",tooltip:"Is the Client ID of the GCP service account used to access the SecretManager",value:(null===cn||void 0===cn||null===(M=cn.secretmanager.credentials)||void 0===M?void 0:M.client_id)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager.credentials),{},{private_key_id:e.target.value})})}))},label:"Private Key ID",tooltip:"Is the private key ID of the GCP service account used to access the SecretManager",value:(null===cn||void 0===cn||null===(V=cn.secretmanager.credentials)||void 0===V?void 0:V.private_key_id)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gcp_private_key",name:"gcp_private_key",onChange:function(e){return un((0,o.Z)((0,o.Z)({},cn),{},{secretmanager:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===cn||void 0===cn?void 0:cn.secretmanager.credentials),{},{private_key:e.target.value})})}))},label:"Private Key",tooltip:"Is the private key of the GCP service account used to access the SecretManager",value:(null===cn||void 0===cn||null===(B=cn.secretmanager.credentials)||void 0===B?void 0:B.private_key)||""})})]})})]}),"aws"===ke&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"aws_endpoint",name:"aws_endpoint",onChange:function(e){return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{endpoint:e.target.value})}))},label:"Endpoint",tooltip:"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com",value:(null===Xe||void 0===Xe||null===(W=Xe.secretsmanager)||void 0===W?void 0:W.endpoint)||"",required:!0,error:gi.aws_endpoint||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"aws_region",name:"aws_region",onChange:function(e){return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{region:e.target.value})}))},label:"Region",tooltip:"Region is the AWS region the SecretsManager is located",value:(null===Xe||void 0===Xe||null===(L=Xe.secretsmanager)||void 0===L?void 0:L.region)||"",error:gi.aws_region||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{kmskey:e.target.value})}))},label:"KMS Key",tooltip:"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used",value:(null===Xe||void 0===Xe||null===(H=Xe.secretsmanager)||void 0===H?void 0:H.kmskey)||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Credentials"}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){var n;return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe||null===(n=Xe.secretsmanager)||void 0===n?void 0:n.credentials),{},{accesskey:e.target.value})})}))},label:"Access Key",tooltip:"AccessKey is the access key for authenticating to AWS",value:(null===Xe||void 0===Xe||null===(O=Xe.secretsmanager)||void 0===O||null===(U=O.credentials)||void 0===U?void 0:U.accesskey)||"",error:gi.aws_accessKey||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){var n;return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe||null===(n=Xe.secretsmanager)||void 0===n?void 0:n.credentials),{},{secretkey:e.target.value})})}))},label:"Secret Key",tooltip:"SecretKey is the secret key for authenticating to AWS",value:(null===Xe||void 0===Xe||null===(Y=Xe.secretsmanager)||void 0===Y||null===(Q=Y.credentials)||void 0===Q?void 0:Q.secretkey)||"",error:gi.aws_secretKey||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"aws_token",name:"aws_token",onChange:function(e){var n;return Je((0,o.Z)((0,o.Z)({},Xe),{},{secretsmanager:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe?void 0:Xe.secretsmanager),{},{credentials:(0,o.Z)((0,o.Z)({},null===Xe||void 0===Xe||null===(n=Xe.secretsmanager)||void 0===n?void 0:n.credentials),{},{token:e.target.value})})}))},label:"Token",tooltip:"SessionToken is an optional session token for authenticating to AWS when using STS",value:(null===Xe||void 0===Xe||null===(X=Xe.secretsmanager)||void 0===X||null===(J=X.credentials)||void 0===J?void 0:J.token)||""})})]})})]}),"gemalto"===ke&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:function(e){return ln((0,o.Z)((0,o.Z)({},nn),{},{keysecure:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn?void 0:nn.keysecure),{},{endpoint:e.target.value})}))},label:"Endpoint",tooltip:"Endpoint is the endpoint to the KeySecure server",value:(null===nn||void 0===nn||null===($=nn.keysecure)||void 0===$?void 0:$.endpoint)||"",error:gi.gemalto_endpoint||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Credentials"}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gemalto_token",name:"gemalto_token",onChange:function(e){var n;return ln((0,o.Z)((0,o.Z)({},nn),{},{keysecure:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn?void 0:nn.keysecure),{},{credentials:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn||null===(n=nn.keysecure)||void 0===n?void 0:n.credentials),{},{token:e.target.value})})}))},label:"Token",tooltip:"Token is the refresh authentication token to access the KeySecure server",value:(null===nn||void 0===nn||null===(ee=nn.keysecure)||void 0===ee||null===(ne=ee.credentials)||void 0===ne?void 0:ne.token)||"",error:gi.gemalto_token||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{id:"gemalto_domain",name:"gemalto_domain",onChange:function(e){var n;return ln((0,o.Z)((0,o.Z)({},nn),{},{keysecure:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn?void 0:nn.keysecure),{},{credentials:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn||null===(n=nn.keysecure)||void 0===n?void 0:n.credentials),{},{domain:e.target.value})})}))},label:"Domain",tooltip:"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain",value:(null===nn||void 0===nn||null===(ie=nn.keysecure)||void 0===ie||null===(le=ie.credentials)||void 0===le?void 0:le.domain)||"",error:gi.gemalto_domain||"",required:!0})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,className:re.formFieldRow,children:(0,I.jsx)(Z.Z,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:function(e){var n;return ln((0,o.Z)((0,o.Z)({},nn),{},{keysecure:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn?void 0:nn.keysecure),{},{credentials:(0,o.Z)((0,o.Z)({},null===nn||void 0===nn||null===(n=nn.keysecure)||void 0===n?void 0:n.credentials),{},{retry:e.target.value})})}))},label:"Retry (seconds)",value:(null===nn||void 0===nn||null===(te=nn.keysecure)||void 0===te||null===(oe=te.credentials)||void 0===oe?void 0:oe.retry)||"",error:gi.gemalto_retry||""})})]})})]})]}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(r.NZf,{children:"Additional Configuration for KES"})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(p.Z,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:pn,onChange:function(){return xn(!pn)},label:"Custom Certificates"})}),pn&&(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"Encryption server certificates"}),jn?(0,I.jsx)(C.Z,{certificateInfo:jn,onDelete:function(){return bi(jn)}}):(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(g.Z,{onChange:function(e,n){di({encoded_key:e||"",id:(null===si||void 0===si?void 0:si.id)||"",key:n||"",cert:(null===si||void 0===si?void 0:si.cert)||"",encoded_cert:(null===si||void 0===si?void 0:si.encoded_cert)||""}),hi("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",value:null===si||void 0===si?void 0:si.key}),(0,I.jsx)(g.Z,{onChange:function(e,n){di({encoded_key:(null===si||void 0===si?void 0:si.encoded_key)||"",id:(null===si||void 0===si?void 0:si.id)||"",key:(null===si||void 0===si?void 0:si.key)||"",cert:n||"",encoded_cert:e||""}),hi("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",value:null===si||void 0===si?void 0:si.cert})]})]})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"MinIO mTLS certificates (connection between MinIO and the Encryption server)"}),Sn?(0,I.jsx)(C.Z,{certificateInfo:Sn,onDelete:function(){return bi(Sn)}}):(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(g.Z,{onChange:function(e,n){In({encoded_key:e||"",id:(null===Nn||void 0===Nn?void 0:Nn.id)||"",key:n||"",cert:(null===Nn||void 0===Nn?void 0:Nn.cert)||"",encoded_cert:(null===Nn||void 0===Nn?void 0:Nn.encoded_cert)||""}),hi("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",value:null===Nn||void 0===Nn?void 0:Nn.key}),(0,I.jsx)(g.Z,{onChange:function(e,n){In({encoded_key:(null===Nn||void 0===Nn?void 0:Nn.encoded_key)||"",id:(null===Nn||void 0===Nn?void 0:Nn.id)||"",key:(null===Nn||void 0===Nn?void 0:Nn.key)||"",cert:n||"",encoded_cert:e||""}),hi("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",value:null===Nn||void 0===Nn?void 0:Nn.cert})]})]})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("fieldset",{className:re.fieldGroup,children:[(0,I.jsx)("legend",{className:re.descriptionText,children:"KMS mTLS certificates (connection between the Encryption server and the KMS)"}),Qn?(0,I.jsx)(C.Z,{certificateInfo:Qn,onDelete:function(){return bi(Qn)}}):(0,I.jsxs)(c.Fragment,{children:[(0,I.jsx)(g.Z,{onChange:function(e,n){oi({encoded_key:e||"",id:(null===ti||void 0===ti?void 0:ti.id)||"",key:n||"",cert:(null===ti||void 0===ti?void 0:ti.cert)||"",encoded_cert:(null===ti||void 0===ti?void 0:ti.encoded_cert)||""})},accept:".key,.pem",id:"kms_mtls_key",name:"kms_mtls_key",label:"Key",value:null===ti||void 0===ti?void 0:ti.key}),(0,I.jsx)(g.Z,{onChange:function(e,n){return oi({encoded_key:(null===ti||void 0===ti?void 0:ti.encoded_key)||"",id:(null===ti||void 0===ti?void 0:ti.id)||"",key:(null===ti||void 0===ti?void 0:ti.key)||"",cert:n||"",encoded_cert:e||""})},accept:".cer,.crt,.cert,.pem",id:"kms_mtls_cert",name:"kms_mtls_cert",label:"Cert",value:(null===ti||void 0===ti?void 0:ti.cert)||""})]}),ei?(0,I.jsx)(C.Z,{certificateInfo:ei,onDelete:function(){return bi(ei)}}):(0,I.jsx)(g.Z,{onChange:function(e,n){return mi({encoded_key:(null===vi||void 0===vi?void 0:vi.encoded_key)||"",id:(null===vi||void 0===vi?void 0:vi.id)||"",key:(null===vi||void 0===vi?void 0:vi.key)||"",cert:n||"",encoded_cert:e||""})},accept:".cer,.crt,.cert,.pem",id:"kms_mtls_ca",name:"kms_mtls_ca",label:"CA",value:(null===vi||void 0===vi?void 0:vi.cert)||""})]})})]}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{type:"text",id:"image",name:"image",onChange:function(e){return Ae(e.target.value)},label:"Image",tooltip:"KES container image",placeholder:"minio/kes:2023-08-19T17-27-47Z",value:Ie})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:function(e){return Ke(e.target.value)},label:"Replicas",tooltip:"Numer of KES pod replicas",value:we,required:!0,error:gi.replicas||""})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(r.NZf,{children:"SecurityContext for KES"})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsxs)("div",{className:"".concat(re.multiContainer," ").concat(re.responsiveContainer),children:[(0,I.jsx)("div",{className:"".concat(re.formFieldRow," ").concat(re.rightSpacer),children:(0,I.jsx)(Z.Z,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:function(e){Te((0,o.Z)((0,o.Z)({},De),{},{runAsUser:e.target.value}))},label:"Run As User",value:De.runAsUser,required:!0,error:gi.kes_securityContext_runAsUser||"",min:"0"})}),(0,I.jsx)("div",{className:"".concat(re.formFieldRow," ").concat(re.rightSpacer),children:(0,I.jsx)(Z.Z,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:function(e){Te((0,o.Z)((0,o.Z)({},De),{},{runAsGroup:e.target.value}))},label:"Run As Group",value:De.runAsGroup,required:!0,error:gi.kes_securityContext_runAsGroup||"",min:"0"})}),(0,I.jsx)("div",{className:"".concat(re.formFieldRow," ").concat(re.rightSpacer),children:(0,I.jsx)(Z.Z,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:function(e){Te((0,o.Z)((0,o.Z)({},De),{},{fsGroup:e.target.value}))},label:"FsGroup",value:De.fsGroup,required:!0,error:gi.kes_securityContext_fsGroup||"",min:"0"})})]})}),(0,I.jsx)(x.ZP,{item:!0,xs:12,children:(0,I.jsx)(p.Z,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:De.runAsNonRoot,onChange:function(e){var n=e.target.checked;Te((0,o.Z)((0,o.Z)({},De),{},{runAsNonRoot:n}))},label:"Do not run as Root"})})]}),(0,I.jsx)(x.ZP,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:(0,I.jsx)(r.zxk,{id:"save-encryption",type:"submit",variant:"callAction",disabled:!Vn,onClick:function(){return ji(!0)},label:"Save"})})]})]})}))},22512:function(e,n,i){var l=i(72791),t=i(20890),o=i(11135),r=i(25787),a=i(80184);n.Z=(0,r.Z)((function(e){var n;return(0,o.Z)({errorBlock:{color:(null===(n=e.palette)||void 0===n?void 0:n.error.main)||"#C83B51"}})}))((function(e){var n=e.classes,i=e.errorMessage,o=e.withBreak,r=void 0===o||o;return(0,a.jsxs)(l.Fragment,{children:[r&&(0,a.jsx)("br",{}),(0,a.jsx)(t.Z,{component:"p",variant:"body1",className:n.errorBlock,children:i})]})}))}}]); -//# sourceMappingURL=367.2251aaba.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/367.2251aaba.chunk.js.map b/web-app/build/static/js/367.2251aaba.chunk.js.map deleted file mode 100644 index 55743ad0535..00000000000 --- a/web-app/build/static/js/367.2251aaba.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/367.2251aaba.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Common/FormHr.tsx","screens/Console/Common/TLSCertificate/TLSCertificate.tsx","screens/Console/Tenants/TenantDetails/KMSPolicyInfo.tsx","screens/Console/Tenants/TenantDetails/TenantEncryption.tsx","screens/shared/ErrorBlock.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Button, CopyIcon, HelpIcon } from \"mds\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n
\n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n
\n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport { HelpIcon } from \"mds\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport styled from \"@emotion/styled\";\n\nconst FormHr = styled(\"hr\")`\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n`;\n\nexport default FormHr;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { DateTime, Duration } from \"luxon\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { ICertificateInfo } from \"../../Tenants/types\";\nimport LanguageIcon from \"@mui/icons-material/Language\";\nimport Chip from \"@mui/material/Chip\";\nimport {\n Box,\n Container,\n Divider,\n Grid,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n Typography,\n} from \"@mui/material\";\nimport EventBusyIcon from \"@mui/icons-material/EventBusy\";\nimport AccessTimeIcon from \"@mui/icons-material/AccessTime\";\nimport { CertificateIcon } from \"mds\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n certificateIcon: {\n float: \"left\",\n paddingTop: \"5px !important\",\n paddingRight: \"10px !important\",\n },\n certificateInfo: { float: \"right\" },\n certificateWrapper: {\n height: \"auto\",\n margin: 5,\n border: \"1px solid #E2E2E2\",\n userSelect: \"text\",\n borderRadius: 4,\n \"& h6\": {\n fontWeight: \"bold\",\n },\n \"& div\": {\n padding: 0,\n },\n },\n certificateExpiry: {\n color: \"#616161\",\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n marginBottom: 5,\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificateDomains: {\n color: \"#616161\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificatesList: {\n border: \"1px solid #E2E2E2\",\n borderRadius: 4,\n color: \"#616161\",\n textTransform: \"lowercase\",\n overflowY: \"scroll\",\n maxHeight: 145,\n marginBottom: 10,\n },\n certificatesListItem: {\n padding: \"0px 16px\",\n borderBottom: \"1px solid #E2E2E2\",\n \"& div\": {\n minWidth: 0,\n },\n \"& svg\": {\n fontSize: 12,\n marginRight: 10,\n opacity: 0.5,\n },\n \"& span\": {\n fontSize: 12,\n },\n },\n certificateExpiring: {\n color: \"orange\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n certificateExpired: {\n color: \"red\",\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n });\n\ninterface ITLSCertificate {\n classes: any;\n certificateInfo: ICertificateInfo;\n onDelete: any;\n}\n\nconst TLSCertificate = ({\n classes,\n certificateInfo,\n onDelete = () => {},\n}: ITLSCertificate) => {\n const certificates = certificateInfo.domains || [];\n\n const expiry = DateTime.fromISO(certificateInfo.expiry);\n const now = DateTime.utc();\n // Expose error on Tenant if certificate is near expiration or expired\n let daysToExpiry: number = 0;\n let daysToExpiryHuman: string = \"\";\n let certificateExpiration: string = \"\";\n if (expiry) {\n let durationToExpiry = expiry.diff(now);\n daysToExpiry = durationToExpiry.as(\"days\");\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ days: 1 }))\n .shiftTo(\"days\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (daysToExpiry >= 10 && daysToExpiry < 30) {\n certificateExpiration = classes.certificateExpiring;\n }\n if (daysToExpiry < 10) {\n certificateExpiration = classes.certificateExpired;\n if (daysToExpiry < 2) {\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ minutes: 1 }))\n .shiftTo(\"hours\", \"minutes\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (durationToExpiry.as(\"minutes\") <= 1) {\n daysToExpiryHuman = \"EXPIRED\";\n }\n }\n }\n }\n\n return (\n \n \n \n \n \n \n {certificateInfo.name}\n \n \n \n  \n Expiry: \n {expiry.toFormat(\"yyyy/MM/dd\")}\n \n \n \n  \n Expires in: \n {daysToExpiryHuman}\n \n \n
\n \n {`${certificates.length} Domain (s):`}\n \n \n {certificates.map((dom, index) => (\n \n \n \n \n \n \n ))}\n \n
\n \n }\n onDelete={onDelete}\n />\n );\n};\n\nexport default withStyles(styles)(TLSCertificate);\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box } from \"mds\";\n\nconst getPolicyData = (policies: Record = {}) => {\n const policyNames = Object.keys(policies);\n return policyNames.map((polName: string) => {\n const policyConfig = policies[polName] || {};\n return {\n name: polName || \"\",\n identities: policyConfig.identities || [],\n // v1 specific\n paths: policyConfig.paths || [],\n // v2 specific\n allow: policyConfig.allow || [],\n deny: policyConfig.deny || [],\n };\n });\n};\n\nconst PolicyItem = ({\n items = [],\n title = \"\",\n}: {\n items: string[];\n title: string;\n}) => {\n return items?.length ? (\n \n \n {title}\n \n \n {items.map((iTxt: string) => {\n return - {iTxt};\n })}\n \n \n ) : null;\n};\n\nconst KMSPolicyInfo = ({\n policies = {},\n}: {\n policies: Record;\n}) => {\n const fmtPolicies = getPolicyData(policies);\n return fmtPolicies.length ? (\n \n

Policies

\n \n {fmtPolicies.map((pConf: Record) => {\n return (\n \n
\n \n Policy Name:\n {\" \"}\n {pConf.name}\n
\n \n \n \n \n \n );\n })}\n \n
\n ) : null;\n};\n\nexport default KMSPolicyInfo;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ICertificateInfo, ITenantEncryptionResponse } from \"../types\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button, WarnIcon, SectionTitle } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n containerForHeader,\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n spacingUtils,\n tenantDetailsStyles,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { DialogContentText } from \"@mui/material\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { clearValidationError } from \"../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../utils/validationFunctions\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport CodeMirrorWrapper from \"../../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport FormHr from \"../../Common/FormHr\";\nimport { SecurityContext } from \"../../../../api/operatorApi\";\nimport KMSPolicyInfo from \"./KMSPolicyInfo\";\n\ninterface ITenantEncryption {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...spacingUtils,\n ...containerForHeader,\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n });\n\nconst TenantEncryption = ({ classes }: ITenantEncryption) => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const [editRawConfiguration, setEditRawConfiguration] = useState(0);\n const [encryptionRawConfiguration, setEncryptionRawConfiguration] =\n useState(\"\");\n const [encryptionEnabled, setEncryptionEnabled] = useState(false);\n const [encryptionType, setEncryptionType] = useState(\"vault\");\n const [replicas, setReplicas] = useState(\"1\");\n const [image, setImage] = useState(\"\");\n const [refreshEncryptionInfo, setRefreshEncryptionInfo] =\n useState(false);\n const [securityContext, setSecurityContext] = useState({\n fsGroup: \"1000\",\n fsGroupChangePolicy: \"Always\",\n runAsGroup: \"1000\",\n runAsNonRoot: true,\n runAsUser: \"1000\",\n });\n const [policies, setPolicies] = useState([]);\n const [vaultConfiguration, setVaultConfiguration] = useState(null);\n const [awsConfiguration, setAWSConfiguration] = useState(null);\n const [gemaltoConfiguration, setGemaltoConfiguration] = useState(null);\n const [azureConfiguration, setAzureConfiguration] = useState(null);\n const [gcpConfiguration, setGCPConfiguration] = useState(null);\n const [enabledCustomCertificates, setEnabledCustomCertificates] =\n useState(false);\n const [updatingEncryption, setUpdatingEncryption] = useState(false);\n const [kesServerTLSCertificateSecret, setKesServerTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificateSecret, setMinioMTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificate, setMinioMTLSCertificate] =\n useState(null);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n const [showVaultAppRoleID, setShowVaultAppRoleID] = useState(false);\n const [isFormValid, setIsFormValid] = useState(false);\n const [showVaultAppRoleSecret, setShowVaultAppRoleSecret] =\n useState(false);\n const [kmsMTLSCertificateSecret, setKmsMTLSCertificateSecret] =\n useState(null);\n const [kmsCACertificateSecret, setKMSCACertificateSecret] =\n useState(null);\n const [kmsMTLSCertificate, setKmsMTLSCertificate] = useState(\n null,\n );\n const [kesServerCertificate, setKESServerCertificate] =\n useState(null);\n const [kmsCACertificate, setKmsCACertificate] = useState(\n null,\n );\n const [validationErrors, setValidationErrors] = useState({});\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (encryptionEnabled) {\n encryptionValidation = [\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: securityContext.runAsUser,\n customValidation:\n securityContext.runAsUser === \"\" ||\n parseInt(securityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: securityContext.runAsGroup,\n customValidation:\n securityContext.runAsGroup === \"\" ||\n parseInt(securityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: securityContext.fsGroup!,\n customValidation:\n securityContext.fsGroup === \"\" ||\n parseInt(securityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enabledCustomCertificates) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: false,\n value: kesServerCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"serverCert\",\n required: false,\n value: kesServerCertificate?.encoded_cert || \"\",\n },\n {\n fieldKey: \"clientKey\",\n required: false,\n value: minioMTLSCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"clientCert\",\n required: false,\n value: minioMTLSCertificate?.encoded_cert || \"\",\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultConfiguration?.endpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultConfiguration?.approle?.id,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultConfiguration?.approle?.secret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultConfiguration?.status?.ping,\n customValidation: parseInt(vaultConfiguration?.status?.ping) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultConfiguration?.approle?.retry,\n customValidation: parseInt(vaultConfiguration?.approle?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsConfiguration?.secretsmanager?.endpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsConfiguration?.secretsmanager?.region,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.accesskey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.secretkey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.endpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.token,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.domain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoConfiguration?.keysecure?.credentials?.retry,\n customValidation:\n parseInt(gemaltoConfiguration?.keysecure?.credentials?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"azure\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureConfiguration?.keyvault?.endpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.tenant_id,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_id,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_secret,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n setIsFormValid(Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enabledCustomCertificates,\n encryptionEnabled,\n encryptionType,\n kesServerCertificate?.encoded_key,\n kesServerCertificate?.encoded_cert,\n minioMTLSCertificate?.encoded_key,\n minioMTLSCertificate?.encoded_cert,\n kmsMTLSCertificate?.encoded_key,\n kmsMTLSCertificate?.encoded_cert,\n kmsCACertificate?.encoded_key,\n kmsCACertificate?.encoded_cert,\n securityContext,\n vaultConfiguration,\n awsConfiguration,\n gemaltoConfiguration,\n azureConfiguration,\n gcpConfiguration,\n replicas,\n ]);\n\n const fetchEncryptionInfo = () => {\n if (!refreshEncryptionInfo && tenant?.namespace && tenant?.name) {\n setRefreshEncryptionInfo(true);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n )\n .then((resp: ITenantEncryptionResponse) => {\n setEncryptionRawConfiguration(resp.raw);\n if (resp.policies) {\n setPolicies(resp.policies);\n }\n if (resp.vault) {\n setEncryptionType(\"vault\");\n setVaultConfiguration(resp.vault);\n } else if (resp.aws) {\n setEncryptionType(\"aws\");\n setAWSConfiguration(resp.aws);\n } else if (resp.gemalto) {\n setEncryptionType(\"gemalto\");\n setGemaltoConfiguration(resp.gemalto);\n } else if (resp.gcp) {\n setEncryptionType(\"gcp\");\n setGCPConfiguration(resp.gcp);\n } else if (resp.azure) {\n setEncryptionType(\"azure\");\n setAzureConfiguration(resp.azure);\n }\n\n setEncryptionEnabled(true);\n setImage(resp.image);\n setReplicas(resp.replicas);\n if (resp.securityContext) {\n setSecurityContext(resp.securityContext);\n }\n if (resp.server_tls || resp.minio_mtls || resp.kms_mtls) {\n setEnabledCustomCertificates(true);\n }\n if (resp.server_tls) {\n setKesServerTLSCertificateSecret(resp.server_tls);\n }\n if (resp.minio_mtls) {\n setMinioMTLSCertificateSecret(resp.minio_mtls);\n }\n if (resp.kms_mtls) {\n setKmsMTLSCertificateSecret(resp.kms_mtls.crt);\n setKMSCACertificateSecret(resp.kms_mtls.ca);\n }\n setRefreshEncryptionInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n setRefreshEncryptionInfo(false);\n });\n }\n };\n\n useEffect(() => {\n fetchEncryptionInfo();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tenant]);\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n if (certificateInfo.name === kesServerTLSCertificateSecret?.name) {\n setKesServerTLSCertificateSecret(null);\n }\n if (certificateInfo.name === minioMTLSCertificateSecret?.name) {\n setMinioMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsMTLSCertificateSecret?.name) {\n setKmsMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsCACertificateSecret?.name) {\n setKMSCACertificateSecret(null);\n }\n };\n\n const updateEncryptionConfiguration = () => {\n if (encryptionEnabled) {\n let insertEncrypt = {};\n switch (encryptionType) {\n case \"gemalto\":\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoConfiguration?.keysecure?.endpoint || \"\",\n credentials: {\n token:\n gemaltoConfiguration?.keysecure?.credentials?.token || \"\",\n domain:\n gemaltoConfiguration?.keysecure?.credentials?.domain || \"\",\n retry: parseInt(\n gemaltoConfiguration?.keysecure?.credentials?.retry,\n ),\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsConfiguration?.secretsmanager?.endpoint || \"\",\n region: awsConfiguration?.secretsmanager?.region || \"\",\n kmskey: awsConfiguration?.secretsmanager?.kmskey || \"\",\n credentials: {\n accesskey:\n awsConfiguration?.secretsmanager?.credentials?.accesskey ||\n \"\",\n secretkey:\n awsConfiguration?.secretsmanager?.credentials?.secretkey ||\n \"\",\n token:\n awsConfiguration?.secretsmanager?.credentials?.token || \"\",\n },\n },\n },\n };\n break;\n case \"azure\":\n insertEncrypt = {\n azure: {\n keyvault: {\n endpoint: azureConfiguration?.keyvault?.endpoint || \"\",\n credentials: {\n tenant_id:\n azureConfiguration?.keyvault?.credentials?.tenant_id || \"\",\n client_id:\n azureConfiguration?.keyvault?.credentials?.client_id || \"\",\n client_secret:\n azureConfiguration?.keyvault?.credentials?.client_secret ||\n \"\",\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpConfiguration?.secretmanager?.project_id || \"\",\n endpoint: gcpConfiguration?.secretmanager?.endpoint || \"\",\n credentials: {\n client_email:\n gcpConfiguration?.secretmanager?.credentials\n ?.client_email || \"\",\n client_id:\n gcpConfiguration?.secretmanager?.credentials?.client_id ||\n \"\",\n private_key_id:\n gcpConfiguration?.secretmanager?.credentials\n ?.private_key_id || \"\",\n private_key:\n gcpConfiguration?.secretmanager?.credentials?.private_key ||\n \"\",\n },\n },\n },\n };\n break;\n case \"vault\":\n insertEncrypt = {\n vault: {\n endpoint: vaultConfiguration?.endpoint || \"\",\n engine: vaultConfiguration?.engine || \"\",\n namespace: vaultConfiguration?.namespace || \"\",\n prefix: vaultConfiguration?.prefix || \"\",\n approle: {\n engine: vaultConfiguration?.approle?.engine || \"\",\n id: vaultConfiguration?.approle?.id || \"\",\n secret: vaultConfiguration?.approle?.secret || \"\",\n retry: parseInt(vaultConfiguration?.approle?.retry),\n },\n status: {\n ping: parseInt(vaultConfiguration?.status?.ping),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n let encryptionKMSCertificates: any = {};\n\n // MinIO -> KES (mTLS certificates)\n if (\n minioMTLSCertificate?.encoded_key &&\n minioMTLSCertificate?.encoded_cert\n ) {\n encryptionClientKeyPair = {\n minio_mtls: {\n key: minioMTLSCertificate?.encoded_key,\n crt: minioMTLSCertificate?.encoded_cert,\n },\n };\n }\n\n // KES server certificates\n if (\n kesServerCertificate?.encoded_key &&\n kesServerCertificate?.encoded_cert\n ) {\n encryptionServerKeyPair = {\n server_tls: {\n key: kesServerCertificate?.encoded_key,\n crt: kesServerCertificate?.encoded_cert,\n },\n };\n }\n\n // KES -> KMS (mTLS certificates)\n let kmsMTLSKeyPair = null;\n let kmsCAInsert = null;\n if (kmsMTLSCertificate?.encoded_key && kmsMTLSCertificate?.encoded_cert) {\n kmsMTLSKeyPair = {\n key: kmsMTLSCertificate?.encoded_key,\n crt: kmsMTLSCertificate?.encoded_cert,\n };\n }\n if (kmsCACertificate?.encoded_cert) {\n kmsCAInsert = {\n ca: kmsCACertificate?.encoded_cert,\n };\n }\n if (kmsMTLSKeyPair || kmsCAInsert) {\n encryptionKMSCertificates = {\n kms_mtls: {\n ...kmsMTLSKeyPair,\n ...kmsCAInsert,\n },\n };\n }\n\n const dataSend = {\n raw: editRawConfiguration ? encryptionRawConfiguration : \"\",\n secretsToBeDeleted: certificatesToBeRemoved || [],\n replicas: replicas,\n securityContext: securityContext,\n image: image,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...encryptionKMSCertificates,\n ...insertEncrypt,\n };\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n dataSend,\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n } else {\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n {},\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }\n };\n\n return (\n \n {confirmOpen && (\n setConfirmOpen(false)}\n onConfirm={updateEncryptionConfiguration}\n confirmationContent={\n \n {encryptionEnabled\n ? \"Data will be encrypted using and external KMS\"\n : \"Current encrypted information will not be accessible\"}\n {encryptionEnabled && (\n
\n \n \n The content of the KES config secret will be overwritten.\n \n
\n )}\n
\n }\n />\n )}\n \n \n Encryption\n \n \n {\n setEncryptionEnabled(!encryptionEnabled);\n }}\n description=\"\"\n />\n \n \n \n \n {encryptionEnabled && (\n \n \n , newValue: number) => {\n setEditRawConfiguration(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n \n \n \n \n\n {editRawConfiguration ? (\n \n \n {\n setEncryptionRawConfiguration(value);\n }}\n editorHeight={\"550px\"}\n />\n \n \n ) : (\n \n \n \n {\n setEncryptionType(e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n \n\n {encryptionType === \"vault\" && (\n \n \n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n endpoint: e.target.value,\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultConfiguration?.endpoint || \"\"}\n error={validationErrors[\"vault_ping\"] || \"\"}\n required\n />\n \n \n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n engine: e.target.value,\n })\n }\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultConfiguration?.engine || \"\"}\n />\n \n \n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n namespace: e.target.value,\n })\n }\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultConfiguration?.namespace || \"\"}\n />\n \n \n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n prefix: e.target.value,\n })\n }\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultConfiguration?.prefix || \"\"}\n />\n \n \n App Role\n \n \n
\n \n App Role\n \n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n engine: e.target.value,\n },\n })\n }\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={vaultConfiguration?.approle?.engine || \"\"}\n />\n \n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n id: e.target.value,\n },\n })\n }\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultConfiguration?.approle?.id || \"\"}\n required\n error={validationErrors[\"vault_id\"] || \"\"}\n overlayIcon={\n showVaultAppRoleID ? (\n \n ) : (\n \n )\n }\n overlayAction={() =>\n setShowVaultAppRoleID(!showVaultAppRoleID)\n }\n />\n \n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n secret: e.target.value,\n },\n })\n }\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultConfiguration?.approle?.secret || \"\"}\n required\n error={validationErrors[\"vault_secret\"] || \"\"}\n overlayIcon={\n showVaultAppRoleSecret ? (\n \n ) : (\n \n )\n }\n overlayAction={() =>\n setShowVaultAppRoleSecret(!showVaultAppRoleSecret)\n }\n />\n \n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n retry: e.target.value,\n },\n })\n }\n label=\"Retry (Seconds)\"\n error={validationErrors[\"vault_retry\"] || \"\"}\n value={vaultConfiguration?.approle?.retry || \"\"}\n />\n \n
\n
\n \n
\n \n Status\n \n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n status: {\n ...vaultConfiguration?.status,\n ping: e.target.value,\n },\n })\n }\n label=\"Ping (Seconds)\"\n tooltip=\"controls how often to Vault health status is checked. If not set, defaults to 10s\"\n error={validationErrors[\"vault_ping\"] || \"\"}\n value={vaultConfiguration?.status?.ping || \"\"}\n />\n
\n
\n \n )}\n {encryptionType === \"azure\" && (\n \n \n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n value={azureConfiguration?.keyvault?.endpoint || \"\"}\n />\n \n \n
\n \n Credentials\n \n \n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n tenant_id: e.target.value,\n },\n },\n })\n }\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.tenant_id || \"\"\n }\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n \n \n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_id || \"\"\n }\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n \n \n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_secret: e.target.value,\n },\n },\n })\n }\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_secret || \"\"\n }\n error={\n validationErrors[\"azure_client_secret\"] || \"\"\n }\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gcp\" && (\n \n \n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n project_id: e.target.value,\n },\n })\n }\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID\"\n value={gcpConfiguration?.secretmanager.project_id || \"\"}\n />\n \n \n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={gcpConfiguration?.secretmanager.endpoint || \"\"}\n />\n \n \n
\n \n Credentials\n \n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_email: e.target.value,\n },\n },\n })\n }\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_email || \"\"\n }\n />\n \n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_id || \"\"\n }\n />\n \n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key_id: e.target.value,\n },\n },\n })\n }\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key_id || \"\"\n }\n />\n \n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key: e.target.value,\n },\n },\n })\n }\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key || \"\"\n }\n />\n \n
\n
\n
\n )}\n {encryptionType === \"aws\" && (\n \n \n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={awsConfiguration?.secretsmanager?.endpoint || \"\"}\n required\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n />\n \n \n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n region: e.target.value,\n },\n })\n }\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={awsConfiguration?.secretsmanager?.region || \"\"}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n kmskey: e.target.value,\n },\n })\n }\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={awsConfiguration?.secretsmanager?.kmskey || \"\"}\n />\n \n \n
\n \n Credentials\n \n \n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n accesskey: e.target.value,\n },\n },\n })\n }\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager?.credentials\n ?.accesskey || \"\"\n }\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n secretkey: e.target.value,\n },\n },\n })\n }\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager?.credentials\n ?.secretkey || \"\"\n }\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"SessionToken is an optional session token for authenticating to AWS when using STS\"\n value={\n awsConfiguration?.secretsmanager?.credentials\n ?.token || \"\"\n }\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gemalto\" && (\n \n \n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={gemaltoConfiguration?.keysecure?.endpoint || \"\"}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n \n
\n \n Credentials\n \n \n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.token || \"\"\n }\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n domain: e.target.value,\n },\n },\n })\n }\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.domain || \"\"\n }\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n retry: e.target.value,\n },\n },\n })\n }\n label=\"Retry (seconds)\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.retry || \"\"\n }\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
\n \n
\n )}\n \n )}\n\n \n Additional Configuration for KES\n \n \n \n setEnabledCustomCertificates(!enabledCustomCertificates)\n }\n label={\"Custom Certificates\"}\n />\n \n {enabledCustomCertificates && (\n \n \n
\n \n Encryption server certificates\n \n {kesServerTLSCertificateSecret ? (\n \n removeCertificate(kesServerTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n setKESServerCertificate({\n encoded_key: encodedValue || \"\",\n id: kesServerCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kesServerCertificate?.cert || \"\",\n encoded_cert:\n kesServerCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n value={kesServerCertificate?.key}\n />\n {\n setKESServerCertificate({\n encoded_key:\n kesServerCertificate?.encoded_key || \"\",\n id: kesServerCertificate?.id || \"\",\n key: kesServerCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n value={kesServerCertificate?.cert}\n />\n \n )}\n
\n
\n \n
\n \n MinIO mTLS certificates (connection between MinIO and the\n Encryption server)\n \n {minioMTLSCertificateSecret ? (\n \n removeCertificate(minioMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n setMinioMTLSCertificate({\n encoded_key: encodedValue || \"\",\n id: minioMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: minioMTLSCertificate?.cert || \"\",\n encoded_cert:\n minioMTLSCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n value={minioMTLSCertificate?.key}\n />\n {\n setMinioMTLSCertificate({\n encoded_key:\n minioMTLSCertificate?.encoded_key || \"\",\n id: minioMTLSCertificate?.id || \"\",\n key: minioMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n value={minioMTLSCertificate?.cert}\n />\n \n )}\n
\n
\n \n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {kmsMTLSCertificateSecret ? (\n \n removeCertificate(kmsMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n setKmsMTLSCertificate({\n encoded_key: encodedValue || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kmsMTLSCertificate?.cert || \"\",\n encoded_cert:\n kmsMTLSCertificate?.encoded_cert || \"\",\n });\n }}\n accept=\".key,.pem\"\n id=\"kms_mtls_key\"\n name=\"kms_mtls_key\"\n label=\"Key\"\n value={kmsMTLSCertificate?.key}\n />\n \n setKmsMTLSCertificate({\n encoded_key:\n kmsMTLSCertificate?.encoded_key || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: kmsMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n })\n }\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_cert\"\n name=\"kms_mtls_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate?.cert || \"\"}\n />\n \n )}\n {kmsCACertificateSecret ? (\n \n removeCertificate(kmsCACertificateSecret)\n }\n />\n ) : (\n \n setKmsCACertificate({\n encoded_key: kmsCACertificate?.encoded_key || \"\",\n id: kmsCACertificate?.id || \"\",\n key: kmsCACertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n })\n }\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_ca\"\n name=\"kms_mtls_ca\"\n label=\"CA\"\n value={kmsCACertificate?.cert || \"\"}\n />\n )}\n
\n
\n
\n )}\n \n ) =>\n setImage(e.target.value)\n }\n label=\"Image\"\n tooltip=\"KES container image\"\n placeholder=\"minio/kes:2023-08-19T17-27-47Z\"\n value={image}\n />\n \n \n ) =>\n setReplicas(e.target.value)\n }\n label=\"Replicas\"\n tooltip=\"Numer of KES pod replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n \n \n SecurityContext for KES\n \n \n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsUser: e.target.value,\n });\n }}\n label=\"Run As User\"\n value={securityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsGroup: e.target.value,\n });\n }}\n label=\"Run As Group\"\n value={securityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n fsGroup: e.target.value,\n });\n }}\n label=\"FsGroup\"\n value={securityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setSecurityContext({\n ...securityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n \n )}\n \n setConfirmOpen(true)}\n label={\"Save\"}\n />\n \n \n
\n );\n};\n\nexport default withStyles(styles)(TenantEncryption);\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n"],"names":["withStyles","theme","createStyles","_objectSpread","fieldBasic","_ref","value","_ref$label","label","_ref$tooltip","tooltip","_ref$mode","mode","classes","onBeforeChange","_ref$editorHeight","readOnly","editorHeight","_jsxs","React","children","_jsx","Grid","item","xs","sx","marginBottom","InputLabel","className","inputLabel","tooltipContainer","Tooltip","title","placement","HelpIcon","style","maxHeight","overflow","border","CodeEditor","language","onChange","evn","target","id","padding","fontSize","backgroundColor","fontFamily","minHeight","color","background","borderTop","Box","display","alignItems","paddingRight","justifyContent","height","width","marginLeft","TooltipWrapper","CopyToClipboard","text","Button","type","icon","CopyIcon","variant","tooltipHelper","valueString","maxWidth","whiteSpace","textOverflow","marginTop","fileInputField","margin","flexFlow","fileInputStyles","fontWeight","textBoxContainer","paddingLeft","name","_ref$disabled","disabled","required","_ref$error","error","_ref$accept","accept","_ref$value","_useState","useState","_useState2","_slicedToArray","showFileSelector","setShowSelector","concat","fieldBottom","fieldContainer","errorInField","htmlFor","fieldLabelError","e","fileName","get","evt","callback","file","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","component","onClick","disableRipple","disableFocusRipple","size","CancelIcon","ErrorBlock","errorMessage","fileReselect","AttachFileIcon","FormHr","styled","_templateObject","_taggedTemplateLiteral","certificateIcon","float","paddingTop","certificateInfo","certificateWrapper","userSelect","borderRadius","certificateExpiry","flexWrap","certificateDomains","certificatesList","textTransform","overflowY","certificatesListItem","borderBottom","minWidth","marginRight","opacity","certificateExpiring","certificateExpired","_ref$onDelete","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","listStyle","maximumFractionDigits","minutes","Chip","Container","CertificateIcon","Typography","gutterBottom","EventBusyIcon","toFormat","AccessTimeIcon","Divider","List","map","dom","index","ListItem","ListItemAvatar","LanguageIcon","ListItemText","primary","PolicyItem","_ref$items","items","_ref$title","Fragment","gap","iTxt","_ref2","_ref2$policies","policies","fmtPolicies","arguments","undefined","Object","keys","polName","policyConfig","identities","paths","allow","deny","getPolicyData","withBorders","pConf","borderLeft","borderRight","tenantDetailsStyles","spacingUtils","containerForHeader","createTenantCommon","formFieldStyles","modalBasic","wizardCommon","warningBlock","_vaultConfiguration$a9","_vaultConfiguration$a10","_vaultConfiguration$a11","_vaultConfiguration$a12","_vaultConfiguration$s4","_azureConfiguration$k15","_azureConfiguration$k17","_azureConfiguration$k18","_azureConfiguration$k20","_azureConfiguration$k21","_azureConfiguration$k23","_azureConfiguration$k24","_gcpConfiguration$sec11","_gcpConfiguration$sec12","_gcpConfiguration$sec13","_gcpConfiguration$sec14","_awsConfiguration$sec16","_awsConfiguration$sec17","_awsConfiguration$sec18","_awsConfiguration$sec20","_awsConfiguration$sec21","_awsConfiguration$sec23","_awsConfiguration$sec24","_awsConfiguration$sec26","_awsConfiguration$sec27","_gemaltoConfiguration17","_gemaltoConfiguration19","_gemaltoConfiguration20","_gemaltoConfiguration22","_gemaltoConfiguration23","_gemaltoConfiguration25","_gemaltoConfiguration26","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","editRawConfiguration","setEditRawConfiguration","_useState3","_useState4","encryptionRawConfiguration","setEncryptionRawConfiguration","_useState5","_useState6","encryptionEnabled","setEncryptionEnabled","_useState7","_useState8","encryptionType","setEncryptionType","_useState9","_useState10","replicas","setReplicas","_useState11","_useState12","image","setImage","_useState13","_useState14","refreshEncryptionInfo","setRefreshEncryptionInfo","_useState15","fsGroup","fsGroupChangePolicy","runAsGroup","runAsNonRoot","runAsUser","_useState16","securityContext","setSecurityContext","_useState17","_useState18","setPolicies","_useState19","_useState20","vaultConfiguration","setVaultConfiguration","_useState21","_useState22","awsConfiguration","setAWSConfiguration","_useState23","_useState24","gemaltoConfiguration","setGemaltoConfiguration","_useState25","_useState26","azureConfiguration","setAzureConfiguration","_useState27","_useState28","gcpConfiguration","setGCPConfiguration","_useState29","_useState30","enabledCustomCertificates","setEnabledCustomCertificates","_useState31","_useState32","updatingEncryption","setUpdatingEncryption","_useState33","_useState34","kesServerTLSCertificateSecret","setKesServerTLSCertificateSecret","_useState35","_useState36","minioMTLSCertificateSecret","setMinioMTLSCertificateSecret","_useState37","_useState38","minioMTLSCertificate","setMinioMTLSCertificate","_useState39","_useState40","certificatesToBeRemoved","setCertificatesToBeRemoved","_useState41","_useState42","showVaultAppRoleID","setShowVaultAppRoleID","_useState43","_useState44","isFormValid","setIsFormValid","_useState45","_useState46","showVaultAppRoleSecret","setShowVaultAppRoleSecret","_useState47","_useState48","kmsMTLSCertificateSecret","setKmsMTLSCertificateSecret","_useState49","_useState50","kmsCACertificateSecret","setKMSCACertificateSecret","_useState51","_useState52","kmsMTLSCertificate","setKmsMTLSCertificate","_useState53","_useState54","kesServerCertificate","setKESServerCertificate","_useState55","_useState56","kmsCACertificate","setKmsCACertificate","_useState57","_useState58","validationErrors","setValidationErrors","cleanValidation","fieldName","clearValidationError","_useState59","_useState60","confirmOpen","setConfirmOpen","useEffect","encryptionValidation","_vaultConfiguration$a","_vaultConfiguration$a2","_vaultConfiguration$s","_vaultConfiguration$s2","_vaultConfiguration$a3","_vaultConfiguration$a4","_awsConfiguration$sec","_awsConfiguration$sec2","_awsConfiguration$sec3","_awsConfiguration$sec4","_awsConfiguration$sec5","_awsConfiguration$sec6","_gemaltoConfiguration","_gemaltoConfiguration2","_gemaltoConfiguration3","_gemaltoConfiguration4","_gemaltoConfiguration5","_gemaltoConfiguration6","_gemaltoConfiguration7","_gemaltoConfiguration8","_gemaltoConfiguration9","_azureConfiguration$k","_azureConfiguration$k2","_azureConfiguration$k3","_azureConfiguration$k4","_azureConfiguration$k5","_azureConfiguration$k6","_azureConfiguration$k7","fieldKey","customValidation","parseInt","customValidationMessage","_toConsumableArray","encoded_key","encoded_cert","endpoint","approle","secret","status","ping","retry","secretsmanager","region","credentials","accesskey","secretkey","keysecure","token","domain","keyvault","tenant_id","client_id","client_secret","commonVal","commonFormValidation","fetchEncryptionInfo","namespace","api","invoke","then","resp","raw","vault","aws","gemalto","gcp","azure","server_tls","minio_mtls","kms_mtls","crt","ca","catch","err","console","removeCertificate","ConfirmDialog","isOpen","confirmText","cancelText","onClose","onConfirm","_gemaltoConfiguration10","_gemaltoConfiguration11","_gemaltoConfiguration12","_gemaltoConfiguration13","_gemaltoConfiguration14","_gemaltoConfiguration15","_gemaltoConfiguration16","_awsConfiguration$sec7","_awsConfiguration$sec8","_awsConfiguration$sec9","_awsConfiguration$sec10","_awsConfiguration$sec11","_awsConfiguration$sec12","_awsConfiguration$sec13","_awsConfiguration$sec14","_awsConfiguration$sec15","_azureConfiguration$k8","_azureConfiguration$k9","_azureConfiguration$k10","_azureConfiguration$k11","_azureConfiguration$k12","_azureConfiguration$k13","_azureConfiguration$k14","_gcpConfiguration$sec","_gcpConfiguration$sec2","_gcpConfiguration$sec3","_gcpConfiguration$sec4","_gcpConfiguration$sec5","_gcpConfiguration$sec6","_gcpConfiguration$sec7","_gcpConfiguration$sec8","_gcpConfiguration$sec9","_gcpConfiguration$sec10","_vaultConfiguration$a5","_vaultConfiguration$a6","_vaultConfiguration$a7","_vaultConfiguration$a8","_vaultConfiguration$s3","insertEncrypt","kmskey","secretmanager","project_id","client_email","private_key_id","private_key","engine","prefix","encryptionServerKeyPair","encryptionClientKeyPair","encryptionKMSCertificates","key","kmsMTLSKeyPair","kmsCAInsert","dataSend","secretsToBeDeleted","setErrorSnackMessage","confirmationContent","DialogContentText","WarnIcon","container","spacing","SectionTitle","textAlign","FormSwitchWrapper","indicatorLabels","checked","description","Tabs","newValue","indicatorColor","textColor","scrollButtons","Tab","CodeMirrorWrapper","editor","KMSPolicyInfo","encryptionTypeOptions","RadioGroupSelector","currentSelection","selectorOptions","InputBoxWrapper","fieldGroup","descriptionText","formFieldRow","overlayIcon","VisibilityOffIcon","RemoveRedEyeIcon","overlayAction","min","_azureConfiguration$k16","_azureConfiguration$k19","_azureConfiguration$k22","_awsConfiguration$sec19","_awsConfiguration$sec22","_awsConfiguration$sec25","_gemaltoConfiguration18","_gemaltoConfiguration21","_gemaltoConfiguration24","TLSCertificate","FileSelector","encodedValue","cert","placeholder","multiContainer","responsiveContainer","rightSpacer","_theme$palette","errorBlock","palette","main","_ref$withBreak","withBreak"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/379.56027397.chunk.js b/web-app/build/static/js/379.56027397.chunk.js deleted file mode 100644 index cc3781086e7..00000000000 --- a/web-app/build/static/js/379.56027397.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[379],{45902:function(e,n,s){var t=s(1413),l=(s(72791),s(36314)),o=s(80184);n.Z=function(e){var n=e.label,s=void 0===n?null:n,i=e.value,r=void 0===i?"-":i,a=e.orientation,u=void 0===a?"column":a,c=e.stkProps,d=void 0===c?{}:c,x=e.lblProps,v=void 0===x?{}:x,f=e.valProps,m=void 0===f?{}:f;return(0,o.jsxs)(l.Z,(0,t.Z)((0,t.Z)({direction:{xs:"column",sm:u}},d),{},{children:[(0,o.jsx)("label",(0,t.Z)((0,t.Z)({style:{marginRight:5,fontWeight:600}},v),{},{children:s})),(0,o.jsx)("label",(0,t.Z)((0,t.Z)({style:{marginRight:5,fontWeight:500}},m),{},{children:r}))]}))}},51379:function(e,n,s){s.r(n),s.d(n,{default:function(){return S}});var t=s(1413),l=s(72791),o=s(78687),i=s(57689),r=s(11135),a=s(25787),u=s(23814),c=s(61889),d=s(41320),x=s(29439),v=s(27391),f=s(63466),m=s(75952),j=s(3216),p=s(17238),h=s(27454),Z=s(72455),g=s(45248),y=s(80184),b=(0,Z.Z)((function(e){return(0,r.Z)((0,t.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},u.oZ),u.OR),u.VX),u.Bz))})),C=function(e){var n=e.setPoolDetailsView,s=(0,d.TL)(),t=(0,i.s0)(),r=b(),a=(0,o.v9)((function(e){return e.tenants.loadingTenant})),u=(0,o.v9)((function(e){return e.tenants.tenantInfo})),Z=(0,l.useState)([]),C=(0,x.Z)(Z,2),A=C[0],P=C[1],N=(0,l.useState)(""),_=(0,x.Z)(N,2),F=_[0],k=_[1];(0,l.useEffect)((function(){if(u){var e=u.pools?u.pools:[];P(e)}}),[u]);var T=A.filter((function(e){var n;return!(null===(n=e.name)||void 0===n||!n.toLowerCase().includes(F.toLowerCase()))})),R=[{type:"view",onClick:function(e){s((0,p.Lm)(e.name)),n()}}];return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)(c.ZP,{item:!0,xs:12,className:r.actionsTray,children:[(0,y.jsx)(v.Z,{placeholder:"Filter",className:r.searchField,id:"search-resource",label:"",onChange:function(e){k(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:(0,y.jsx)(f.Z,{position:"start",children:(0,y.jsx)(m.W1M,{})})},variant:"standard"}),(0,y.jsx)(h.Z,{tooltip:"Expand Tenant",children:(0,y.jsx)(m.zxk,{id:"expand-tenant",label:"Expand Tenant",onClick:function(){t("/namespaces/".concat((null===u||void 0===u?void 0:u.namespace)||"","/tenants/").concat((null===u||void 0===u?void 0:u.name)||"","/add-pool"))},icon:(0,y.jsx)(m.dtP,{}),variant:"callAction"})})]}),(0,y.jsx)(c.ZP,{item:!0,xs:12,className:r.tableBlock,children:(0,y.jsx)(j.Z,{itemActions:R,columns:[{label:"Name",elementKey:"name"},{label:"Total Capacity",elementKey:"capacity",renderFullObject:!0,renderFunction:function(e){return(0,g.l5)(e.volumes_per_server*e.servers*e.volume_configuration.size)}},{label:"Servers",elementKey:"servers"},{label:"Volumes/Server",elementKey:"volumes_per_server"}],isLoading:a,records:T,entityName:"Servers",idField:"name",customEmptyMessage:"No Pools found"})})]})},A=s(64554),P=s(45902),N=s(45987),_=s(36314),F=["children"],k=function(e){var n=e.children,s=void 0===n?null:n,l=(0,N.Z)(e,F);return(0,y.jsx)(_.Z,(0,t.Z)((0,t.Z)({direction:{xs:"column",sm:"row"},justifyContent:"space-between",margin:"5px 0 5px 0",spacing:{xs:1,sm:2,md:4}},l),{},{children:s}))},T={border:"#EAEAEA 1px solid",borderRadius:"3px",padding:"0px 20px",position:"relative"},R={display:"grid",gridTemplateColumns:{xs:"1fr",sm:"2fr 1fr"},gridAutoFlow:{xs:"dense",sm:"row"},gap:2,padding:"15px"},w=function(){var e,n,s,r,a,u,d,x,v,f,j,p=(0,i.s0)(),h=(0,o.v9)((function(e){return e.tenants.tenantInfo})),Z=(0,o.v9)((function(e){return e.tenants.selectedPool}));if(null===h)return(0,y.jsx)(l.Fragment,{});var b=(null===(e=h.pools)||void 0===e?void 0:e.find((function(e){return e.name===Z})))||null;if(null===b)return null;var C="None";b.affinity&&(C=b.affinity.nodeAffinity?"Node Selector":"Default (Pod Anti-Affinity)");var N=function(e){var n=e.title;return(0,y.jsx)(k,{sx:{borderBottom:"1px solid #eaeaea",margin:0,marginBottom:"20px"},children:(0,y.jsx)("h3",{children:n})})};return(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)(c.ZP,{item:!0,xs:12,sx:(0,t.Z)({},T),children:[(0,y.jsx)("div",{style:{position:"absolute",right:20,top:18},children:(0,y.jsx)(m.zxk,{icon:(0,y.jsx)(m.Jpd,{}),onClick:function(){p("/namespaces/".concat((null===h||void 0===h?void 0:h.namespace)||"","/tenants/").concat((null===h||void 0===h?void 0:h.name)||"","/edit-pool"))},label:"Edit Pool",id:"editPool"})}),(0,y.jsx)(N,{title:"Pool Configuration"}),(0,y.jsxs)(A.Z,{sx:(0,t.Z)({},R),children:[(0,y.jsx)(P.Z,{label:"Pool Name",value:b.name}),(0,y.jsx)(P.Z,{label:"Total Volumes",value:b.volumes_per_server}),(0,y.jsx)(P.Z,{label:"Volumes per server",value:b.volumes_per_server}),(0,y.jsx)(P.Z,{label:"Capacity",value:(0,g.l5)(b.volumes_per_server*b.servers*b.volume_configuration.size)}),(0,y.jsx)(P.Z,{label:"Runtime Class Name",value:b.runtimeClassName})]}),(0,y.jsx)(N,{title:"Resources"}),(0,y.jsxs)(A.Z,{sx:(0,t.Z)({},R),children:[b.resources&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(P.Z,{label:"CPU",value:null===(n=b.resources)||void 0===n||null===(s=n.requests)||void 0===s?void 0:s.cpu}),(0,y.jsx)(P.Z,{label:"Memory",value:(0,g.l5)(null===(r=b.resources)||void 0===r||null===(a=r.requests)||void 0===a?void 0:a.memory)})]}),(0,y.jsx)(P.Z,{label:"Volume Size",value:(0,g.l5)(b.volume_configuration.size)}),(0,y.jsx)(P.Z,{label:"Storage Class Name",value:b.volume_configuration.storage_class_name})]}),b.securityContext&&(b.securityContext.runAsNonRoot||b.securityContext.runAsUser||b.securityContext.runAsGroup||b.securityContext.fsGroup)&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,{title:"Security Context"}),(0,y.jsxs)(A.Z,{children:[null!==b.securityContext.runAsNonRoot&&(0,y.jsx)(A.Z,{sx:(0,t.Z)({},R),children:(0,y.jsx)(P.Z,{label:"Run as Non Root",value:b.securityContext.runAsNonRoot?"Yes":"No"})}),(0,y.jsxs)(A.Z,{sx:(0,t.Z)((0,t.Z)({},R),{},{gridTemplateColumns:{xs:"1fr",sm:"2fr 1fr",md:"1fr 1fr 1fr"}}),children:[b.securityContext.runAsUser&&(0,y.jsx)(P.Z,{label:"Run as User",value:b.securityContext.runAsUser}),b.securityContext.runAsGroup&&(0,y.jsx)(P.Z,{label:"Run as Group",value:b.securityContext.runAsGroup}),b.securityContext.fsGroup&&(0,y.jsx)(P.Z,{label:"FsGroup",value:b.securityContext.fsGroup})]})]})]}),(0,y.jsx)(N,{title:"Affinity"}),(0,y.jsxs)(A.Z,{children:[(0,y.jsxs)(A.Z,{sx:(0,t.Z)({},R),children:[(0,y.jsx)(P.Z,{label:"Type",value:C}),null!==(u=b.affinity)&&void 0!==u&&u.nodeAffinity&&null!==(d=b.affinity)&&void 0!==d&&d.podAntiAffinity?(0,y.jsx)(P.Z,{label:"With Pod Anti affinity",value:"Yes"}):(0,y.jsx)("span",{})]}),(null===(x=b.affinity)||void 0===x?void 0:x.nodeAffinity)&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,{title:"Labels"}),(0,y.jsx)("ul",{children:null===(v=b.affinity)||void 0===v||null===(f=v.nodeAffinity)||void 0===f||null===(j=f.requiredDuringSchedulingIgnoredDuringExecution)||void 0===j?void 0:j.nodeSelectorTerms.map((function(e){var n;return null===(n=e.matchExpressions)||void 0===n?void 0:n.map((function(e){var n;return(0,y.jsxs)("li",{children:[e.key," - ",null===(n=e.values)||void 0===n?void 0:n.join(", ")]})}))}))})]})]}),b.tolerations&&b.tolerations.length>0&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,{title:"Tolerations"}),(0,y.jsx)(A.Z,{children:(0,y.jsx)("ul",{children:b.tolerations.map((function(e){var n,s;return(0,y.jsx)("li",{children:"Equal"===e.operator?(0,y.jsxs)(l.Fragment,{children:["If ",(0,y.jsx)("strong",{children:e.key})," is equal to"," ",(0,y.jsx)("strong",{children:e.value})," then"," ",(0,y.jsx)("strong",{children:e.effect})," after"," ",(0,y.jsx)("strong",{children:(null===(n=e.tolerationSeconds)||void 0===n?void 0:n.seconds)||0})," ","seconds"]}):(0,y.jsxs)(l.Fragment,{children:["If ",(0,y.jsx)("strong",{children:e.key})," exists then"," ",(0,y.jsx)("strong",{children:e.effect})," after"," ",(0,y.jsx)("strong",{children:(null===(s=e.tolerationSeconds)||void 0===s?void 0:s.seconds)||0})," ","seconds"]})})}))})})]})]})})},S=(0,a.Z)((function(e){return(0,r.Z)((0,t.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},u.oZ),u.OR),u.VX),u.Bz))}))((function(e){var n=e.classes,s=(0,d.TL)(),t=(0,i.s0)(),r=(0,i.TH)().pathname,a=void 0===r?"":r,u=(0,o.v9)((function(e){return e.tenants.selectedPool})),x=(0,o.v9)((function(e){return e.tenants.poolDetailsOpen}));return(0,y.jsxs)(l.Fragment,{children:[x&&(0,y.jsx)(c.ZP,{item:!0,xs:12,children:(0,y.jsx)(m.hbI,{label:"Pools list",onClick:function(){t(a),s((0,p.AH)(!1))}})}),(0,y.jsx)("h1",{className:n.sectionTitle,children:x?"Pool Details - ".concat(u||""):"Pools"}),(0,y.jsx)(c.ZP,{container:!0,children:x?(0,y.jsx)(w,{}):(0,y.jsx)(C,{setPoolDetailsView:function(){s((0,p.AH)(!0))}})})]})}))}}]); -//# sourceMappingURL=379.56027397.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/379.56027397.chunk.js.map b/web-app/build/static/js/379.56027397.chunk.js.map deleted file mode 100644 index 9a6b8517682..00000000000 --- a/web-app/build/static/js/379.56027397.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/379.56027397.chunk.js","mappings":"uJAgCA,IApBuB,SAAHA,GAOQ,IAADC,EAAAD,EANzBE,MAAAA,OAAK,IAAAD,EAAG,KAAIA,EAAAE,EAAAH,EACZI,MAAAA,OAAK,IAAAD,EAAG,IAAGA,EAAAE,EAAAL,EACXM,YAAAA,OAAW,IAAAD,EAAG,SAAQA,EAAAE,EAAAP,EACtBQ,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAT,EACbU,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAX,EACbY,SAAAA,OAAQ,IAAAD,EAAG,CAAC,EAACA,EAEb,OACEE,EAAAA,EAAAA,MAACC,EAAAA,GAAKC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACC,UAAW,CAAEC,GAAI,SAAUC,GAAIZ,IAAmBE,GAAQ,IAAAW,SAAA,EAC/DC,EAAAA,EAAAA,KAAA,SAAAL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAOM,MAAO,CAAEC,YAAa,EAAGC,WAAY,MAAWb,GAAQ,IAAAS,SAC5DjB,MAEHkB,EAAAA,EAAAA,KAAA,SAAAL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAAOM,MAAO,CAAEC,YAAa,EAAGC,WAAY,MAAWX,GAAQ,IAAAO,SAC5Df,QAIT,C,wRCaMoB,GAAYC,EAAAA,EAAAA,IAAW,SAACC,GAAY,OACxCC,EAAAA,EAAAA,IAAYZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACTa,EAAAA,IACAC,EAAAA,IACAC,EAAAA,IACAC,EAAAA,IACH,IA6GJ,EA1GqB,SAAH/B,GAA+C,IAAzCgC,EAAkBhC,EAAlBgC,mBAChBC,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MACXC,EAAUb,IAEVc,GAAgBC,EAAAA,EAAAA,KACpB,SAACC,GAAe,OAAKA,EAAMC,QAAQH,aAAa,IAE5CI,GAASH,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAAKA,EAAMC,QAAQE,UAAU,IAExEC,GAA0BC,EAAAA,EAAAA,UAAiB,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAvCI,EAAKF,EAAA,GAAEG,EAAQH,EAAA,GACtBI,GAA4BL,EAAAA,EAAAA,UAAiB,IAAGM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAAzCE,EAAMD,EAAA,GAAEE,EAASF,EAAA,IAExBG,EAAAA,EAAAA,YAAU,WACR,GAAIZ,EAAQ,CACV,IAAMa,EAAYb,EAAOM,MAAaN,EAAOM,MAAZ,GACjCC,EAASM,EACX,CACF,GAAG,CAACb,IAEJ,IAAMc,EAAgBR,EAAMI,QAAO,SAACK,GAAU,IAADC,EAC3C,QAAa,QAAbA,EAAID,EAAKE,YAAI,IAAAD,IAATA,EAAWE,cAAcC,SAAST,EAAOQ,eAK/C,IAEME,EAAc,CAClB,CACEC,KAAM,OACNC,QAAS,SAACC,GACRhC,GAASiC,EAAAA,EAAAA,IAAgBD,EAAcN,OACvC3B,GACF,IAIJ,OACEnB,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,EACPN,EAAAA,EAAAA,MAACuD,EAAAA,GAAI,CAACC,MAAI,EAACpD,GAAI,GAAIqD,UAAWjC,EAAQR,YAAYV,SAAA,EAChDC,EAAAA,EAAAA,KAACmD,EAAAA,EAAS,CACRC,YAAY,SACZF,UAAWjC,EAAQoC,YACnBC,GAAG,kBACHxE,MAAM,GACNyE,SAAU,SAACC,GACTvB,EAAUuB,EAAMC,OAAOzE,MACzB,EACA0E,WAAY,CACVC,kBAAkB,EAClBC,gBACE5D,EAAAA,EAAAA,KAAC6D,EAAAA,EAAc,CAACC,SAAS,QAAO/D,UAC9BC,EAAAA,EAAAA,KAAC+D,EAAAA,IAAU,OAIjBC,QAAQ,cAGVhE,EAAAA,EAAAA,KAACiE,EAAAA,EAAc,CAACC,QAAS,gBAAgBnE,UACvCC,EAAAA,EAAAA,KAACmE,EAAAA,IAAM,CACLb,GAAI,gBACJxE,MAAO,gBACP8D,QAAS,WACP7B,EAAS,eAADqD,QACe,OAAN9C,QAAM,IAANA,OAAM,EAANA,EAAQ+C,YAAa,GAAE,aAAAD,QAC9B,OAAN9C,QAAM,IAANA,OAAM,EAANA,EAAQiB,OAAQ,GAAE,aAGxB,EACA+B,MAAMtE,EAAAA,EAAAA,KAACuE,EAAAA,IAAO,IACdP,QAAS,qBAIfhE,EAAAA,EAAAA,KAACgD,EAAAA,GAAI,CAACC,MAAI,EAACpD,GAAI,GAAIqD,UAAWjC,EAAQuD,WAAWzE,UAC/CC,EAAAA,EAAAA,KAACyE,EAAAA,EAAY,CACXC,YAAahC,EACbiC,QAAS,CACP,CAAE7F,MAAO,OAAQ8F,WAAY,QAC7B,CACE9F,MAAO,iBACP8F,WAAY,WACZC,kBAAkB,EAClBC,eAAgB,SAACC,GAAO,OACtBC,EAAAA,EAAAA,IACED,EAAEE,mBACAF,EAAEG,QACFH,EAAEI,qBAAqBC,KAC1B,GAEL,CAAEtG,MAAO,UAAW8F,WAAY,WAChC,CAAE9F,MAAO,iBAAkB8F,WAAY,uBAEzCS,UAAWnE,EACXoE,QAASlD,EACTmD,WAAW,UACXC,QAAQ,OACRC,mBAAmB,uBAK7B,E,2DCtIA,EAnBiB,SAAH7G,GAMP,IAAD8G,EAAA9G,EALJmB,SAAAA,OAAQ,IAAA2F,EAAG,KAAIA,EACZC,GAASC,EAAAA,EAAAA,GAAAhH,EAAAiH,GAKZ,OACE7F,EAAAA,EAAAA,KAACN,EAAAA,GAAKC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACJC,UAAW,CAAEC,GAAI,SAAUC,GAAI,OAC/BgG,eAAe,gBACfC,OAAQ,cACRC,QAAS,CAAEnG,GAAI,EAAGC,GAAI,EAAGmG,GAAI,IACzBN,GAAS,IAAA5F,SAEZA,IAGP,ECOMmG,EAAgB,CACpBC,OAAQ,oBACRC,aAAc,MACdC,QAAS,WACTvC,SAAU,YAGNwC,EAA4B,CAChCC,QAAS,OACTC,oBAAqB,CAAE3G,GAAI,MAAOC,GAAI,WACtC2G,aAAc,CAAE5G,GAAI,QAASC,GAAI,OACjC4G,IAAK,EACLL,QAAS,QA0OX,EAvOoB,WAAO,IAADM,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAClBtG,GAAWC,EAAAA,EAAAA,MAEXM,GAASH,EAAAA,EAAAA,KAAY,SAACC,GAAe,OAAKA,EAAMC,QAAQE,UAAU,IAClE+F,GAAenG,EAAAA,EAAAA,KACnB,SAACC,GAAe,OAAKA,EAAMC,QAAQiG,YAAY,IAEjD,GAAe,OAAXhG,EACF,OAAOtB,EAAAA,EAAAA,KAAC+C,EAAAA,SAAQ,IAGlB,IAAMwE,GACQ,QAAZZ,EAAArF,EAAOM,aAAK,IAAA+E,OAAA,EAAZA,EAAca,MAAK,SAACnF,GAAI,OAAKA,EAAKE,OAAS+E,CAAY,MAAK,KAE9D,GAAwB,OAApBC,EACF,OAAO,KAGT,IAAIE,EAAe,OAEfF,EAAgBG,WAEhBD,EADEF,EAAgBG,SAASC,aACZ,gBAEA,+BAInB,IAAMC,EAAgB,SAAHhJ,GAAsC,IAAhCiJ,EAAKjJ,EAALiJ,MACvB,OACE7H,EAAAA,EAAAA,KAAC8H,EAAQ,CACPC,GAAI,CACFC,aAAc,oBACdjC,OAAQ,EACRkC,aAAc,QACdlI,UAEFC,EAAAA,EAAAA,KAAA,MAAAD,SAAK8H,KAGX,EAEA,OACE7H,EAAAA,EAAAA,KAAC+C,EAAAA,SAAQ,CAAAhD,UACPN,EAAAA,EAAAA,MAACuD,EAAAA,GAAI,CAACC,MAAI,EAACpD,GAAI,GAAIkI,IAAEpI,EAAAA,EAAAA,GAAA,GAAOuG,GAAgBnG,SAAA,EAC1CC,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAE6D,SAAU,WAAYoE,MAAO,GAAIC,IAAK,IAAKpI,UACvDC,EAAAA,EAAAA,KAACmE,EAAAA,IAAM,CACLG,MAAMtE,EAAAA,EAAAA,KAACoI,EAAAA,IAAc,IACrBxF,QAAS,WACP7B,EAAS,eAADqD,QACe,OAAN9C,QAAM,IAANA,OAAM,EAANA,EAAQ+C,YAAa,GAAE,aAAAD,QAC9B,OAAN9C,QAAM,IAANA,OAAM,EAANA,EAAQiB,OAAQ,GAAE,cAGxB,EACAzD,MAAO,YACPwE,GAAI,gBAGRtD,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,wBACtBpI,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CAACN,IAAEpI,EAAAA,EAAAA,GAAA,GAAO2G,GAA4BvG,SAAA,EACxCC,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CAACxJ,MAAO,YAAaE,MAAOuI,EAAgBhF,QAC3DvC,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,gBACPE,MAAOuI,EAAgBtC,sBAEzBjF,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,qBACPE,MAAOuI,EAAgBtC,sBAEzBjF,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,WACPE,OAAOgG,EAAAA,EAAAA,IACLuC,EAAgBtC,mBACdsC,EAAgBrC,QAChBqC,EAAgBpC,qBAAqBC,SAG3CpF,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,qBACPE,MAAOuI,EAAgBgB,uBAG3BvI,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,eACtBpI,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CAACN,IAAEpI,EAAAA,EAAAA,GAAA,GAAO2G,GAA4BvG,SAAA,CACvCwH,EAAgBiB,YACf/I,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,EACPC,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,MACPE,MAAgC,QAA3B4H,EAAEW,EAAgBiB,iBAAS,IAAA5B,GAAU,QAAVC,EAAzBD,EAA2B6B,gBAAQ,IAAA5B,OAAV,EAAzBA,EAAqC6B,OAE9C1I,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,SACPE,OAAOgG,EAAAA,EAAAA,IACoB,QADR8B,EACjBS,EAAgBiB,iBAAS,IAAA1B,GAAU,QAAVC,EAAzBD,EAA2B2B,gBAAQ,IAAA1B,OAAV,EAAzBA,EAAqC4B,cAK7C3I,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,cACPE,OAAOgG,EAAAA,EAAAA,IAAauC,EAAgBpC,qBAAqBC,SAE3DpF,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,qBACPE,MAAOuI,EAAgBpC,qBAAqByD,wBAG/CrB,EAAgBsB,kBACdtB,EAAgBsB,gBAAgBC,cAC/BvB,EAAgBsB,gBAAgBE,WAChCxB,EAAgBsB,gBAAgBG,YAChCzB,EAAgBsB,gBAAgBI,WAChCxJ,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,EACPC,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,sBACtBpI,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CAAAtI,SAAA,CACgD,OAAjDwH,EAAgBsB,gBAAgBC,eAC/B9I,EAAAA,EAAAA,KAACqI,EAAAA,EAAG,CAACN,IAAEpI,EAAAA,EAAAA,GAAA,GAAO2G,GAA4BvG,UACxCC,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,kBACPE,MACEuI,EAAgBsB,gBAAgBC,aAC5B,MACA,UAKZrJ,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CACFN,IAAEpI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACG2G,GAAyB,IAC5BE,oBAAqB,CACnB3G,GAAI,MACJC,GAAI,UACJmG,GAAI,iBAENlG,SAAA,CAEDwH,EAAgBsB,gBAAgBE,YAC/B/I,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,cACPE,MAAOuI,EAAgBsB,gBAAgBE,YAG1CxB,EAAgBsB,gBAAgBG,aAC/BhJ,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,eACPE,MAAOuI,EAAgBsB,gBAAgBG,aAG1CzB,EAAgBsB,gBAAgBI,UAC/BjJ,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CACbxJ,MAAO,UACPE,MAAOuI,EAAgBsB,gBAAgBI,oBAOrDjJ,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,cACtBpI,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CAAAtI,SAAA,EACFN,EAAAA,EAAAA,MAAC4I,EAAAA,EAAG,CAACN,IAAEpI,EAAAA,EAAAA,GAAA,GAAO2G,GAA4BvG,SAAA,EACxCC,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CAACxJ,MAAO,OAAQE,MAAOyI,IACb,QAAxBT,EAAAO,EAAgBG,gBAAQ,IAAAV,GAAxBA,EAA0BW,cACH,QADeV,EACvCM,EAAgBG,gBAAQ,IAAAT,GAAxBA,EAA0BiC,iBACxBlJ,EAAAA,EAAAA,KAACsI,EAAAA,EAAc,CAACxJ,MAAO,yBAA0BE,MAAO,SAExDgB,EAAAA,EAAAA,KAAA,eAGqB,QAAxBkH,EAAAK,EAAgBG,gBAAQ,IAAAR,OAAA,EAAxBA,EAA0BS,gBACzBlI,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,EACPC,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,YACtB7H,EAAAA,EAAAA,KAAA,MAAAD,SAC2B,QAD3BoH,EACGI,EAAgBG,gBAAQ,IAAAP,GAAc,QAAdC,EAAxBD,EAA0BQ,oBAAY,IAAAP,GAAgD,QAAhDC,EAAtCD,EAAwC+B,sDAA8C,IAAA9B,OAA9D,EAAxBA,EAAwF+B,kBAAkBC,KACzG,SAACC,GAA4B,IAADC,EAC1B,OAA4B,QAA5BA,EAAOD,EAAKE,wBAAgB,IAAAD,OAAA,EAArBA,EAAuBF,KAAI,SAACI,GAAS,IAADC,EACzC,OACEjK,EAAAA,EAAAA,MAAA,MAAAM,SAAA,CACG0J,EAAIE,IAAI,MAAc,QAAXD,EAACD,EAAIG,cAAM,IAAAF,OAAA,EAAVA,EAAYG,KAAK,QAGpC,GACF,YAMTtC,EAAgBuC,aACfvC,EAAgBuC,YAAYC,OAAS,IACnCtK,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,EACPC,EAAAA,EAAAA,KAAC4H,EAAa,CAACC,MAAO,iBACtB7H,EAAAA,EAAAA,KAACqI,EAAAA,EAAG,CAAAtI,UACFC,EAAAA,EAAAA,KAAA,MAAAD,SACGwH,EAAgBuC,YAAYT,KAAI,SAACW,GAAa,IAADC,EAAAC,EAC5C,OACElK,EAAAA,EAAAA,KAAA,MAAAD,SACwB,UAArBiK,EAAQG,UACP1K,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,CAAC,OACLC,EAAAA,EAAAA,KAAA,UAAAD,SAASiK,EAAQL,MAAa,eAAa,KAC9C3J,EAAAA,EAAAA,KAAA,UAAAD,SAASiK,EAAQhL,QAAe,QAAM,KACtCgB,EAAAA,EAAAA,KAAA,UAAAD,SAASiK,EAAQI,SAAgB,SAAO,KACxCpK,EAAAA,EAAAA,KAAA,UAAAD,UAC4B,QAAzBkK,EAAAD,EAAQK,yBAAiB,IAAAJ,OAAA,EAAzBA,EAA2BK,UAAW,IAC/B,IAAI,cAIhB7K,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,CAAC,OACLC,EAAAA,EAAAA,KAAA,UAAAD,SAASiK,EAAQL,MAAa,eAAa,KAC9C3J,EAAAA,EAAAA,KAAA,UAAAD,SAASiK,EAAQI,SAAgB,SAAO,KACxCpK,EAAAA,EAAAA,KAAA,UAAAD,UAC4B,QAAzBmK,EAAAF,EAAQK,yBAAiB,IAAAH,OAAA,EAAzBA,EAA2BI,UAAW,IAC/B,IAAI,cAMxB,eAQlB,EClLA,GAAeC,EAAAA,EAAAA,IApDA,SAACjK,GAAY,OAC1BC,EAAAA,EAAAA,IAAYZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACTa,EAAAA,IACAC,EAAAA,IACAC,EAAAA,IACAC,EAAAA,IACF,GA8CL,EA5CqB,SAAH/B,GAAoC,IAA9BqC,EAAOrC,EAAPqC,QAChBJ,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAEsBwJ,GAAbC,EAAAA,EAAAA,MAAlBC,SAAAA,OAAQ,IAAAF,EAAG,GAAEA,EAEflD,GAAenG,EAAAA,EAAAA,KACnB,SAACC,GAAe,OAAKA,EAAMC,QAAQiG,YAAY,IAE3CqD,GAAkBxJ,EAAAA,EAAAA,KACtB,SAACC,GAAe,OAAKA,EAAMC,QAAQsJ,eAAe,IAGpD,OACElL,EAAAA,EAAAA,MAACsD,EAAAA,SAAQ,CAAAhD,SAAA,CACN4K,IACC3K,EAAAA,EAAAA,KAACgD,EAAAA,GAAI,CAACC,MAAI,EAACpD,GAAI,GAAGE,UAChBC,EAAAA,EAAAA,KAAC4K,EAAAA,IAAQ,CACP9L,MAAO,aACP8D,QAAS,WACP7B,EAAS2J,GACT7J,GAASgK,EAAAA,EAAAA,KAAmB,GAC9B,OAIN7K,EAAAA,EAAAA,KAAA,MAAIkD,UAAWjC,EAAQ6J,aAAa/K,SACjC4K,EAAe,kBAAAvG,OAAqBkD,GAAgB,IAAO,WAE9DtH,EAAAA,EAAAA,KAACgD,EAAAA,GAAI,CAAC+H,WAAS,EAAAhL,SACZ4K,GACC3K,EAAAA,EAAAA,KAACgL,EAAW,KAEZhL,EAAAA,EAAAA,KAACiL,EAAY,CACXrK,mBAAoB,WAClBC,GAASgK,EAAAA,EAAAA,KAAmB,GAC9B,QAMZ,G","sources":["screens/Console/Common/UsageBarWrapper/LabelValuePair.tsx","screens/Console/Tenants/TenantDetails/Pools/Details/PoolsListing.tsx","screens/Console/Common/UsageBarWrapper/StackRow.tsx","screens/Console/Tenants/TenantDetails/Pools/Details/PoolDetails.tsx","screens/Console/Tenants/TenantDetails/PoolsSummary.tsx"],"sourcesContent":["import React from \"react\";\nimport { Stack } from \"@mui/material\";\n\ntype LabelValuePairProps = {\n label?: any;\n value?: any;\n orientation?: any;\n stkProps?: any;\n lblProps?: any;\n valProps?: any;\n};\n\nconst LabelValuePair = ({\n label = null,\n value = \"-\",\n orientation = \"column\",\n stkProps = {},\n lblProps = {},\n valProps = {},\n}: LabelValuePairProps) => {\n return (\n \n \n \n \n );\n};\n\nexport default LabelValuePair;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport Grid from \"@mui/material/Grid\";\nimport { TextField } from \"@mui/material\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport { AddIcon, Button, SearchIcon } from \"mds\";\nimport TableWrapper from \"../../../../Common/TableWrapper/TableWrapper\";\nimport { Theme } from \"@mui/material/styles\";\nimport {\n actionsTray,\n containerForHeader,\n tableStyles,\n tenantDetailsStyles,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setSelectedPool } from \"../../../tenantsSlice\";\nimport TooltipWrapper from \"../../../../Common/TooltipWrapper/TooltipWrapper\";\nimport { Pool } from \"../../../../../../api/operatorApi\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { niceBytesInt } from \"../../../../../../common/utils\";\n\ninterface IPoolsSummary {\n setPoolDetailsView: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...actionsTray,\n ...tableStyles,\n ...containerForHeader,\n }),\n);\n\nconst PoolsListing = ({ setPoolDetailsView }: IPoolsSummary) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const classes = useStyles();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const [pools, setPools] = useState([]);\n const [filter, setFilter] = useState(\"\");\n\n useEffect(() => {\n if (tenant) {\n const resPools = !tenant.pools ? [] : tenant.pools;\n setPools(resPools);\n }\n }, [tenant]);\n\n const filteredPools = pools.filter((pool) => {\n if (pool.name?.toLowerCase().includes(filter.toLowerCase())) {\n return true;\n }\n\n return false;\n });\n\n const listActions = [\n {\n type: \"view\",\n onClick: (selectedValue: Pool) => {\n dispatch(setSelectedPool(selectedValue.name!));\n setPoolDetailsView();\n },\n },\n ];\n\n return (\n \n \n {\n setFilter(event.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n variant=\"standard\"\n />\n\n \n {\n navigate(\n `/namespaces/${tenant?.namespace || \"\"}/tenants/${\n tenant?.name || \"\"\n }/add-pool`,\n );\n }}\n icon={}\n variant={\"callAction\"}\n />\n \n \n \n \n niceBytesInt(\n x.volumes_per_server *\n x.servers *\n x.volume_configuration.size,\n ),\n },\n { label: \"Servers\", elementKey: \"servers\" },\n { label: \"Volumes/Server\", elementKey: \"volumes_per_server\" },\n ]}\n isLoading={loadingTenant}\n records={filteredPools}\n entityName=\"Servers\"\n idField=\"name\"\n customEmptyMessage=\"No Pools found\"\n />\n \n \n );\n};\n\nexport default PoolsListing;\n","import React from \"react\";\nimport { Stack } from \"@mui/material\";\n\nconst StackRow = ({\n children = null,\n ...restProps\n}: {\n children?: any;\n [x: string]: any;\n}) => {\n return (\n \n {children}\n \n );\n};\nexport default StackRow;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AppState } from \"../../../../../../store\";\nimport { Box } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport LabelValuePair from \"../../../../Common/UsageBarWrapper/LabelValuePair\";\nimport { niceBytesInt } from \"../../../../../../common/utils\";\nimport StackRow from \"../../../../Common/UsageBarWrapper/StackRow\";\nimport { Button, EditTenantIcon } from \"mds\";\nimport { NodeSelectorTerm } from \"../../../../../../api/operatorApi\";\n\nconst stylingLayout = {\n border: \"#EAEAEA 1px solid\",\n borderRadius: \"3px\",\n padding: \"0px 20px\",\n position: \"relative\",\n};\n\nconst twoColCssGridLayoutConfig = {\n display: \"grid\",\n gridTemplateColumns: { xs: \"1fr\", sm: \"2fr 1fr\" },\n gridAutoFlow: { xs: \"dense\", sm: \"row\" },\n gap: 2,\n padding: \"15px\",\n};\n\nconst PoolDetails = () => {\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const selectedPool = useSelector(\n (state: AppState) => state.tenants.selectedPool,\n );\n if (tenant === null) {\n return ;\n }\n\n const poolInformation =\n tenant.pools?.find((pool) => pool.name === selectedPool) || null;\n\n if (poolInformation === null) {\n return null;\n }\n\n let affinityType = \"None\";\n\n if (poolInformation.affinity) {\n if (poolInformation.affinity.nodeAffinity) {\n affinityType = \"Node Selector\";\n } else {\n affinityType = \"Default (Pod Anti-Affinity)\";\n }\n }\n\n const HeaderSection = ({ title }: { title: string }) => {\n return (\n \n

{title}

\n \n );\n };\n\n return (\n \n \n
\n }\n onClick={() => {\n navigate(\n `/namespaces/${tenant?.namespace || \"\"}/tenants/${\n tenant?.name || \"\"\n }/edit-pool`,\n );\n }}\n label={\"Edit Pool\"}\n id={\"editPool\"}\n />\n
\n \n \n \n \n \n \n \n \n \n \n {poolInformation.resources && (\n \n \n \n \n )}\n \n \n \n {poolInformation.securityContext &&\n (poolInformation.securityContext.runAsNonRoot ||\n poolInformation.securityContext.runAsUser ||\n poolInformation.securityContext.runAsGroup ||\n poolInformation.securityContext.fsGroup) && (\n \n \n \n {poolInformation.securityContext.runAsNonRoot !== null && (\n \n \n \n )}\n \n {poolInformation.securityContext.runAsUser && (\n \n )}\n {poolInformation.securityContext.runAsGroup && (\n \n )}\n {poolInformation.securityContext.fsGroup && (\n \n )}\n \n \n \n )}\n \n \n \n \n {poolInformation.affinity?.nodeAffinity &&\n poolInformation.affinity?.podAntiAffinity ? (\n \n ) : (\n \n )}\n \n {poolInformation.affinity?.nodeAffinity && (\n \n \n
    \n {poolInformation.affinity?.nodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution?.nodeSelectorTerms.map(\n (term: NodeSelectorTerm) => {\n return term.matchExpressions?.map((trm) => {\n return (\n
  • \n {trm.key} - {trm.values?.join(\", \")}\n
  • \n );\n });\n },\n )}\n
\n
\n )}\n
\n {poolInformation.tolerations &&\n poolInformation.tolerations.length > 0 && (\n \n \n \n
    \n {poolInformation.tolerations.map((tolItem) => {\n return (\n
  • \n {tolItem.operator === \"Equal\" ? (\n \n If {tolItem.key} is equal to{\" \"}\n {tolItem.value} then{\" \"}\n {tolItem.effect} after{\" \"}\n \n {tolItem.tolerationSeconds?.seconds || 0}\n {\" \"}\n seconds\n \n ) : (\n \n If {tolItem.key} exists then{\" \"}\n {tolItem.effect} after{\" \"}\n \n {tolItem.tolerationSeconds?.seconds || 0}\n {\" \"}\n seconds\n \n )}\n
  • \n );\n })}\n
\n
\n
\n )}\n
\n
\n );\n};\n\nexport default PoolDetails;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n actionsTray,\n containerForHeader,\n tableStyles,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\n\nimport { AppState, useAppDispatch } from \"../../../../store\";\n\nimport PoolsListing from \"./Pools/Details/PoolsListing\";\nimport PoolDetails from \"./Pools/Details/PoolDetails\";\n\nimport { setOpenPoolDetails } from \"../tenantsSlice\";\nimport { BackLink } from \"mds\";\n\ninterface IPoolsSummary {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...actionsTray,\n ...tableStyles,\n ...containerForHeader,\n });\n\nconst PoolsSummary = ({ classes }: IPoolsSummary) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const { pathname = \"\" } = useLocation();\n\n const selectedPool = useSelector(\n (state: AppState) => state.tenants.selectedPool,\n );\n const poolDetailsOpen = useSelector(\n (state: AppState) => state.tenants.poolDetailsOpen,\n );\n\n return (\n \n {poolDetailsOpen && (\n \n {\n navigate(pathname);\n dispatch(setOpenPoolDetails(false));\n }}\n />\n \n )}\n

\n {poolDetailsOpen ? `Pool Details - ${selectedPool || \"\"}` : \"Pools\"}\n

\n \n {poolDetailsOpen ? (\n \n ) : (\n {\n dispatch(setOpenPoolDetails(true));\n }}\n />\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(PoolsSummary);\n"],"names":["_ref","_ref$label","label","_ref$value","value","_ref$orientation","orientation","_ref$stkProps","stkProps","_ref$lblProps","lblProps","_ref$valProps","valProps","_jsxs","Stack","_objectSpread","direction","xs","sm","children","_jsx","style","marginRight","fontWeight","useStyles","makeStyles","theme","createStyles","tenantDetailsStyles","actionsTray","tableStyles","containerForHeader","setPoolDetailsView","dispatch","useAppDispatch","navigate","useNavigate","classes","loadingTenant","useSelector","state","tenants","tenant","tenantInfo","_useState","useState","_useState2","_slicedToArray","pools","setPools","_useState3","_useState4","filter","setFilter","useEffect","resPools","filteredPools","pool","_pool$name","name","toLowerCase","includes","listActions","type","onClick","selectedValue","setSelectedPool","Fragment","Grid","item","className","TextField","placeholder","searchField","id","onChange","event","target","InputProps","disableUnderline","startAdornment","InputAdornment","position","SearchIcon","variant","TooltipWrapper","tooltip","Button","concat","namespace","icon","AddIcon","tableBlock","TableWrapper","itemActions","columns","elementKey","renderFullObject","renderFunction","x","niceBytesInt","volumes_per_server","servers","volume_configuration","size","isLoading","records","entityName","idField","customEmptyMessage","_ref$children","restProps","_objectWithoutProperties","_excluded","justifyContent","margin","spacing","md","stylingLayout","border","borderRadius","padding","twoColCssGridLayoutConfig","display","gridTemplateColumns","gridAutoFlow","gap","_tenant$pools","_poolInformation$reso","_poolInformation$reso2","_poolInformation$reso3","_poolInformation$reso4","_poolInformation$affi","_poolInformation$affi2","_poolInformation$affi3","_poolInformation$affi4","_poolInformation$affi5","_poolInformation$affi6","selectedPool","poolInformation","find","affinityType","affinity","nodeAffinity","HeaderSection","title","StackRow","sx","borderBottom","marginBottom","right","top","EditTenantIcon","Box","LabelValuePair","runtimeClassName","resources","requests","cpu","memory","storage_class_name","securityContext","runAsNonRoot","runAsUser","runAsGroup","fsGroup","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","nodeSelectorTerms","map","term","_term$matchExpression","matchExpressions","trm","_trm$values","key","values","join","tolerations","length","tolItem","_tolItem$tolerationSe","_tolItem$tolerationSe2","operator","effect","tolerationSeconds","seconds","withStyles","_useLocation$pathname","useLocation","pathname","poolDetailsOpen","BackLink","setOpenPoolDetails","sectionTitle","container","PoolDetails","PoolsListing"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/384.1367a4bf.chunk.js b/web-app/build/static/js/384.1367a4bf.chunk.js new file mode 100644 index 00000000000..dc90e2b7b75 --- /dev/null +++ b/web-app/build/static/js/384.1367a4bf.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[384],{9114:(e,t,n)=>{n.d(t,{Z:()=>a});n(2791);var s=n(9945),o=n(184);const a=e=>{let{placeholder:t="",onChange:n,overrideClass:a,value:l,id:i="search-resource",label:r="",sx:c}=e;return(0,o.jsx)(s.Wzg,{placeholder:t,className:a||"",id:i,label:r,onChange:e=>{n(e.target.value)},value:l,startIcon:(0,o.jsx)(s.W1M,{}),sx:c})}},5450:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(2791),o=n(9945),a=n(184);const l=e=>{const{event:t}=e,[n,l]=s.useState(!1);return(0,a.jsxs)(s.Fragment,{children:[(0,a.jsxs)(o.SCH,{sx:{cursor:"pointer"},children:[(0,a.jsx)(o.bil,{scope:"row",onClick:()=>l(!n),sx:{borderBottom:0},children:t.event_type}),(0,a.jsx)(o.pj1,{onClick:()=>l(!n),sx:{borderBottom:0},children:t.reason}),(0,a.jsx)(o.pj1,{onClick:()=>l(!n),sx:{borderBottom:0},children:t.seen}),(0,a.jsx)(o.pj1,{onClick:()=>l(!n),sx:{borderBottom:0},children:t.message.length>=30?"".concat(t.message.slice(0,30),"..."):t.message}),(0,a.jsx)(o.pj1,{onClick:()=>l(!n),sx:{borderBottom:0},children:n?(0,a.jsx)(o.ZyT,{}):(0,a.jsx)(o.ASC,{})})]}),(0,a.jsx)(o.SCH,{children:(0,a.jsx)(o.pj1,{style:{paddingBottom:0,paddingTop:0},colSpan:5,children:n&&(0,a.jsx)(o.xuv,{useBackground:!0,sx:{padding:10,marginBottom:10},children:t.message})})})]})},i=e=>{let{events:t,loading:n}=e;return n?(0,a.jsx)(o.kod,{}):(0,a.jsx)(o.xuv,{withBorders:!0,customBorderPadding:"0px",children:(0,a.jsxs)(o.iA_,{"aria-label":"collapsible table",children:[(0,a.jsx)(o.ssF,{children:(0,a.jsxs)(o.SCH,{children:[(0,a.jsx)(o.pj1,{children:"Type"}),(0,a.jsx)(o.pj1,{children:"Reason"}),(0,a.jsx)(o.pj1,{children:"Age"}),(0,a.jsx)(o.pj1,{children:"Message"}),(0,a.jsx)(o.pj1,{})]})}),(0,a.jsx)(o.RMI,{children:t.map((e=>(0,a.jsx)(l,{event:e},"".concat(e.event_type,"-").concat(e.seen))))})]})})}},4873:(e,t,n)=>{n.r(t),n.d(t,{default:()=>T});var s=n(2791),o=n(9945),a=n(7689),l=n(1087),i=n(9434),r=n(463),c=n(6444),d=n(6181),p=n.n(d),u=n(1320),m=n(7995),h=n(9114),x=n(1207),j=n(184);const g=c.ZP.div((e=>{let{theme:t}=e;return{"& .highlighted":{"& span":{backgroundColor:p()(t,"signalColors.warning","#FFBD62")}},"& .ansidefault":{color:p()(t,"fontColor","#000"),lineHeight:"16px"}}})),b=e=>{let{tenant:t,namespace:n,podName:a,propLoading:l}=e;const c=(0,u.TL)(),d=(0,i.v9)((e=>e.tenants.loadingTenant)),[p,b]=(0,s.useState)(""),[f,v]=(0,s.useState)([]),[y,S]=(0,s.useState)(!0),C=new r.t1({minWidth:5,fixedHeight:!1});(0,s.useEffect)((()=>{l&&S(!0)}),[l]),(0,s.useEffect)((()=>{d&&S(!0)}),[d]);const k=(e,t)=>{if(!e)return null;let n=(e=e.replace(/([^\x20-\x7F])/g,"")).replace(/((\[[0-9;]+m))/g,""),s=""!==p&&e.toLowerCase().includes(p.toLowerCase());return n.startsWith(" ")?(0,j.jsx)(g,{className:"".concat(s?"highlight":""),children:(0,j.jsx)("span",{className:"tab",children:n})},t):(0,j.jsx)(g,{className:"".concat(s?"highlight":""),children:(0,j.jsx)("span",{className:"ansidefault",children:n})},t)};function w(e){let{columnIndex:t,key:n,parent:s,index:o,style:a}=e;return(0,j.jsx)(r.Z8,{cache:C,columnIndex:t,parent:s,rowIndex:o,children:(0,j.jsx)("div",{style:{...a},children:k(f[o],o)})},n)}return(0,s.useEffect)((()=>{y&&x.Z.invoke("GET","/api/v1/namespaces/".concat(n,"/tenants/").concat(t,"/pods/").concat(a)).then((e=>{v(e.split("\n")),S(!1)})).catch((e=>{c((0,m.Ih)(e)),S(!1)}))}),[y,a,n,t,c]),(0,j.jsxs)(s.Fragment,{children:[(0,j.jsx)(o.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center",gap:10,"& button":{flexGrow:0,marginLeft:8}},children:(0,j.jsx)(h.Z,{value:p,placeholder:"Highlight Line",onChange:e=>{b(e)}})}),(0,j.jsx)(o.rjZ,{item:!0,xs:12,children:(0,j.jsx)(o.xuv,{sx:{minHeight:400,height:"calc(100vh - 310px)",overflow:"hidden",fontSize:13,padding:"25px 45px 0"},useBackground:!0,withBorders:!0,children:f.length>=1&&(0,j.jsx)(r.qj,{children:e=>{let{width:t,height:n}=e;return(0,j.jsx)(r.aV,{rowHeight:e=>C.rowHeight(e),overscanRowCount:15,rowCount:f.length,rowRenderer:w,width:t,height:n})}})})})]})};var f=n(5248),v=n(5450);const y=e=>{let{tenant:t,namespace:n,podName:a,propLoading:l}=e;const r=(0,u.TL)(),c=(0,i.v9)((e=>e.tenants.loadingTenant)),[d,p]=(0,s.useState)([]),[h,g]=(0,s.useState)(!0);return(0,s.useEffect)((()=>{l&&g(!0)}),[l]),(0,s.useEffect)((()=>{c&&g(!0)}),[c]),(0,s.useEffect)((()=>{h&&x.Z.invoke("GET","/api/v1/namespaces/".concat(n,"/tenants/").concat(t,"/pods/").concat(a,"/events")).then((e=>{for(let t=0;t{r((0,m.Ih)(e)),g(!1)}))}),[h,a,n,t,r]),(0,j.jsx)(s.Fragment,{children:(0,j.jsx)(o.rjZ,{item:!0,xs:12,children:(0,j.jsx)(v.Z,{events:d,loading:h})})})},S={display:"grid",gridTemplateColumns:"2fr 1fr",gridAutoFlow:"row",gap:2,padding:"15px",["@media (max-width: ".concat(o.Egj.sm,"px)")]:{gridTemplateColumns:"1fr",gridAutoFlow:"dense"}},C=e=>{let{title:t}=e;return(0,j.jsx)(o.NZf,{separator:!0,sx:{marginBottom:5},children:t})},k=e=>{let{describeInfo:t}=e;return(0,j.jsx)(s.Fragment,{children:(0,j.jsxs)("div",{id:"pod-describe-summary-content",children:[(0,j.jsx)(C,{title:"Summary"}),(0,j.jsxs)(o.xuv,{sx:{...S},children:[(0,j.jsx)(o.kKA,{label:"Name",value:t.name}),(0,j.jsx)(o.kKA,{label:"Namespace",value:t.namespace}),(0,j.jsx)(o.kKA,{label:"Node",value:t.nodeName}),(0,j.jsx)(o.kKA,{label:"Start time",value:t.startTime}),(0,j.jsx)(o.kKA,{label:"Status",value:t.phase}),(0,j.jsx)(o.kKA,{label:"QoS Class",value:t.qosClass}),(0,j.jsx)(o.kKA,{label:"IP",value:t.podIP})]})]})})},w=e=>{let{annotations:t}=e;return(0,j.jsx)(s.Fragment,{children:(0,j.jsxs)("div",{id:"pod-describe-annotations-content",children:[(0,j.jsx)(C,{title:"Annotations"}),(0,j.jsx)(o.xuv,{children:t.map(((e,t)=>(0,j.jsx)(o.Vp9,{id:"".concat(e.key,"-").concat(e.value),sx:{margin:"0.5%"},label:"".concat(e.key,": ").concat(e.value)},t)))})]})})},A=e=>{let{labels:t}=e;return(0,j.jsx)(s.Fragment,{children:(0,j.jsxs)("div",{id:"pod-describe-labels-content",children:[(0,j.jsx)(C,{title:"Labels"}),(0,j.jsx)(o.xuv,{children:t.map(((e,t)=>(0,j.jsx)(o.Vp9,{id:"".concat(e.key,"-").concat(e.value),sx:{margin:"0.5%"},label:"".concat(e.key,": ").concat(e.value)},t)))})]})})},F=e=>{let{conditions:t}=e;return(0,j.jsx)("div",{id:"pod-describe-conditions-content",children:(0,j.jsx)(E,{title:"Conditions",columns:["type","status"],columnsLabels:["Type","Status"],items:t})})},N=e=>{let{tolerations:t}=e;return(0,j.jsx)("div",{id:"pod-describe-tolerations-content",children:(0,j.jsx)(E,{title:"Tolerations",columns:["effect","key","operator","tolerationSeconds"],columnsLabels:["Effect","Key","Operator","Seconds of toleration"],items:t})})},_=e=>{let{volumes:t}=e;return(0,j.jsx)(s.Fragment,{children:(0,j.jsx)("div",{id:"pod-describe-volumes-content",children:t.map(((e,t)=>(0,j.jsxs)(s.Fragment,{children:[(0,j.jsx)(C,{title:"Volume ".concat(e.name)}),(0,j.jsxs)(o.xuv,{sx:{...S},children:[e.pvc&&(0,j.jsxs)(s.Fragment,{children:[(0,j.jsx)(o.kKA,{label:"Type",value:"Persistant Volume Claim"}),(0,j.jsx)(o.kKA,{label:"Claim Name",value:e.pvc.claimName})]}),e.projected&&(0,j.jsx)(o.kKA,{label:"Type",value:"Projected"})]})]},t)))})})},E=e=>{let{title:t,items:n,columns:a,columnsLabels:l}=e;return(0,j.jsxs)(s.Fragment,{children:[(0,j.jsx)(C,{title:t}),(0,j.jsx)(o.xuv,{children:(0,j.jsxs)(o.iA_,{"aria-label":"collapsible table",children:[(0,j.jsx)(o.ssF,{children:(0,j.jsx)(o.SCH,{children:l.map(((e,t)=>(0,j.jsx)(o.pj1,{children:e},t)))})}),(0,j.jsx)(o.RMI,{children:n.map(((e,t)=>(0,j.jsx)(o.SCH,{children:a.map(((t,n)=>(0,j.jsx)(o.pj1,{children:e[t]},n)))},t)))})]})})]})},P=e=>{let{containers:t}=e;return(0,j.jsx)(s.Fragment,{children:(0,j.jsx)("div",{id:"pod-describe-containers-content",children:t.map(((e,t)=>{var n,a;return(0,j.jsxs)(s.Fragment,{children:[(0,j.jsx)(C,{title:"Container ".concat(e.name)}),(0,j.jsxs)(o.xuv,{style:{wordBreak:"break-all"},sx:{...S},children:[(0,j.jsx)(o.kKA,{label:"Image",value:e.image}),(0,j.jsx)(o.kKA,{label:"Ready",value:"".concat(e.ready)}),(0,j.jsx)(o.kKA,{label:"Ports",value:e.ports.join(", ")}),(0,j.jsx)(o.kKA,{label:"Host Ports",value:e.hostPorts.join(", ")}),(0,j.jsx)(o.kKA,{label:"Arguments",value:e.args.join(", ")}),(0,j.jsx)(o.kKA,{label:"Started",value:null===(n=e.state)||void 0===n?void 0:n.started}),(0,j.jsx)(o.kKA,{label:"State",value:null===(a=e.state)||void 0===a?void 0:a.state})]}),(0,j.jsxs)(o.xuv,{style:{wordBreak:"break-all"},sx:{...S},children:[(0,j.jsx)(o.kKA,{label:"Image ID",value:e.imageID}),(0,j.jsx)(o.kKA,{label:"Container ID",value:e.containerID})]}),(0,j.jsx)(E,{title:"Mounts",columns:["name","mountPath"],columnsLabels:["Name","Mount Path"],items:e.mounts}),(0,j.jsx)(E,{title:"Environment Variables",columns:["key","value"],columnsLabels:["Key","Value"],items:e.environmentVariables})]},t)}))})})},I=e=>{let{tenant:t,namespace:n,podName:a,propLoading:l}=e;const r=(0,u.TL)(),c=(0,i.v9)((e=>e.tenants.loadingTenant)),[d,p]=(0,s.useState)(),[h,g]=(0,s.useState)(!0),[b,f]=(0,s.useState)("pod-describe-summary");(0,s.useEffect)((()=>{l&&g(!0)}),[l]),(0,s.useEffect)((()=>{c&&g(!0)}),[c]),(0,s.useEffect)((()=>{h&&x.Z.invoke("GET","/api/v1/namespaces/".concat(n,"/tenants/").concat(t,"/pods/").concat(a,"/describe")).then((e=>{const t=v(e);p(t),g(!1)})).catch((e=>{r((0,m.Ih)(e)),g(!1)}))}),[h,a,n,t,r]);const v=e=>(e.containers=e.containers.map((e=>(e.environmentVariables=e.environmentVariables.filter((e=>null!==e)),e))),e);return(0,j.jsx)(s.Fragment,{children:d&&(0,j.jsx)(o.rjZ,{item:!0,xs:12,children:(0,j.jsx)(o.mQc,{currentTabOrPath:b,onTabClick:e=>{f(e)},horizontal:!0,options:[{tabConfig:{id:"pod-describe-summary",label:"Summary"},content:(0,j.jsx)(k,{describeInfo:d})},{tabConfig:{id:"pod-describe-annotations",label:"Annotations"},content:(0,j.jsx)(w,{annotations:d.annotations})},{tabConfig:{id:"pod-describe-labels",label:"Labels"},content:(0,j.jsx)(A,{labels:d.labels})},{tabConfig:{id:"pod-describe-conditions",label:"Conditions"},content:(0,j.jsx)(F,{conditions:d.conditions})},{tabConfig:{id:"pod-describe-tolerations",label:"Tolerations"},content:(0,j.jsx)(N,{tolerations:d.tolerations})},{tabConfig:{id:"pod-describe-volumes",label:"Volumes"},content:(0,j.jsx)(_,{volumes:d.volumes})},{tabConfig:{id:"pod-describe-containers",label:"Containers"},content:(0,j.jsx)(P,{containers:d.containers})}]})})})},T=()=>{const{tenantNamespace:e,tenantName:t,podName:n}=(0,a.UO)(),[i,r]=(0,s.useState)("simple-tab-0"),[c,d]=(0,s.useState)(!0);return(0,s.useEffect)((()=>{c&&d(!1)}),[c]),(0,j.jsxs)(s.Fragment,{children:[(0,j.jsxs)(o.NZf,{separator:!0,sx:{marginBottom:15},children:[(0,j.jsx)(l.rU,{to:"/namespaces/".concat(e||"","/tenants/").concat(t||"","/pods"),children:"Pods"})," ","> ",n]}),(0,j.jsx)(o.mQc,{options:[{tabConfig:{id:"simple-tab-0",label:"Events"},content:(0,j.jsx)(y,{tenant:t||"",namespace:e||"",podName:n||"",propLoading:c})},{tabConfig:{id:"simple-tab-1",label:"Describe"},content:(0,j.jsx)(I,{tenant:t||"",namespace:e||"",podName:n||"",propLoading:c})},{tabConfig:{id:"simple-tab-2",label:"Logs"},content:(0,j.jsx)(b,{tenant:t||"",namespace:e||"",podName:n||"",propLoading:c})}],currentTabOrPath:i,onTabClick:e=>{r(e)},horizontal:!0})]})}},3688:(e,t,n)=>{function s(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function o(e){this.setState(function(t){var n=this.constructor.getDerivedStateFromProps(e,t);return null!==n&&void 0!==n?n:null}.bind(this))}function a(e,t){try{var n=this.props,s=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,s)}finally{this.props=n,this.state=s}}function l(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!==typeof e.getDerivedStateFromProps&&"function"!==typeof t.getSnapshotBeforeUpdate)return e;var n=null,l=null,i=null;if("function"===typeof t.componentWillMount?n="componentWillMount":"function"===typeof t.UNSAFE_componentWillMount&&(n="UNSAFE_componentWillMount"),"function"===typeof t.componentWillReceiveProps?l="componentWillReceiveProps":"function"===typeof t.UNSAFE_componentWillReceiveProps&&(l="UNSAFE_componentWillReceiveProps"),"function"===typeof t.componentWillUpdate?i="componentWillUpdate":"function"===typeof t.UNSAFE_componentWillUpdate&&(i="UNSAFE_componentWillUpdate"),null!==n||null!==l||null!==i){var r=e.displayName||e.name,c="function"===typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+r+" uses "+c+" but also contains the following legacy lifecycles:"+(null!==n?"\n "+n:"")+(null!==l?"\n "+l:"")+(null!==i?"\n "+i:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"===typeof e.getDerivedStateFromProps&&(t.componentWillMount=s,t.componentWillReceiveProps=o),"function"===typeof t.getSnapshotBeforeUpdate){if("function"!==typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=a;var d=t.componentDidUpdate;t.componentDidUpdate=function(e,t,n){var s=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;d.call(this,e,t,s)}}return e}n.r(t),n.d(t,{polyfill:()=>l}),s.__suppressDeprecationWarning=!0,o.__suppressDeprecationWarning=!0,a.__suppressDeprecationWarning=!0}}]); +//# sourceMappingURL=384.1367a4bf.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/384.1367a4bf.chunk.js.map b/web-app/build/static/js/384.1367a4bf.chunk.js.map new file mode 100644 index 00000000000..555e474384e --- /dev/null +++ b/web-app/build/static/js/384.1367a4bf.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/384.1367a4bf.chunk.js","mappings":"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","sources":["screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/TenantDetails/events/EventsList.tsx","screens/Console/Tenants/TenantDetails/pods/PodLogs.tsx","screens/Console/Tenants/TenantDetails/pods/PodEvents.tsx","screens/Console/Tenants/TenantDetails/pods/PodDescribe.tsx","screens/Console/Tenants/TenantDetails/pods/PodDetails.tsx","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n ProgressBar,\n Table,\n TableBody,\n TableHeadCell,\n TableCell,\n TableHead,\n TableRow,\n Box,\n ExpandCaret,\n CollapseCaret,\n} from \"mds\";\nimport { IEvent } from \"../../ListTenants/types\";\n\ninterface IEventsListProps {\n events: IEvent[];\n loading: boolean;\n}\n\nconst Event = (props: { event: IEvent }) => {\n const { event } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n \n \n setOpen(!open)}\n sx={{ borderBottom: 0 }}\n >\n {event.event_type}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.reason}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.seen}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.message.length >= 30\n ? `${event.message.slice(0, 30)}...`\n : event.message}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {open ? : }\n \n \n \n \n {open && (\n \n {event.message}\n \n )}\n \n \n \n );\n};\n\nconst EventsList = ({ events, loading }: IEventsListProps) => {\n if (loading) {\n return ;\n }\n return (\n \n \n \n \n Type\n Reason\n Age\n Message\n \n \n \n \n {events.map((event) => (\n \n ))}\n \n
\n
\n );\n};\n\nexport default EventsList;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Box, Grid } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport {\n AutoSizer,\n CellMeasurer,\n CellMeasurerCache,\n List,\n} from \"react-virtualized\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\nimport SearchBox from \"../../../Common/SearchBox\";\nimport api from \"../../../../../common/api\";\n\ninterface IPodLogsProps {\n tenant: string;\n namespace: string;\n podName: string;\n propLoading: boolean;\n}\n\nconst LogsItem = styled.div(({ theme }) => ({\n \"& .highlighted\": {\n \"& span\": {\n backgroundColor: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n },\n },\n \"& .ansidefault\": {\n color: get(theme, \"fontColor\", \"#000\"),\n lineHeight: \"16px\",\n },\n}));\n\nconst PodLogs = ({\n tenant,\n namespace,\n podName,\n propLoading,\n}: IPodLogsProps) => {\n const dispatch = useAppDispatch();\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const [highlight, setHighlight] = useState(\"\");\n const [logLines, setLogLines] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const cache = new CellMeasurerCache({\n minWidth: 5,\n fixedHeight: false,\n });\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n const renderLog = (logMessage: string, index: number) => {\n if (!logMessage) {\n return null;\n }\n // remove any non ascii characters, exclude any control codes\n logMessage = logMessage.replace(/([^\\x20-\\x7F])/g, \"\");\n\n // regex for terminal colors like e.g. `[31;4m `\n const tColorRegex = /((\\[[0-9;]+m))/g;\n\n // get substring if there was a match for to split what\n // is going to be colored and what not, here we add color\n // only to the first match.\n let substr = logMessage.replace(tColorRegex, \"\");\n\n // in case highlight is set, we select the line that contains the requested string\n let highlightedLine =\n highlight !== \"\"\n ? logMessage.toLowerCase().includes(highlight.toLowerCase())\n : false;\n\n // if starts with multiple spaces add padding\n if (substr.startsWith(\" \")) {\n return (\n \n {substr}\n \n );\n } else {\n // for all remaining set default class\n return (\n \n {substr}\n \n );\n }\n };\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pods/${podName}`,\n )\n .then((res: string) => {\n setLogLines(res.split(\"\\n\"));\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, podName, namespace, tenant, dispatch]);\n\n function cellRenderer({ columnIndex, key, parent, index, style }: any) {\n return (\n // @ts-ignore\n \n \n {renderLog(logLines[index], index)}\n \n \n );\n }\n\n return (\n \n \n {\n setHighlight(value);\n }}\n />\n \n \n \n {logLines.length >= 1 && (\n // @ts-ignore\n \n {({ width, height }) => (\n // @ts-ignore\n cache.rowHeight(item)}\n overscanRowCount={15}\n rowCount={logLines.length}\n rowRenderer={cellRenderer}\n width={width}\n height={height}\n />\n )}\n \n )}\n \n \n \n );\n};\n\nexport default PodLogs;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { Grid } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { IEvent } from \"../../ListTenants/types\";\nimport { niceDays } from \"../../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\nimport api from \"../../../../../common/api\";\nimport EventsList from \"../events/EventsList\";\n\ninterface IPodEventsProps {\n tenant: string;\n namespace: string;\n podName: string;\n propLoading: boolean;\n}\n\nconst PodEvents = ({\n tenant,\n namespace,\n podName,\n propLoading,\n}: IPodEventsProps) => {\n const dispatch = useAppDispatch();\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const [events, setEvents] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pods/${podName}/events`,\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvents(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, podName, namespace, tenant, dispatch]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport default PodEvents;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n Box,\n breakPoints,\n Grid,\n SectionTitle,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Tabs,\n Tag,\n ValuePair,\n} from \"mds\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\n\ninterface IPodEventsProps {\n tenant: string;\n namespace: string;\n podName: string;\n propLoading: boolean;\n}\n\ninterface Annotation {\n key: string;\n value: string;\n}\n\ninterface Condition {\n status: string;\n type: string;\n}\n\ninterface EnvVar {\n key: string;\n value: string;\n}\n\ninterface Mount {\n mountPath: string;\n name: string;\n}\n\ninterface State {\n started: string;\n state: string;\n}\n\ninterface Container {\n args: string[];\n containerID: string;\n environmentVariables: EnvVar[];\n hostPorts: string[];\n image: string;\n imageID: string;\n lastState: any;\n mounts: Mount[];\n name: string;\n ports: string[];\n ready: boolean;\n state: State;\n}\n\ninterface Label {\n key: string;\n value: string;\n}\n\ninterface Toleration {\n effect: string;\n key: string;\n operator: string;\n tolerationSeconds: number;\n}\n\ninterface VolumePVC {\n claimName: string;\n}\n\ninterface Volume {\n name: string;\n pvc?: VolumePVC;\n projected?: any;\n}\n\ninterface DescribeResponse {\n annotations: Annotation[];\n conditions: Condition[];\n containers: Container[];\n controllerRef: string;\n labels: Label[];\n name: string;\n namespace: string;\n nodeName: string;\n nodeSelector: string[];\n phase: string;\n podIP: string;\n qosClass: string;\n startTime: string;\n tolerations: Toleration[];\n volumes: Volume[];\n}\n\ninterface IPodDescribeSummaryProps {\n describeInfo: DescribeResponse;\n}\n\ninterface IPodDescribeAnnotationsProps {\n annotations: Annotation[];\n}\n\ninterface IPodDescribeLabelsProps {\n labels: Label[];\n}\n\ninterface IPodDescribeConditionsProps {\n conditions: Condition[];\n}\n\ninterface IPodDescribeTolerationsProps {\n tolerations: Toleration[];\n}\n\ninterface IPodDescribeVolumesProps {\n volumes: Volume[];\n}\n\ninterface IPodDescribeContainersProps {\n containers: Container[];\n}\n\ninterface IPodDescribeTableProps {\n title: string;\n columns: string[];\n columnsLabels: string[];\n items: any[];\n}\n\nconst twoColCssGridLayoutConfig = {\n display: \"grid\",\n gridTemplateColumns: \"2fr 1fr\",\n gridAutoFlow: \"row\",\n gap: 2,\n padding: \"15px\",\n [`@media (max-width: ${breakPoints.sm}px)`]: {\n gridTemplateColumns: \"1fr\",\n gridAutoFlow: \"dense\",\n },\n};\n\nconst HeaderSection = ({ title }: { title: string }) => {\n return (\n \n {title}\n \n );\n};\n\nconst PodDescribeSummary = ({ describeInfo }: IPodDescribeSummaryProps) => {\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nconst PodDescribeAnnotations = ({\n annotations,\n}: IPodDescribeAnnotationsProps) => {\n return (\n \n
\n \n \n {annotations.map((annotation, index) => (\n \n ))}\n \n
\n
\n );\n};\n\nconst PodDescribeLabels = ({ labels }: IPodDescribeLabelsProps) => {\n return (\n \n
\n \n \n {labels.map((label, index) => (\n \n ))}\n \n
\n
\n );\n};\n\nconst PodDescribeConditions = ({ conditions }: IPodDescribeConditionsProps) => {\n return (\n
\n \n
\n );\n};\n\nconst PodDescribeTolerations = ({\n tolerations,\n}: IPodDescribeTolerationsProps) => {\n return (\n
\n \n
\n );\n};\n\nconst PodDescribeVolumes = ({ volumes }: IPodDescribeVolumesProps) => {\n return (\n \n
\n {volumes.map((volume, index) => (\n \n \n \n {volume.pvc && (\n \n \n \n \n )}\n {/* TODO Add component to display projected data (Maybe change API response) */}\n {volume.projected && (\n \n )}\n \n \n ))}\n
\n
\n );\n};\n\nconst PodDescribeTable = ({\n title,\n items,\n columns,\n columnsLabels,\n}: IPodDescribeTableProps) => {\n return (\n \n \n \n \n \n \n {columnsLabels.map((label, index) => (\n {label}\n ))}\n \n \n \n {items.map((item, i) => {\n return (\n \n {columns.map((column, j) => (\n {item[column]}\n ))}\n \n );\n })}\n \n
\n
\n
\n );\n};\n\nconst PodDescribeContainers = ({ containers }: IPodDescribeContainersProps) => {\n return (\n \n
\n {containers.map((container, index) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ))}\n
\n
\n );\n};\n\nconst PodDescribe = ({\n tenant,\n namespace,\n podName,\n propLoading,\n}: IPodEventsProps) => {\n const dispatch = useAppDispatch();\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [describeInfo, setDescribeInfo] = useState();\n const [loading, setLoading] = useState(true);\n const [curTab, setCurTab] = useState(\"pod-describe-summary\");\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pods/${podName}/describe`,\n )\n .then((res: DescribeResponse) => {\n const cleanRes = cleanDescribeResponseEnvVariables(res);\n setDescribeInfo(cleanRes);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, podName, namespace, tenant, dispatch]);\n\n const cleanDescribeResponseEnvVariables = (\n res: DescribeResponse,\n ): DescribeResponse => {\n res.containers = res.containers.map((c) => {\n c.environmentVariables = c.environmentVariables.filter(\n (item) => item !== null,\n );\n return c;\n });\n return res;\n };\n\n return (\n \n {describeInfo && (\n \n {\n setCurTab(newValue);\n }}\n horizontal\n options={[\n {\n tabConfig: { id: \"pod-describe-summary\", label: \"Summary\" },\n content: ,\n },\n {\n tabConfig: {\n id: \"pod-describe-annotations\",\n label: \"Annotations\",\n },\n content: (\n \n ),\n },\n {\n tabConfig: { id: \"pod-describe-labels\", label: \"Labels\" },\n content: ,\n },\n {\n tabConfig: {\n id: \"pod-describe-conditions\",\n label: \"Conditions\",\n },\n content: (\n \n ),\n },\n {\n tabConfig: {\n id: \"pod-describe-tolerations\",\n label: \"Tolerations\",\n },\n content: (\n \n ),\n },\n {\n tabConfig: { id: \"pod-describe-volumes\", label: \"Volumes\" },\n content: ,\n },\n {\n tabConfig: {\n id: \"pod-describe-containers\",\n label: \"Containers\",\n },\n content: (\n \n ),\n },\n ]}\n />\n \n )}\n \n );\n};\n\nexport default PodDescribe;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { SectionTitle, Tabs } from \"mds\";\nimport { Link, useParams } from \"react-router-dom\";\n\nimport PodLogs from \"./PodLogs\";\nimport PodEvents from \"./PodEvents\";\nimport PodDescribe from \"./PodDescribe\";\n\nconst PodDetails = () => {\n const { tenantNamespace, tenantName, podName } = useParams();\n\n const [curTab, setCurTab] = useState(\"simple-tab-0\");\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (loading) {\n setLoading(false);\n }\n }, [loading]);\n\n return (\n \n \n \n Pods\n {\" \"}\n > {podName}\n \n \n ),\n },\n {\n tabConfig: { id: \"simple-tab-1\", label: \"Describe\" },\n content: (\n \n ),\n },\n {\n tabConfig: { id: \"simple-tab-2\", label: \"Logs\" },\n content: (\n \n ),\n },\n ]}\n currentTabOrPath={curTab}\n onTabClick={(tab) => {\n setCurTab(tab);\n }}\n horizontal\n />\n \n );\n};\n\nexport default PodDetails;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n"],"names":["_ref","placeholder","onChange","overrideClass","value","id","label","sx","_jsx","InputBox","className","e","target","startIcon","SearchIcon","Event","props","event","open","setOpen","React","_jsxs","children","TableRow","cursor","TableHeadCell","scope","onClick","borderBottom","event_type","TableCell","reason","seen","message","length","concat","slice","CollapseCaret","ExpandCaret","style","paddingBottom","paddingTop","colSpan","Box","useBackground","padding","marginBottom","events","loading","ProgressBar","withBorders","customBorderPadding","Table","TableHead","TableBody","map","LogsItem","styled","div","theme","backgroundColor","get","color","lineHeight","_ref2","tenant","namespace","podName","propLoading","dispatch","useAppDispatch","loadingTenant","useSelector","state","tenants","highlight","setHighlight","useState","logLines","setLogLines","setLoading","cache","CellMeasurerCache","minWidth","fixedHeight","useEffect","renderLog","logMessage","index","substr","replace","highlightedLine","toLowerCase","includes","startsWith","cellRenderer","_ref3","columnIndex","key","parent","CellMeasurer","rowIndex","api","invoke","then","res","split","catch","err","setErrorSnackMessage","Fragment","Grid","item","xs","display","justifyContent","alignItems","gap","flexGrow","marginLeft","SearchBox","minHeight","height","overflow","fontSize","AutoSizer","_ref4","width","List","rowHeight","overscanRowCount","rowCount","rowRenderer","setEvents","i","currentTime","Date","now","niceDays","last_seen","toString","EventsList","twoColCssGridLayoutConfig","gridTemplateColumns","gridAutoFlow","breakPoints","sm","HeaderSection","title","SectionTitle","separator","PodDescribeSummary","describeInfo","ValuePair","name","nodeName","startTime","phase","qosClass","podIP","PodDescribeAnnotations","annotations","annotation","Tag","margin","PodDescribeLabels","labels","PodDescribeConditions","_ref5","conditions","PodDescribeTable","columns","columnsLabels","items","PodDescribeTolerations","_ref6","tolerations","PodDescribeVolumes","_ref7","volumes","volume","pvc","claimName","projected","_ref8","column","j","PodDescribeContainers","_ref9","containers","container","_container$state","_container$state2","wordBreak","image","ready","ports","join","hostPorts","args","started","imageID","containerID","mounts","environmentVariables","_ref10","setDescribeInfo","curTab","setCurTab","cleanRes","cleanDescribeResponseEnvVariables","c","filter","Tabs","currentTabOrPath","onTabClick","newValue","horizontal","options","tabConfig","content","PodDetails","tenantNamespace","tenantName","useParams","Link","to","PodEvents","PodDescribe","PodLogs","tab","componentWillMount","this","constructor","getDerivedStateFromProps","undefined","setState","componentWillReceiveProps","nextProps","prevState","bind","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","Component","prototype","isReactComponent","Error","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","componentName","displayName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","call","__suppressDeprecationWarning"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/405.5df626d3.chunk.js b/web-app/build/static/js/405.5df626d3.chunk.js deleted file mode 100644 index ce2539d6075..00000000000 --- a/web-app/build/static/js/405.5df626d3.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[405],{13871:function(e,n,t){var a,i=t(30168),s=(0,t(26088).Z)("hr")(a||(a=(0,i.Z)(["\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n"])));n.Z=s},96405:function(e,n,t){t.r(n);var a=t(93433),i=t(29439),s=t(1413),o=t(72791),l=t(78687),r=t(37516),c=t(51691),d=t(13400),u=t(42419),v=t(75952),f=t(11135),x=t(25787),h=t(61889),m=t(23814),p=t(21435),Z=t(41320),g=t(87995),j=t(81207),b=t(40306),y=t(45248),k=t(13871),C=t(80184),w=(0,l.$j)((function(e){return{loadingTenant:e.tenants.loadingTenant,selectedTenant:e.tenants.currentTenant,tenant:e.tenants.tenantInfo}}),null);n.default=(0,x.Z)((function(e){return(0,f.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)({},m.oZ),m.bK),{},{envVarRow:{display:"flex",alignItems:"center",justifyContent:"flex-start","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},rowActions:{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},overlayAction:{marginLeft:10,"& svg":{width:15,height:15,maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},loaderAlign:{textAlign:"center"},fileItem:{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}}},m.Bz),m.QV),m.DF),m.oO),m.AK))}))(w((function(e){var n=e.classes,t=(0,Z.TL)(),s=(0,l.v9)((function(e){return e.tenants.tenantInfo})),f=(0,l.v9)((function(e){return e.tenants.loadingTenant})),x=(0,o.useState)(!1),m=(0,i.Z)(x,2),w=m[0],A=m[1],_=(0,o.useState)(!1),T=(0,i.Z)(_,2),P=T[0],S=T[1],I=(0,o.useState)([]),N=(0,i.Z)(I,2),E=N[0],V=N[1],F=(0,o.useState)([]),R=(0,i.Z)(F,2),z=R[0],L=R[1],H=(0,o.useState)(!1),K=(0,i.Z)(H,2),B=K[0],D=K[1],G=(0,o.useCallback)((function(){j.Z.invoke("GET","/api/v1/namespaces/".concat(null===s||void 0===s?void 0:s.namespace,"/tenants/").concat(null===s||void 0===s?void 0:s.name,"/configuration")).then((function(e){e.environmentVariables&&(V(e.environmentVariables),D(e.sftpExposed))})).catch((function(e){t((0,g.Ih)(e))}))}),[s,t]);(0,o.useEffect)((function(){s&&G()}),[s,G]);return(0,C.jsxs)(o.Fragment,{children:[(0,C.jsx)(b.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,C.jsx)(v.EjK,{}),isLoading:w,onClose:function(){return S(!1)},isOpen:P,onConfirm:function(){A(!0);var e={environmentVariables:E.filter((function(e){return""!==e.key})),keysToBeDeleted:z,sftpExposed:B};j.Z.invoke("PATCH","/api/v1/namespaces/".concat(null===s||void 0===s?void 0:s.namespace,"/tenants/").concat(null===s||void 0===s?void 0:s.name,"/configuration"),e).then((function(){A(!1),S(!1),G()})).catch((function(e){t((0,g.Ih)(e)),A(!1)}))},confirmationContent:(0,C.jsx)(c.Z,{children:"Are you sure you want to save the changes and restart the service?"})}),f?(0,C.jsx)("div",{className:n.loaderAlign,children:(0,C.jsx)(v.aNw,{})}):(0,C.jsxs)(h.ZP,{container:!0,spacing:1,children:[(0,C.jsxs)(h.ZP,{item:!0,xs:12,children:[(0,C.jsx)("h1",{className:n.sectionTitle,children:"Configuration"}),(0,C.jsx)(k.Z,{})]}),(0,C.jsx)(h.ZP,{container:!0,spacing:1,children:E.map((function(e,t){return(0,C.jsxs)(h.ZP,{item:!0,xs:12,className:"".concat(n.formFieldRow," ").concat(n.envVarRow),children:[(0,C.jsx)(h.ZP,{item:!0,xs:5,className:n.fileItem,children:(0,C.jsx)(p.Z,{id:"env_var_key",name:"env_var_key",label:"Key",value:e.key,onChange:function(e){var n=(0,a.Z)(E);V(n.map((function(n,a){return a===t?{key:e.target.value,value:n.value}:n})))},index:t},"env_var_key_".concat(t.toString()))}),(0,C.jsx)(h.ZP,{item:!0,xs:5,className:n.fileItem,children:(0,C.jsx)(p.Z,{id:"env_var_value",name:"env_var_value",label:"Value",value:e.value,onChange:function(e){var n=(0,a.Z)(E);V(n.map((function(n,a){return a===t?{key:n.key,value:e.target.value}:n})))},index:t,type:y.Gq[e.key]&&y.Gq[e.key].secret?"password":"text"},"env_var_value_".concat(t.toString()))}),(0,C.jsxs)(h.ZP,{item:!0,xs:2,className:n.rowActions,children:[(0,C.jsx)("div",{className:n.overlayAction,children:(0,C.jsx)(d.Z,{size:"small",onClick:function(){var e=(0,a.Z)(E);e.push({key:"",value:""}),V(e)},disabled:t!==E.length-1,children:(0,C.jsx)(u.Z,{})})}),(0,C.jsx)("div",{className:n.overlayAction,children:(0,C.jsx)(d.Z,{size:"small",onClick:function(){var n=E.filter((function(e,n){return n!==t}));V(n),L([].concat((0,a.Z)(z),[e.key]))},disabled:E.length<=1,children:(0,C.jsx)(v.HFL,{})})})]})]},"tenant-envVar-".concat(t.toString()))}))}),(0,C.jsx)(h.ZP,{container:!0,spacing:1,children:(0,C.jsx)(h.ZP,{item:!0,xs:12,justifyContent:"end",textAlign:"right",className:n.configSectionItem,children:(0,C.jsx)(r.Z,{label:"SFTP",indicatorLabels:["Enabled","Disabled"],checked:B,value:"expose_sftp",id:"expose-sftp",name:"expose-sftp",onChange:function(){D(!B)},description:""})})}),(0,C.jsx)(h.ZP,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:(0,C.jsx)(v.zxk,{id:"save-environment-variables",type:"submit",variant:"callAction",disabled:P||w,onClick:function(){return S(!0)},label:"Save"})})]})]})})))},42419:function(e,n,t){var a=t(64836);n.Z=void 0;var i=a(t(45649)),s=t(80184),o=(0,i.default)((0,s.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=o}}]); -//# sourceMappingURL=405.5df626d3.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/405.5df626d3.chunk.js.map b/web-app/build/static/js/405.5df626d3.chunk.js.map deleted file mode 100644 index f22066b8ee0..00000000000 --- a/web-app/build/static/js/405.5df626d3.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/405.5df626d3.chunk.js","mappings":"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","sources":["screens/Console/Common/FormHr.tsx","screens/Console/Tenants/TenantDetails/TenantConfiguration.tsx","../node_modules/@mui/icons-material/Add.js"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport styled from \"@emotion/styled\";\n\nconst FormHr = styled(\"hr\")`\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-color: #999999;\n background-color: transparent;\n`;\n\nexport default FormHr;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { DialogContentText, IconButton } from \"@mui/material\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport { Button, ConfirmModalIcon, Loader, RemoveIcon } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n ITenantConfigurationRequest,\n ITenantConfigurationResponse,\n LabelKeyPair,\n} from \"../types\";\nimport {\n containerForHeader,\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n spacingUtils,\n tenantDetailsStyles,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { MinIOEnvVarsSettings } from \"../../../../common/utils\";\nimport FormHr from \"../../Common/FormHr\";\n\ninterface ITenantConfiguration {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...spacingUtils,\n envVarRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n width: 15,\n height: 15,\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n loaderAlign: {\n textAlign: \"center\",\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...containerForHeader,\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantConfiguration = ({ classes }: ITenantConfiguration) => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [envVars, setEnvVars] = useState([]);\n const [envVarsToBeDeleted, setEnvVarsToBeDeleted] = useState([]);\n const [sftpExposed, setSftpEnabled] = useState(false);\n\n const getTenantConfigurationInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/configuration`,\n )\n .then((res: ITenantConfigurationResponse) => {\n if (res.environmentVariables) {\n setEnvVars(res.environmentVariables);\n setSftpEnabled(res.sftpExposed);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantConfigurationInfo();\n }\n }, [tenant, getTenantConfigurationInfo]);\n\n const updateTenantConfiguration = () => {\n setIsSending(true);\n let payload: ITenantConfigurationRequest = {\n environmentVariables: envVars.filter((env) => env.key !== \"\"),\n keysToBeDeleted: envVarsToBeDeleted,\n sftpExposed: sftpExposed,\n };\n api\n .invoke(\n \"PATCH\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/configuration`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n setDialogOpen(false);\n getTenantConfigurationInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantConfiguration}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n
\n \n
\n ) : (\n \n \n

Configuration

\n \n
\n \n {envVars.map((envVar, index) => (\n \n \n ) => {\n const existingEnvVars = [...envVars];\n\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: e.target.value, value: keyPair.value }\n : keyPair,\n ),\n );\n }}\n index={index}\n key={`env_var_key_${index.toString()}`}\n />\n \n \n ) => {\n const existingEnvVars = [...envVars];\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: keyPair.key, value: e.target.value }\n : keyPair,\n ),\n );\n }}\n index={index}\n key={`env_var_value_${index.toString()}`}\n type={\n MinIOEnvVarsSettings[envVar.key] &&\n MinIOEnvVarsSettings[envVar.key].secret\n ? \"password\"\n : \"text\"\n }\n />\n \n \n
\n {\n const existingEnvVars = [...envVars];\n existingEnvVars.push({ key: \"\", value: \"\" });\n\n setEnvVars(existingEnvVars);\n }}\n disabled={index !== envVars.length - 1}\n >\n \n \n
\n
\n {\n const existingEnvVars = envVars.filter(\n (item, fIndex) => fIndex !== index,\n );\n setEnvVars(existingEnvVars);\n setEnvVarsToBeDeleted([\n ...envVarsToBeDeleted,\n envVar.key,\n ]);\n }}\n disabled={envVars.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n \n \n {\n setSftpEnabled(!sftpExposed);\n }}\n description=\"\"\n />\n \n \n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.loadingTenant,\n selectedTenant: state.tenants.currentTenant,\n tenant: state.tenants.tenantInfo,\n});\n\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(TenantConfiguration));\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexports.default = _default;"],"names":["FormHr","styled","_templateObject","_taggedTemplateLiteral","connector","connect","state","loadingTenant","tenants","selectedTenant","currentTenant","tenant","tenantInfo","withStyles","theme","createStyles","_objectSpread","tenantDetailsStyles","spacingUtils","envVarRow","display","alignItems","justifyContent","borderBottom","flex","minWidth","rowActions","overlayAction","marginLeft","width","height","maxWidth","maxHeight","background","loaderAlign","textAlign","fileItem","marginRight","flexFlow","containerForHeader","createTenantCommon","formFieldStyles","modalBasic","wizardCommon","_ref","classes","dispatch","useAppDispatch","useSelector","_useState","useState","_useState2","_slicedToArray","isSending","setIsSending","_useState3","_useState4","dialogOpen","setDialogOpen","_useState5","_useState6","envVars","setEnvVars","_useState7","_useState8","envVarsToBeDeleted","setEnvVarsToBeDeleted","_useState9","_useState10","sftpExposed","setSftpEnabled","getTenantConfigurationInfo","useCallback","api","invoke","concat","namespace","name","then","res","environmentVariables","catch","err","setErrorSnackMessage","useEffect","_jsxs","React","children","_jsx","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","payload","filter","env","key","keysToBeDeleted","confirmationContent","DialogContentText","className","Loader","Grid","container","spacing","item","xs","sectionTitle","map","envVar","index","formFieldRow","InputBoxWrapper","id","label","value","onChange","e","existingEnvVars","_toConsumableArray","keyPair","i","target","toString","type","MinIOEnvVarsSettings","secret","IconButton","size","onClick","push","disabled","length","AddIcon","fIndex","RemoveIcon","configSectionItem","FormSwitchWrapper","indicatorLabels","checked","description","sx","Button","variant","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/405.6fef1560.chunk.js b/web-app/build/static/js/405.6fef1560.chunk.js new file mode 100644 index 00000000000..f37e47def1d --- /dev/null +++ b/web-app/build/static/js/405.6fef1560.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[405],{6405:(e,n,a)=>{a.r(n),a.d(n,{default:()=>v});var t=a(2791),s=a(9434),i=a(9945),l=a(1320),o=a(7995),r=a(5248),c=a(1207),d=a(3508),x=a(184);const v=()=>{const e=(0,l.TL)(),n=(0,s.v9)((e=>e.tenants.tenantInfo)),a=(0,s.v9)((e=>e.tenants.loadingTenant)),[v,m]=(0,t.useState)(!1),[h,u]=(0,t.useState)(!1),[p,j]=(0,t.useState)([]),[f,g]=(0,t.useState)([]),[y,k]=(0,t.useState)(!1),b=(0,t.useCallback)((()=>{c.Z.invoke("GET","/api/v1/namespaces/".concat(null===n||void 0===n?void 0:n.namespace,"/tenants/").concat(null===n||void 0===n?void 0:n.name,"/configuration")).then((e=>{e.environmentVariables&&(j(e.environmentVariables),k(e.sftpExposed))})).catch((n=>{e((0,o.Ih)(n))}))}),[n,e]);(0,t.useEffect)((()=>{n&&b()}),[n,b]);return(0,x.jsxs)(t.Fragment,{children:[(0,x.jsx)(d.Z,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,x.jsx)(i.EjK,{}),isLoading:v,onClose:()=>u(!1),isOpen:h,onConfirm:()=>{m(!0);let a={environmentVariables:p.filter((e=>""!==e.key)),keysToBeDeleted:f,sftpExposed:y};c.Z.invoke("PATCH","/api/v1/namespaces/".concat(null===n||void 0===n?void 0:n.namespace,"/tenants/").concat(null===n||void 0===n?void 0:n.name,"/configuration"),a).then((()=>{m(!1),u(!1),b()})).catch((n=>{e((0,o.Ih)(n)),m(!1)}))},confirmationContent:(0,x.jsx)(t.Fragment,{children:"Are you sure you want to save the changes and restart the service?"})}),a?(0,x.jsx)(i.xuv,{sx:{textAlign:"center"},children:(0,x.jsx)(i.aNw,{})}):(0,x.jsxs)(i.xuv,{children:[(0,x.jsx)(i.NZf,{separator:!0,sx:{marginBottom:15},children:"Configuration"}),(0,x.jsx)(i.rjZ,{container:!0,sx:{"& .envVarRow":{display:"flex",alignItems:"center",justifyContent:"flex-start","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},"& .rowActions":{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},"& .overlayAction":{marginLeft:10},"& .rowItem":{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}}},children:p.map(((e,n)=>(0,x.jsxs)(i.rjZ,{item:!0,xs:12,className:"envVarRow",sx:{marginBottom:15},children:[(0,x.jsx)(i.rjZ,{item:!0,xs:5,className:"rowItem",children:(0,x.jsx)(i.Wzg,{id:"env_var_key",name:"env_var_key",label:"Key",value:e.key,onChange:e=>{const a=[...p];j(a.map(((a,t)=>t===n?{key:e.target.value,value:a.value}:a)))},index:n},"env_var_key_".concat(n.toString()))}),(0,x.jsx)(i.rjZ,{item:!0,xs:5,className:"rowItem",children:(0,x.jsx)(i.Wzg,{id:"env_var_value",name:"env_var_value",label:"Value",value:e.value,onChange:e=>{const a=[...p];j(a.map(((a,t)=>t===n?{key:a.key,value:e.target.value}:a)))},index:n,type:r.Gq[e.key]&&r.Gq[e.key].secret?"password":"text"},"env_var_value_".concat(n.toString()))}),(0,x.jsxs)(i.rjZ,{item:!0,xs:2,className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(i.hU,{size:"small",onClick:()=>{const e=[...p];e.push({key:"",value:""}),j(e)},disabled:n!==p.length-1,children:(0,x.jsx)(i.dtP,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(i.hU,{size:"small",onClick:()=>{const a=p.filter(((e,a)=>a!==n));j(a),g([...f,e.key])},disabled:p.length<=1,children:(0,x.jsx)(i.HFL,{})})})]})]},"tenant-envVar-".concat(n.toString()))))}),(0,x.jsx)(i.rjZ,{container:!0,children:(0,x.jsx)(i.rjZ,{item:!0,xs:12,sx:{justifyContent:"end",textAlign:"right",marginBottom:15},children:(0,x.jsx)(i.rsf,{label:"SFTP",indicatorLabels:["Enabled","Disabled"],checked:y,value:"expose_sftp",id:"expose-sftp",name:"expose-sftp",onChange:()=>{k(!y)},description:""})})}),(0,x.jsx)(i.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:(0,x.jsx)(i.zxk,{id:"save-environment-variables",type:"submit",variant:"callAction",disabled:h||v,onClick:()=>u(!0),label:"Save"})})]})]})}}}]); +//# sourceMappingURL=405.6fef1560.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/405.6fef1560.chunk.js.map b/web-app/build/static/js/405.6fef1560.chunk.js.map new file mode 100644 index 00000000000..19c25ad6a2b --- /dev/null +++ b/web-app/build/static/js/405.6fef1560.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/405.6fef1560.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/TenantConfiguration.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n AddIcon,\n Box,\n Button,\n ConfirmModalIcon,\n Grid,\n IconButton,\n InputBox,\n Loader,\n RemoveIcon,\n SectionTitle,\n Switch,\n} from \"mds\";\nimport {\n ITenantConfigurationRequest,\n ITenantConfigurationResponse,\n LabelKeyPair,\n} from \"../types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { MinIOEnvVarsSettings } from \"../../../../common/utils\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\n\nconst TenantConfiguration = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [envVars, setEnvVars] = useState([]);\n const [envVarsToBeDeleted, setEnvVarsToBeDeleted] = useState([]);\n const [sftpExposed, setSftpEnabled] = useState(false);\n\n const getTenantConfigurationInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/configuration`,\n )\n .then((res: ITenantConfigurationResponse) => {\n if (res.environmentVariables) {\n setEnvVars(res.environmentVariables);\n setSftpEnabled(res.sftpExposed);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantConfigurationInfo();\n }\n }, [tenant, getTenantConfigurationInfo]);\n\n const updateTenantConfiguration = () => {\n setIsSending(true);\n let payload: ITenantConfigurationRequest = {\n environmentVariables: envVars.filter((env) => env.key !== \"\"),\n keysToBeDeleted: envVarsToBeDeleted,\n sftpExposed: sftpExposed,\n };\n api\n .invoke(\n \"PATCH\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/configuration`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n setDialogOpen(false);\n getTenantConfigurationInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantConfiguration}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n \n \n \n ) : (\n \n \n Configuration\n \n \n {envVars.map((envVar, index) => (\n \n \n ) => {\n const existingEnvVars = [...envVars];\n\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: e.target.value, value: keyPair.value }\n : keyPair,\n ),\n );\n }}\n index={index}\n key={`env_var_key_${index.toString()}`}\n />\n \n \n ) => {\n const existingEnvVars = [...envVars];\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: keyPair.key, value: e.target.value }\n : keyPair,\n ),\n );\n }}\n index={index}\n key={`env_var_value_${index.toString()}`}\n type={\n MinIOEnvVarsSettings[envVar.key] &&\n MinIOEnvVarsSettings[envVar.key].secret\n ? \"password\"\n : \"text\"\n }\n />\n \n \n
\n {\n const existingEnvVars = [...envVars];\n existingEnvVars.push({ key: \"\", value: \"\" });\n\n setEnvVars(existingEnvVars);\n }}\n disabled={index !== envVars.length - 1}\n >\n \n \n
\n
\n {\n const existingEnvVars = envVars.filter(\n (item, fIndex) => fIndex !== index,\n );\n setEnvVars(existingEnvVars);\n setEnvVarsToBeDeleted([\n ...envVarsToBeDeleted,\n envVar.key,\n ]);\n }}\n disabled={envVars.length <= 1}\n >\n \n \n
\n
\n \n ))}\n \n \n \n {\n setSftpEnabled(!sftpExposed);\n }}\n description=\"\"\n />\n \n \n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n
\n )}\n
\n );\n};\n\nexport default TenantConfiguration;\n"],"names":["TenantConfiguration","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","loadingTenant","isSending","setIsSending","useState","dialogOpen","setDialogOpen","envVars","setEnvVars","envVarsToBeDeleted","setEnvVarsToBeDeleted","sftpExposed","setSftpEnabled","getTenantConfigurationInfo","useCallback","api","invoke","concat","namespace","name","then","res","environmentVariables","catch","err","setErrorSnackMessage","useEffect","_jsxs","Fragment","children","_jsx","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","updateTenantConfiguration","payload","filter","env","key","keysToBeDeleted","confirmationContent","Box","sx","textAlign","Loader","SectionTitle","separator","marginBottom","Grid","container","display","alignItems","justifyContent","borderBottom","flex","minWidth","marginLeft","marginRight","flexFlow","map","envVar","index","item","xs","className","InputBox","id","label","value","onChange","e","existingEnvVars","keyPair","i","target","toString","type","MinIOEnvVarsSettings","secret","IconButton","size","onClick","push","disabled","length","AddIcon","fIndex","RemoveIcon","Switch","indicatorLabels","checked","description","Button","variant"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/411.d1015441.chunk.js b/web-app/build/static/js/411.d1015441.chunk.js deleted file mode 100644 index 6efecf8d25a..00000000000 --- a/web-app/build/static/js/411.d1015441.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[411],{43896:function(e,t,o){o.d(t,{Z:function(){return w}});var r=o(4942),l=o(63366),n=o(87462),i=o(72791),a=o(28182),c=o(94419),s=o(23701),d=o(14036),u=o(31402),f=o(66934),v=o(75878),p=o(21217);function b(e){return(0,p.Z)("MuiTab",e)}var h=(0,v.Z)("MuiTab",["root","labelIcon","textColorInherit","textColorPrimary","textColorSecondary","selected","disabled","fullWidth","wrapped","iconWrapper"]),m=o(80184),S=["className","disabled","disableFocusRipple","fullWidth","icon","iconPosition","indicator","label","onChange","onClick","onFocus","selected","selectionFollowsFocus","textColor","value","wrapped"],Z=(0,f.ZP)(s.Z,{name:"MuiTab",slot:"Root",overridesResolver:function(e,t){var o=e.ownerState;return[t.root,o.label&&o.icon&&t.labelIcon,t["textColor".concat((0,d.Z)(o.textColor))],o.fullWidth&&t.fullWidth,o.wrapped&&t.wrapped]}})((function(e){var t,o,l,i=e.theme,a=e.ownerState;return(0,n.Z)({},i.typography.button,{maxWidth:360,minWidth:90,position:"relative",minHeight:48,flexShrink:0,padding:"12px 16px",overflow:"hidden",whiteSpace:"normal",textAlign:"center"},a.label&&{flexDirection:"top"===a.iconPosition||"bottom"===a.iconPosition?"column":"row"},{lineHeight:1.25},a.icon&&a.label&&(0,r.Z)({minHeight:72,paddingTop:9,paddingBottom:9},"& > .".concat(h.iconWrapper),(0,n.Z)({},"top"===a.iconPosition&&{marginBottom:6},"bottom"===a.iconPosition&&{marginTop:6},"start"===a.iconPosition&&{marginRight:i.spacing(1)},"end"===a.iconPosition&&{marginLeft:i.spacing(1)})),"inherit"===a.textColor&&(t={color:"inherit",opacity:.6},(0,r.Z)(t,"&.".concat(h.selected),{opacity:1}),(0,r.Z)(t,"&.".concat(h.disabled),{opacity:(i.vars||i).palette.action.disabledOpacity}),t),"primary"===a.textColor&&(o={color:(i.vars||i).palette.text.secondary},(0,r.Z)(o,"&.".concat(h.selected),{color:(i.vars||i).palette.primary.main}),(0,r.Z)(o,"&.".concat(h.disabled),{color:(i.vars||i).palette.text.disabled}),o),"secondary"===a.textColor&&(l={color:(i.vars||i).palette.text.secondary},(0,r.Z)(l,"&.".concat(h.selected),{color:(i.vars||i).palette.secondary.main}),(0,r.Z)(l,"&.".concat(h.disabled),{color:(i.vars||i).palette.text.disabled}),l),a.fullWidth&&{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:"none"},a.wrapped&&{fontSize:i.typography.pxToRem(12)})})),w=i.forwardRef((function(e,t){var o=(0,u.Z)({props:e,name:"MuiTab"}),r=o.className,s=o.disabled,f=void 0!==s&&s,v=o.disableFocusRipple,p=void 0!==v&&v,h=o.fullWidth,w=o.icon,x=o.iconPosition,g=void 0===x?"top":x,C=o.indicator,y=o.label,B=o.onChange,M=o.onClick,W=o.onFocus,P=o.selected,E=o.selectionFollowsFocus,R=o.textColor,T=void 0===R?"inherit":R,I=o.value,N=o.wrapped,k=void 0!==N&&N,L=(0,l.Z)(o,S),z=(0,n.Z)({},o,{disabled:f,disableFocusRipple:p,selected:P,icon:!!w,iconPosition:g,label:!!y,fullWidth:h,textColor:T,wrapped:k}),F=function(e){var t=e.classes,o=e.textColor,r=e.fullWidth,l=e.wrapped,n=e.icon,i=e.label,a=e.selected,s=e.disabled,u={root:["root",n&&i&&"labelIcon","textColor".concat((0,d.Z)(o)),r&&"fullWidth",l&&"wrapped",a&&"selected",s&&"disabled"],iconWrapper:["iconWrapper"]};return(0,c.Z)(u,b,t)}(z),A=w&&y&&i.isValidElement(w)?i.cloneElement(w,{className:(0,a.Z)(F.iconWrapper,w.props.className)}):w;return(0,m.jsxs)(Z,(0,n.Z)({focusRipple:!p,className:(0,a.Z)(F.root,r),ref:t,role:"tab","aria-selected":P,disabled:f,onClick:function(e){!P&&B&&B(e,I),M&&M(e)},onFocus:function(e){E&&!P&&B&&B(e,I),W&&W(e)},ownerState:z,tabIndex:P?0:-1},L,{children:["top"===g||"start"===g?(0,m.jsxs)(i.Fragment,{children:[A,y]}):(0,m.jsxs)(i.Fragment,{children:[y,A]}),C]}))}))},25228:function(e,t,o){o.d(t,{Z:function(){return U}});var r,l=o(29439),n=o(4942),i=o(63366),a=o(87462),c=o(72791),s=(o(57441),o(28182)),d=o(94419),u=o(21607),f=o(66934),v=o(31402),p=o(13967),b=o(83199);function h(){if(r)return r;var e=document.createElement("div"),t=document.createElement("div");return t.style.width="10px",t.style.height="1px",e.appendChild(t),e.dir="rtl",e.style.fontSize="14px",e.style.width="4px",e.style.height="1px",e.style.position="absolute",e.style.top="-1000px",e.style.overflow="scroll",document.body.appendChild(e),r="reverse",e.scrollLeft>0?r="default":(e.scrollLeft=1,0===e.scrollLeft&&(r="negative")),document.body.removeChild(e),r}function m(e,t){var o=e.scrollLeft;if("rtl"!==t)return o;switch(h()){case"negative":return e.scrollWidth-e.clientWidth+o;case"reverse":return e.scrollWidth-e.clientWidth-o;default:return o}}function S(e){return(1+Math.sin(Math.PI*e-Math.PI/2))/2}var Z=o(40162),w=o(17602),x=o(80184),g=["onChange"],C={width:99,height:99,position:"absolute",top:-9999,overflow:"scroll"};var y=o(76189),B=(0,y.Z)((0,x.jsx)("path",{d:"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"}),"KeyboardArrowLeft"),M=(0,y.Z)((0,x.jsx)("path",{d:"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"}),"KeyboardArrowRight"),W=o(23701),P=o(75878),E=o(21217);function R(e){return(0,E.Z)("MuiTabScrollButton",e)}var T=(0,P.Z)("MuiTabScrollButton",["root","vertical","horizontal","disabled"]),I=["className","slots","slotProps","direction","orientation","disabled"],N=(0,f.ZP)(W.Z,{name:"MuiTabScrollButton",slot:"Root",overridesResolver:function(e,t){var o=e.ownerState;return[t.root,o.orientation&&t[o.orientation]]}})((function(e){var t=e.ownerState;return(0,a.Z)((0,n.Z)({width:40,flexShrink:0,opacity:.8},"&.".concat(T.disabled),{opacity:0}),"vertical"===t.orientation&&{width:"100%",height:40,"& svg":{transform:"rotate(".concat(t.isRtl?-90:90,"deg)")}})})),k=c.forwardRef((function(e,t){var o,r,l=(0,v.Z)({props:e,name:"MuiTabScrollButton"}),n=l.className,c=l.slots,f=void 0===c?{}:c,b=l.slotProps,h=void 0===b?{}:b,m=l.direction,S=(0,i.Z)(l,I),Z="rtl"===(0,p.Z)().direction,w=(0,a.Z)({isRtl:Z},l),g=function(e){var t=e.classes,o={root:["root",e.orientation,e.disabled&&"disabled"]};return(0,d.Z)(o,R,t)}(w),C=null!=(o=f.StartScrollButtonIcon)?o:B,y=null!=(r=f.EndScrollButtonIcon)?r:M,W=(0,u.Z)({elementType:C,externalSlotProps:h.startScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:w}),P=(0,u.Z)({elementType:y,externalSlotProps:h.endScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:w});return(0,x.jsx)(N,(0,a.Z)({component:"div",className:(0,s.Z)(g.root,n),ref:t,role:null,ownerState:w,tabIndex:null},S,{children:"left"===m?(0,x.jsx)(C,(0,a.Z)({},W)):(0,x.jsx)(y,(0,a.Z)({},P))}))})),L=o(89683);function z(e){return(0,E.Z)("MuiTabs",e)}var F=(0,P.Z)("MuiTabs",["root","vertical","flexContainer","flexContainerVertical","centered","scroller","fixed","scrollableX","scrollableY","hideScrollbar","scrollButtons","scrollButtonsHideMobile","indicator"]),A=o(98301),H=["aria-label","aria-labelledby","action","centered","children","className","component","allowScrollButtonsMobile","indicatorColor","onChange","orientation","ScrollButtonComponent","scrollButtons","selectionFollowsFocus","slots","slotProps","TabIndicatorProps","TabScrollButtonProps","textColor","value","variant","visibleScrollbar"],j=function(e,t){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:e.firstChild},X=function(e,t){return e===t?e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:e.lastChild},Y=function(e,t,o){for(var r=!1,l=o(e,t);l;){if(l===e.firstChild){if(r)return;r=!0}var n=l.disabled||"true"===l.getAttribute("aria-disabled");if(l.hasAttribute("tabindex")&&!n)return void l.focus();l=o(e,l)}},D=(0,f.ZP)("div",{name:"MuiTabs",slot:"Root",overridesResolver:function(e,t){var o=e.ownerState;return[(0,n.Z)({},"& .".concat(F.scrollButtons),t.scrollButtons),(0,n.Z)({},"& .".concat(F.scrollButtons),o.scrollButtonsHideMobile&&t.scrollButtonsHideMobile),t.root,o.vertical&&t.vertical]}})((function(e){var t=e.ownerState,o=e.theme;return(0,a.Z)({overflow:"hidden",minHeight:48,WebkitOverflowScrolling:"touch",display:"flex"},t.vertical&&{flexDirection:"column"},t.scrollButtonsHideMobile&&(0,n.Z)({},"& .".concat(F.scrollButtons),(0,n.Z)({},o.breakpoints.down("sm"),{display:"none"})))})),V=(0,f.ZP)("div",{name:"MuiTabs",slot:"Scroller",overridesResolver:function(e,t){var o=e.ownerState;return[t.scroller,o.fixed&&t.fixed,o.hideScrollbar&&t.hideScrollbar,o.scrollableX&&t.scrollableX,o.scrollableY&&t.scrollableY]}})((function(e){var t=e.ownerState;return(0,a.Z)({position:"relative",display:"inline-block",flex:"1 1 auto",whiteSpace:"nowrap"},t.fixed&&{overflowX:"hidden",width:"100%"},t.hideScrollbar&&{scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},t.scrollableX&&{overflowX:"auto",overflowY:"hidden"},t.scrollableY&&{overflowY:"auto",overflowX:"hidden"})})),O=(0,f.ZP)("div",{name:"MuiTabs",slot:"FlexContainer",overridesResolver:function(e,t){var o=e.ownerState;return[t.flexContainer,o.vertical&&t.flexContainerVertical,o.centered&&t.centered]}})((function(e){var t=e.ownerState;return(0,a.Z)({display:"flex"},t.vertical&&{flexDirection:"column"},t.centered&&{justifyContent:"center"})})),q=(0,f.ZP)("span",{name:"MuiTabs",slot:"Indicator",overridesResolver:function(e,t){return t.indicator}})((function(e){var t=e.ownerState,o=e.theme;return(0,a.Z)({position:"absolute",height:2,bottom:0,width:"100%",transition:o.transitions.create()},"primary"===t.indicatorColor&&{backgroundColor:(o.vars||o).palette.primary.main},"secondary"===t.indicatorColor&&{backgroundColor:(o.vars||o).palette.secondary.main},t.vertical&&{height:"100%",width:2,right:0})})),K=(0,f.ZP)((function(e){var t=e.onChange,o=(0,i.Z)(e,g),r=c.useRef(),l=c.useRef(null),n=function(){r.current=l.current.offsetHeight-l.current.clientHeight};return(0,Z.Z)((function(){var e=(0,b.Z)((function(){var e=r.current;n(),e!==r.current&&t(r.current)})),o=(0,w.Z)(l.current);return o.addEventListener("resize",e),function(){e.clear(),o.removeEventListener("resize",e)}}),[t]),c.useEffect((function(){n(),t(r.current)}),[t]),(0,x.jsx)("div",(0,a.Z)({style:C,ref:l},o))}),{name:"MuiTabs",slot:"ScrollbarSize"})({overflowX:"auto",overflowY:"hidden",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}),_={},G=c.forwardRef((function(e,t){var o=(0,v.Z)({props:e,name:"MuiTabs"}),r=(0,p.Z)(),f="rtl"===r.direction,Z=o["aria-label"],g=o["aria-labelledby"],C=o.action,y=o.centered,B=void 0!==y&&y,M=o.children,W=o.className,P=o.component,E=void 0===P?"div":P,R=o.allowScrollButtonsMobile,T=void 0!==R&&R,I=o.indicatorColor,N=void 0===I?"primary":I,F=o.onChange,G=o.orientation,U=void 0===G?"horizontal":G,J=o.ScrollButtonComponent,Q=void 0===J?k:J,$=o.scrollButtons,ee=void 0===$?"auto":$,te=o.selectionFollowsFocus,oe=o.slots,re=void 0===oe?{}:oe,le=o.slotProps,ne=void 0===le?{}:le,ie=o.TabIndicatorProps,ae=void 0===ie?{}:ie,ce=o.TabScrollButtonProps,se=void 0===ce?{}:ce,de=o.textColor,ue=void 0===de?"primary":de,fe=o.value,ve=o.variant,pe=void 0===ve?"standard":ve,be=o.visibleScrollbar,he=void 0!==be&&be,me=(0,i.Z)(o,H),Se="scrollable"===pe,Ze="vertical"===U,we=Ze?"scrollTop":"scrollLeft",xe=Ze?"top":"left",ge=Ze?"bottom":"right",Ce=Ze?"clientHeight":"clientWidth",ye=Ze?"height":"width",Be=(0,a.Z)({},o,{component:E,allowScrollButtonsMobile:T,indicatorColor:N,orientation:U,vertical:Ze,scrollButtons:ee,textColor:ue,variant:pe,visibleScrollbar:he,fixed:!Se,hideScrollbar:Se&&!he,scrollableX:Se&&!Ze,scrollableY:Se&&Ze,centered:B&&!Se,scrollButtonsHideMobile:!T}),Me=function(e){var t=e.vertical,o=e.fixed,r=e.hideScrollbar,l=e.scrollableX,n=e.scrollableY,i=e.centered,a=e.scrollButtonsHideMobile,c=e.classes,s={root:["root",t&&"vertical"],scroller:["scroller",o&&"fixed",r&&"hideScrollbar",l&&"scrollableX",n&&"scrollableY"],flexContainer:["flexContainer",t&&"flexContainerVertical",i&&"centered"],indicator:["indicator"],scrollButtons:["scrollButtons",a&&"scrollButtonsHideMobile"],scrollableX:[l&&"scrollableX"],hideScrollbar:[r&&"hideScrollbar"]};return(0,d.Z)(s,z,c)}(Be),We=(0,u.Z)({elementType:re.StartScrollButtonIcon,externalSlotProps:ne.startScrollButtonIcon,ownerState:Be}),Pe=(0,u.Z)({elementType:re.EndScrollButtonIcon,externalSlotProps:ne.endScrollButtonIcon,ownerState:Be});var Ee=c.useState(!1),Re=(0,l.Z)(Ee,2),Te=Re[0],Ie=Re[1],Ne=c.useState(_),ke=(0,l.Z)(Ne,2),Le=ke[0],ze=ke[1],Fe=c.useState({start:!1,end:!1}),Ae=(0,l.Z)(Fe,2),He=Ae[0],je=Ae[1],Xe=c.useState({overflow:"hidden",scrollbarWidth:0}),Ye=(0,l.Z)(Xe,2),De=Ye[0],Ve=Ye[1],Oe=new Map,qe=c.useRef(null),Ke=c.useRef(null),_e=function(){var e,t,o=qe.current;if(o){var l=o.getBoundingClientRect();e={clientWidth:o.clientWidth,scrollLeft:o.scrollLeft,scrollTop:o.scrollTop,scrollLeftNormalized:m(o,r.direction),scrollWidth:o.scrollWidth,top:l.top,bottom:l.bottom,left:l.left,right:l.right}}if(o&&!1!==fe){var n=Ke.current.children;if(n.length>0){var i=n[Oe.get(fe)];0,t=i?i.getBoundingClientRect():null}}return{tabsMeta:e,tabMeta:t}},Ge=(0,L.Z)((function(){var e,t,o=_e(),r=o.tabsMeta,l=o.tabMeta,i=0;if(Ze)t="top",l&&r&&(i=l.top-r.top+r.scrollTop);else if(t=f?"right":"left",l&&r){var a=f?r.scrollLeftNormalized+r.clientWidth-r.scrollWidth:r.scrollLeft;i=(f?-1:1)*(l[t]-r[t]+a)}var c=(e={},(0,n.Z)(e,t,i),(0,n.Z)(e,ye,l?l[ye]:0),e);if(isNaN(Le[t])||isNaN(Le[ye]))ze(c);else{var s=Math.abs(Le[t]-c[t]),d=Math.abs(Le[ye]-c[ye]);(s>=1||d>=1)&&ze(c)}})),Ue=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).animation;void 0===t||t?function(e,t,o){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){},n=r.ease,i=void 0===n?S:n,a=r.duration,c=void 0===a?300:a,s=null,d=t[e],u=!1,f=function(){u=!0};d===o?l(new Error("Element already at target position")):requestAnimationFrame((function r(n){if(u)l(new Error("Animation cancelled"));else{null===s&&(s=n);var a=Math.min(1,(n-s)/c);t[e]=i(a)*(o-d)+d,a>=1?requestAnimationFrame((function(){l(null)})):requestAnimationFrame(r)}}))}(we,qe.current,e,{duration:r.transitions.duration.standard}):qe.current[we]=e},Je=function(e){var t=qe.current[we];Ze?t+=e:(t+=e*(f?-1:1),t*=f&&"reverse"===h()?-1:1),Ue(t)},Qe=function(){for(var e=qe.current[Ce],t=0,o=Array.from(Ke.current.children),r=0;re){0===r&&(t=e);break}t+=l[Ce]}return t},$e=function(){Je(-1*Qe())},et=function(){Je(Qe())},tt=c.useCallback((function(e){Ve({overflow:null,scrollbarWidth:e})}),[]),ot=(0,L.Z)((function(e){var t=_e(),o=t.tabsMeta,r=t.tabMeta;if(r&&o)if(r[xe]o[ge]){var n=o[we]+(r[ge]-o[ge]);Ue(n,{animation:e})}})),rt=(0,L.Z)((function(){if(Se&&!1!==ee){var e,t,o=qe.current,l=o.scrollTop,n=o.scrollHeight,i=o.clientHeight,a=o.scrollWidth,c=o.clientWidth;if(Ze)e=l>1,t=l1,t=f?s>1:s {\n const {\n classes,\n textColor,\n fullWidth,\n wrapped,\n icon,\n label,\n selected,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', icon && label && 'labelIcon', `textColor${capitalize(textColor)}`, fullWidth && 'fullWidth', wrapped && 'wrapped', selected && 'selected', disabled && 'disabled'],\n iconWrapper: ['iconWrapper']\n };\n return composeClasses(slots, getTabUtilityClass, classes);\n};\nconst TabRoot = styled(ButtonBase, {\n name: 'MuiTab',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.label && ownerState.icon && styles.labelIcon, styles[`textColor${capitalize(ownerState.textColor)}`], ownerState.fullWidth && styles.fullWidth, ownerState.wrapped && styles.wrapped];\n }\n})(({\n theme,\n ownerState\n}) => _extends({}, theme.typography.button, {\n maxWidth: 360,\n minWidth: 90,\n position: 'relative',\n minHeight: 48,\n flexShrink: 0,\n padding: '12px 16px',\n overflow: 'hidden',\n whiteSpace: 'normal',\n textAlign: 'center'\n}, ownerState.label && {\n flexDirection: ownerState.iconPosition === 'top' || ownerState.iconPosition === 'bottom' ? 'column' : 'row'\n}, {\n lineHeight: 1.25\n}, ownerState.icon && ownerState.label && {\n minHeight: 72,\n paddingTop: 9,\n paddingBottom: 9,\n [`& > .${tabClasses.iconWrapper}`]: _extends({}, ownerState.iconPosition === 'top' && {\n marginBottom: 6\n }, ownerState.iconPosition === 'bottom' && {\n marginTop: 6\n }, ownerState.iconPosition === 'start' && {\n marginRight: theme.spacing(1)\n }, ownerState.iconPosition === 'end' && {\n marginLeft: theme.spacing(1)\n })\n}, ownerState.textColor === 'inherit' && {\n color: 'inherit',\n opacity: 0.6,\n // same opacity as theme.palette.text.secondary\n [`&.${tabClasses.selected}`]: {\n opacity: 1\n },\n [`&.${tabClasses.disabled}`]: {\n opacity: (theme.vars || theme).palette.action.disabledOpacity\n }\n}, ownerState.textColor === 'primary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${tabClasses.selected}`]: {\n color: (theme.vars || theme).palette.primary.main\n },\n [`&.${tabClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.textColor === 'secondary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${tabClasses.selected}`]: {\n color: (theme.vars || theme).palette.secondary.main\n },\n [`&.${tabClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.fullWidth && {\n flexShrink: 1,\n flexGrow: 1,\n flexBasis: 0,\n maxWidth: 'none'\n}, ownerState.wrapped && {\n fontSize: theme.typography.pxToRem(12)\n}));\nconst Tab = /*#__PURE__*/React.forwardRef(function Tab(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTab'\n });\n const {\n className,\n disabled = false,\n disableFocusRipple = false,\n // eslint-disable-next-line react/prop-types\n fullWidth,\n icon: iconProp,\n iconPosition = 'top',\n // eslint-disable-next-line react/prop-types\n indicator,\n label,\n onChange,\n onClick,\n onFocus,\n // eslint-disable-next-line react/prop-types\n selected,\n // eslint-disable-next-line react/prop-types\n selectionFollowsFocus,\n // eslint-disable-next-line react/prop-types\n textColor = 'inherit',\n value,\n wrapped = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n disabled,\n disableFocusRipple,\n selected,\n icon: !!iconProp,\n iconPosition,\n label: !!label,\n fullWidth,\n textColor,\n wrapped\n });\n const classes = useUtilityClasses(ownerState);\n const icon = iconProp && label && /*#__PURE__*/React.isValidElement(iconProp) ? /*#__PURE__*/React.cloneElement(iconProp, {\n className: clsx(classes.iconWrapper, iconProp.props.className)\n }) : iconProp;\n const handleClick = event => {\n if (!selected && onChange) {\n onChange(event, value);\n }\n if (onClick) {\n onClick(event);\n }\n };\n const handleFocus = event => {\n if (selectionFollowsFocus && !selected && onChange) {\n onChange(event, value);\n }\n if (onFocus) {\n onFocus(event);\n }\n };\n return /*#__PURE__*/_jsxs(TabRoot, _extends({\n focusRipple: !disableFocusRipple,\n className: clsx(classes.root, className),\n ref: ref,\n role: \"tab\",\n \"aria-selected\": selected,\n disabled: disabled,\n onClick: handleClick,\n onFocus: handleFocus,\n ownerState: ownerState,\n tabIndex: selected ? 0 : -1\n }, other, {\n children: [iconPosition === 'top' || iconPosition === 'start' ? /*#__PURE__*/_jsxs(React.Fragment, {\n children: [icon, label]\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [label, icon]\n }), indicator]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Tab.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * This prop isn't supported.\n * Use the `component` prop if you need to change the children structure.\n */\n children: unsupportedProp,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: PropTypes.bool,\n /**\n * If `true`, the ripple effect is disabled.\n *\n * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n * @default false\n */\n disableRipple: PropTypes.bool,\n /**\n * The icon to display.\n */\n icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\n /**\n * The position of the icon relative to the label.\n * @default 'top'\n */\n iconPosition: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n /**\n * The label element.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n onChange: PropTypes.func,\n /**\n * @ignore\n */\n onClick: PropTypes.func,\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * You can provide your own value. Otherwise, we fallback to the child position index.\n */\n value: PropTypes.any,\n /**\n * Tab labels appear in a single row.\n * They can use a second line if needed.\n * @default false\n */\n wrapped: PropTypes.bool\n} : void 0;\nexport default Tab;","// Source from https://github.com/alitaheri/normalize-scroll-left\nlet cachedType;\n\n/**\n * Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type\n *\n * Types of scrollLeft, assuming scrollWidth=100 and direction is rtl.\n *\n * Type | <- Most Left | Most Right -> | Initial\n * ---------------- | ------------ | ------------- | -------\n * default | 0 | 100 | 100\n * negative (spec*) | -100 | 0 | 0\n * reverse | 100 | 0 | 0\n *\n * Edge 85: default\n * Safari 14: negative\n * Chrome 85: negative\n * Firefox 81: negative\n * IE11: reverse\n *\n * spec* https://drafts.csswg.org/cssom-view/#dom-window-scroll\n */\nexport function detectScrollType() {\n if (cachedType) {\n return cachedType;\n }\n const dummy = document.createElement('div');\n const container = document.createElement('div');\n container.style.width = '10px';\n container.style.height = '1px';\n dummy.appendChild(container);\n dummy.dir = 'rtl';\n dummy.style.fontSize = '14px';\n dummy.style.width = '4px';\n dummy.style.height = '1px';\n dummy.style.position = 'absolute';\n dummy.style.top = '-1000px';\n dummy.style.overflow = 'scroll';\n document.body.appendChild(dummy);\n cachedType = 'reverse';\n if (dummy.scrollLeft > 0) {\n cachedType = 'default';\n } else {\n dummy.scrollLeft = 1;\n if (dummy.scrollLeft === 0) {\n cachedType = 'negative';\n }\n }\n document.body.removeChild(dummy);\n return cachedType;\n}\n\n// Based on https://stackoverflow.com/a/24394376\nexport function getNormalizedScrollLeft(element, direction) {\n const scrollLeft = element.scrollLeft;\n\n // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior\n if (direction !== 'rtl') {\n return scrollLeft;\n }\n const type = detectScrollType();\n switch (type) {\n case 'negative':\n return element.scrollWidth - element.clientWidth + scrollLeft;\n case 'reverse':\n return element.scrollWidth - element.clientWidth - scrollLeft;\n default:\n return scrollLeft;\n }\n}","function easeInOutSin(time) {\n return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\nexport default function animate(property, element, to, options = {}, cb = () => {}) {\n const {\n ease = easeInOutSin,\n duration = 300 // standard\n } = options;\n let start = null;\n const from = element[property];\n let cancelled = false;\n const cancel = () => {\n cancelled = true;\n };\n const step = timestamp => {\n if (cancelled) {\n cb(new Error('Animation cancelled'));\n return;\n }\n if (start === null) {\n start = timestamp;\n }\n const time = Math.min(1, (timestamp - start) / duration);\n element[property] = ease(time) * (to - from) + from;\n if (time >= 1) {\n requestAnimationFrame(() => {\n cb(null);\n });\n return;\n }\n requestAnimationFrame(step);\n };\n if (from === to) {\n cb(new Error('Element already at target position'));\n return cancel;\n }\n requestAnimationFrame(step);\n return cancel;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"onChange\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nimport { ownerWindow, unstable_useEnhancedEffect as useEnhancedEffect } from '../utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n width: 99,\n height: 99,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll'\n};\n\n/**\n * @ignore - internal component.\n * The component originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\nexport default function ScrollbarSize(props) {\n const {\n onChange\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const scrollbarHeight = React.useRef();\n const nodeRef = React.useRef(null);\n const setMeasurements = () => {\n scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n };\n useEnhancedEffect(() => {\n const handleResize = debounce(() => {\n const prevHeight = scrollbarHeight.current;\n setMeasurements();\n if (prevHeight !== scrollbarHeight.current) {\n onChange(scrollbarHeight.current);\n }\n });\n const containerWindow = ownerWindow(nodeRef.current);\n containerWindow.addEventListener('resize', handleResize);\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener('resize', handleResize);\n };\n }, [onChange]);\n React.useEffect(() => {\n setMeasurements();\n onChange(scrollbarHeight.current);\n }, [onChange]);\n return /*#__PURE__*/_jsx(\"div\", _extends({\n style: styles,\n ref: nodeRef\n }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? ScrollbarSize.propTypes = {\n onChange: PropTypes.func.isRequired\n} : void 0;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getTabScrollButtonUtilityClass(slot) {\n return generateUtilityClass('MuiTabScrollButton', slot);\n}\nconst tabScrollButtonClasses = generateUtilityClasses('MuiTabScrollButton', ['root', 'vertical', 'horizontal', 'disabled']);\nexport default tabScrollButtonClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"slots\", \"slotProps\", \"direction\", \"orientation\", \"disabled\"];\n/* eslint-disable jsx-a11y/aria-role */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses, useSlotProps } from '@mui/base';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport ButtonBase from '../ButtonBase';\nimport useTheme from '../styles/useTheme';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport tabScrollButtonClasses, { getTabScrollButtonUtilityClass } from './tabScrollButtonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n orientation,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', orientation, disabled && 'disabled']\n };\n return composeClasses(slots, getTabScrollButtonUtilityClass, classes);\n};\nconst TabScrollButtonRoot = styled(ButtonBase, {\n name: 'MuiTabScrollButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.orientation && styles[ownerState.orientation]];\n }\n})(({\n ownerState\n}) => _extends({\n width: 40,\n flexShrink: 0,\n opacity: 0.8,\n [`&.${tabScrollButtonClasses.disabled}`]: {\n opacity: 0\n }\n}, ownerState.orientation === 'vertical' && {\n width: '100%',\n height: 40,\n '& svg': {\n transform: `rotate(${ownerState.isRtl ? -90 : 90}deg)`\n }\n}));\nconst TabScrollButton = /*#__PURE__*/React.forwardRef(function TabScrollButton(inProps, ref) {\n var _slots$StartScrollBut, _slots$EndScrollButto;\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTabScrollButton'\n });\n const {\n className,\n slots = {},\n slotProps = {},\n direction\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const theme = useTheme();\n const isRtl = theme.direction === 'rtl';\n const ownerState = _extends({\n isRtl\n }, props);\n const classes = useUtilityClasses(ownerState);\n const StartButtonIcon = (_slots$StartScrollBut = slots.StartScrollButtonIcon) != null ? _slots$StartScrollBut : KeyboardArrowLeft;\n const EndButtonIcon = (_slots$EndScrollButto = slots.EndScrollButtonIcon) != null ? _slots$EndScrollButto : KeyboardArrowRight;\n const startButtonIconProps = useSlotProps({\n elementType: StartButtonIcon,\n externalSlotProps: slotProps.startScrollButtonIcon,\n additionalProps: {\n fontSize: 'small'\n },\n ownerState\n });\n const endButtonIconProps = useSlotProps({\n elementType: EndButtonIcon,\n externalSlotProps: slotProps.endScrollButtonIcon,\n additionalProps: {\n fontSize: 'small'\n },\n ownerState\n });\n return /*#__PURE__*/_jsx(TabScrollButtonRoot, _extends({\n component: \"div\",\n className: clsx(classes.root, className),\n ref: ref,\n role: null,\n ownerState: ownerState,\n tabIndex: null\n }, other, {\n children: direction === 'left' ? /*#__PURE__*/_jsx(StartButtonIcon, _extends({}, startButtonIconProps)) : /*#__PURE__*/_jsx(EndButtonIcon, _extends({}, endButtonIconProps))\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabScrollButton.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The direction the button should indicate.\n */\n direction: PropTypes.oneOf(['left', 'right']).isRequired,\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * The component orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired,\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n * @default {}\n */\n slotProps: PropTypes.shape({\n endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n }),\n /**\n * The components used for each slot inside.\n * @default {}\n */\n slots: PropTypes.shape({\n EndScrollButtonIcon: PropTypes.elementType,\n StartScrollButtonIcon: PropTypes.elementType\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default TabScrollButton;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getTabsUtilityClass(slot) {\n return generateUtilityClass('MuiTabs', slot);\n}\nconst tabsClasses = generateUtilityClasses('MuiTabs', ['root', 'vertical', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);\nexport default tabsClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"aria-label\", \"aria-labelledby\", \"action\", \"centered\", \"children\", \"className\", \"component\", \"allowScrollButtonsMobile\", \"indicatorColor\", \"onChange\", \"orientation\", \"ScrollButtonComponent\", \"scrollButtons\", \"selectionFollowsFocus\", \"slots\", \"slotProps\", \"TabIndicatorProps\", \"TabScrollButtonProps\", \"textColor\", \"value\", \"variant\", \"visibleScrollbar\"];\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses, useSlotProps } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useTheme from '../styles/useTheme';\nimport debounce from '../utils/debounce';\nimport { getNormalizedScrollLeft, detectScrollType } from '../utils/scrollLeft';\nimport animate from '../internal/animate';\nimport ScrollbarSize from './ScrollbarSize';\nimport TabScrollButton from '../TabScrollButton';\nimport useEventCallback from '../utils/useEventCallback';\nimport tabsClasses, { getTabsUtilityClass } from './tabsClasses';\nimport ownerDocument from '../utils/ownerDocument';\nimport ownerWindow from '../utils/ownerWindow';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst nextItem = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n if (item && item.nextElementSibling) {\n return item.nextElementSibling;\n }\n return list.firstChild;\n};\nconst previousItem = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n if (item && item.previousElementSibling) {\n return item.previousElementSibling;\n }\n return list.lastChild;\n};\nconst moveFocus = (list, currentFocus, traversalFunction) => {\n let wrappedOnce = false;\n let nextFocus = traversalFunction(list, currentFocus);\n while (nextFocus) {\n // Prevent infinite loop.\n if (nextFocus === list.firstChild) {\n if (wrappedOnce) {\n return;\n }\n wrappedOnce = true;\n }\n\n // Same logic as useAutocomplete.js\n const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {\n // Move to the next element.\n nextFocus = traversalFunction(list, nextFocus);\n } else {\n nextFocus.focus();\n return;\n }\n }\n};\nconst useUtilityClasses = ownerState => {\n const {\n vertical,\n fixed,\n hideScrollbar,\n scrollableX,\n scrollableY,\n centered,\n scrollButtonsHideMobile,\n classes\n } = ownerState;\n const slots = {\n root: ['root', vertical && 'vertical'],\n scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],\n flexContainer: ['flexContainer', vertical && 'flexContainerVertical', centered && 'centered'],\n indicator: ['indicator'],\n scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],\n scrollableX: [scrollableX && 'scrollableX'],\n hideScrollbar: [hideScrollbar && 'hideScrollbar']\n };\n return composeClasses(slots, getTabsUtilityClass, classes);\n};\nconst TabsRoot = styled('div', {\n name: 'MuiTabs',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${tabsClasses.scrollButtons}`]: styles.scrollButtons\n }, {\n [`& .${tabsClasses.scrollButtons}`]: ownerState.scrollButtonsHideMobile && styles.scrollButtonsHideMobile\n }, styles.root, ownerState.vertical && styles.vertical];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n overflow: 'hidden',\n minHeight: 48,\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling: 'touch',\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.scrollButtonsHideMobile && {\n [`& .${tabsClasses.scrollButtons}`]: {\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n }\n}));\nconst TabsScroller = styled('div', {\n name: 'MuiTabs',\n slot: 'Scroller',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.scroller, ownerState.fixed && styles.fixed, ownerState.hideScrollbar && styles.hideScrollbar, ownerState.scrollableX && styles.scrollableX, ownerState.scrollableY && styles.scrollableY];\n }\n})(({\n ownerState\n}) => _extends({\n position: 'relative',\n display: 'inline-block',\n flex: '1 1 auto',\n whiteSpace: 'nowrap'\n}, ownerState.fixed && {\n overflowX: 'hidden',\n width: '100%'\n}, ownerState.hideScrollbar && {\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n }\n}, ownerState.scrollableX && {\n overflowX: 'auto',\n overflowY: 'hidden'\n}, ownerState.scrollableY && {\n overflowY: 'auto',\n overflowX: 'hidden'\n}));\nconst FlexContainer = styled('div', {\n name: 'MuiTabs',\n slot: 'FlexContainer',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.centered && {\n justifyContent: 'center'\n}));\nconst TabsIndicator = styled('span', {\n name: 'MuiTabs',\n slot: 'Indicator',\n overridesResolver: (props, styles) => styles.indicator\n})(({\n ownerState,\n theme\n}) => _extends({\n position: 'absolute',\n height: 2,\n bottom: 0,\n width: '100%',\n transition: theme.transitions.create()\n}, ownerState.indicatorColor === 'primary' && {\n backgroundColor: (theme.vars || theme).palette.primary.main\n}, ownerState.indicatorColor === 'secondary' && {\n backgroundColor: (theme.vars || theme).palette.secondary.main\n}, ownerState.vertical && {\n height: '100%',\n width: 2,\n right: 0\n}));\nconst TabsScrollbarSize = styled(ScrollbarSize, {\n name: 'MuiTabs',\n slot: 'ScrollbarSize'\n})({\n overflowX: 'auto',\n overflowY: 'hidden',\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n }\n});\n\nconst defaultIndicatorStyle = {};\nlet warnedOnceTabPresent = false;\nconst Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTabs'\n });\n const theme = useTheme();\n const isRtl = theme.direction === 'rtl';\n const {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n action,\n centered = false,\n children: childrenProp,\n className,\n component = 'div',\n allowScrollButtonsMobile = false,\n indicatorColor = 'primary',\n onChange,\n orientation = 'horizontal',\n ScrollButtonComponent = TabScrollButton,\n scrollButtons = 'auto',\n selectionFollowsFocus,\n slots = {},\n slotProps = {},\n TabIndicatorProps = {},\n TabScrollButtonProps = {},\n textColor = 'primary',\n value,\n variant = 'standard',\n visibleScrollbar = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const scrollable = variant === 'scrollable';\n const vertical = orientation === 'vertical';\n const scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n const start = vertical ? 'top' : 'left';\n const end = vertical ? 'bottom' : 'right';\n const clientSize = vertical ? 'clientHeight' : 'clientWidth';\n const size = vertical ? 'height' : 'width';\n const ownerState = _extends({}, props, {\n component,\n allowScrollButtonsMobile,\n indicatorColor,\n orientation,\n vertical,\n scrollButtons,\n textColor,\n variant,\n visibleScrollbar,\n fixed: !scrollable,\n hideScrollbar: scrollable && !visibleScrollbar,\n scrollableX: scrollable && !vertical,\n scrollableY: scrollable && vertical,\n centered: centered && !scrollable,\n scrollButtonsHideMobile: !allowScrollButtonsMobile\n });\n const classes = useUtilityClasses(ownerState);\n const startScrollButtonIconProps = useSlotProps({\n elementType: slots.StartScrollButtonIcon,\n externalSlotProps: slotProps.startScrollButtonIcon,\n ownerState\n });\n const endScrollButtonIconProps = useSlotProps({\n elementType: slots.EndScrollButtonIcon,\n externalSlotProps: slotProps.endScrollButtonIcon,\n ownerState\n });\n if (process.env.NODE_ENV !== 'production') {\n if (centered && scrollable) {\n console.error('MUI: You can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n }\n }\n const [mounted, setMounted] = React.useState(false);\n const [indicatorStyle, setIndicatorStyle] = React.useState(defaultIndicatorStyle);\n const [displayScroll, setDisplayScroll] = React.useState({\n start: false,\n end: false\n });\n const [scrollerStyle, setScrollerStyle] = React.useState({\n overflow: 'hidden',\n scrollbarWidth: 0\n });\n const valueToIndex = new Map();\n const tabsRef = React.useRef(null);\n const tabListRef = React.useRef(null);\n const getTabsMeta = () => {\n const tabsNode = tabsRef.current;\n let tabsMeta;\n if (tabsNode) {\n const rect = tabsNode.getBoundingClientRect();\n // create a new object with ClientRect class props + scrollLeft\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollLeftNormalized: getNormalizedScrollLeft(tabsNode, theme.direction),\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right\n };\n }\n let tabMeta;\n if (tabsNode && value !== false) {\n const children = tabListRef.current.children;\n if (children.length > 0) {\n const tab = children[valueToIndex.get(value)];\n if (process.env.NODE_ENV !== 'production') {\n if (!tab) {\n console.error([`MUI: The \\`value\\` provided to the Tabs component is invalid.`, `None of the Tabs' children match with \"${value}\".`, valueToIndex.keys ? `You can provide one of the following values: ${Array.from(valueToIndex.keys()).join(', ')}.` : null].join('\\n'));\n }\n }\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (process.env.NODE_ENV !== 'production') {\n if (process.env.NODE_ENV !== 'test' && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&\n // if the whole Tabs component is hidden, don't warn\n tabsMeta.clientWidth !== 0) {\n tabsMeta = null;\n console.error(['MUI: The `value` provided to the Tabs component is invalid.', `The Tab with this \\`value\\` (\"${value}\") is not part of the document layout.`, \"Make sure the tab item is present in the document or that it's not `display: none`.\"].join('\\n'));\n warnedOnceTabPresent = true;\n }\n }\n }\n }\n return {\n tabsMeta,\n tabMeta\n };\n };\n const updateIndicatorState = useEventCallback(() => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n let startValue = 0;\n let startIndicator;\n if (vertical) {\n startIndicator = 'top';\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n }\n } else {\n startIndicator = isRtl ? 'right' : 'left';\n if (tabMeta && tabsMeta) {\n const correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;\n startValue = (isRtl ? -1 : 1) * (tabMeta[startIndicator] - tabsMeta[startIndicator] + correction);\n }\n }\n const newIndicatorStyle = {\n [startIndicator]: startValue,\n // May be wrong until the font is loaded.\n [size]: tabMeta ? tabMeta[size] : 0\n };\n\n // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n if (isNaN(indicatorStyle[startIndicator]) || isNaN(indicatorStyle[size])) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n const dStart = Math.abs(indicatorStyle[startIndicator] - newIndicatorStyle[startIndicator]);\n const dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n const scroll = (scrollValue, {\n animation = true\n } = {}) => {\n if (animation) {\n animate(scrollStart, tabsRef.current, scrollValue, {\n duration: theme.transitions.duration.standard\n });\n } else {\n tabsRef.current[scrollStart] = scrollValue;\n }\n };\n const moveTabsScroll = delta => {\n let scrollValue = tabsRef.current[scrollStart];\n if (vertical) {\n scrollValue += delta;\n } else {\n scrollValue += delta * (isRtl ? -1 : 1);\n // Fix for Edge\n scrollValue *= isRtl && detectScrollType() === 'reverse' ? -1 : 1;\n }\n scroll(scrollValue);\n };\n const getScrollSize = () => {\n const containerSize = tabsRef.current[clientSize];\n let totalSize = 0;\n const children = Array.from(tabListRef.current.children);\n for (let i = 0; i < children.length; i += 1) {\n const tab = children[i];\n if (totalSize + tab[clientSize] > containerSize) {\n // If the first item is longer than the container size, then only scroll\n // by the container size.\n if (i === 0) {\n totalSize = containerSize;\n }\n break;\n }\n totalSize += tab[clientSize];\n }\n return totalSize;\n };\n const handleStartScrollClick = () => {\n moveTabsScroll(-1 * getScrollSize());\n };\n const handleEndScrollClick = () => {\n moveTabsScroll(getScrollSize());\n };\n\n // TODO Remove as browser support for hiding the scrollbar\n // with CSS improves.\n const handleScrollbarSizeChange = React.useCallback(scrollbarWidth => {\n setScrollerStyle({\n overflow: null,\n scrollbarWidth\n });\n }, []);\n const getConditionalElements = () => {\n const conditionalElements = {};\n conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/_jsx(TabsScrollbarSize, {\n onChange: handleScrollbarSizeChange,\n className: clsx(classes.scrollableX, classes.hideScrollbar)\n }) : null;\n const scrollButtonsActive = displayScroll.start || displayScroll.end;\n const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);\n conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonComponent, _extends({\n slots: {\n StartScrollButtonIcon: slots.StartScrollButtonIcon\n },\n slotProps: {\n startScrollButtonIcon: startScrollButtonIconProps\n },\n orientation: orientation,\n direction: isRtl ? 'right' : 'left',\n onClick: handleStartScrollClick,\n disabled: !displayScroll.start\n }, TabScrollButtonProps, {\n className: clsx(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonComponent, _extends({\n slots: {\n EndScrollButtonIcon: slots.EndScrollButtonIcon\n },\n slotProps: {\n endScrollButtonIcon: endScrollButtonIconProps\n },\n orientation: orientation,\n direction: isRtl ? 'left' : 'right',\n onClick: handleEndScrollClick,\n disabled: !displayScroll.end\n }, TabScrollButtonProps, {\n className: clsx(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n return conditionalElements;\n };\n const scrollSelectedIntoView = useEventCallback(animation => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n if (!tabMeta || !tabsMeta) {\n return;\n }\n if (tabMeta[start] < tabsMeta[start]) {\n // left side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n scroll(nextScrollStart, {\n animation\n });\n } else if (tabMeta[end] > tabsMeta[end]) {\n // right side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n scroll(nextScrollStart, {\n animation\n });\n }\n });\n const updateScrollButtonState = useEventCallback(() => {\n if (scrollable && scrollButtons !== false) {\n const {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollWidth,\n clientWidth\n } = tabsRef.current;\n let showStartScroll;\n let showEndScroll;\n if (vertical) {\n showStartScroll = scrollTop > 1;\n showEndScroll = scrollTop < scrollHeight - clientHeight - 1;\n } else {\n const scrollLeft = getNormalizedScrollLeft(tabsRef.current, theme.direction);\n // use 1 for the potential rounding error with browser zooms.\n showStartScroll = isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n showEndScroll = !isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n }\n if (showStartScroll !== displayScroll.start || showEndScroll !== displayScroll.end) {\n setDisplayScroll({\n start: showStartScroll,\n end: showEndScroll\n });\n }\n }\n });\n React.useEffect(() => {\n const handleResize = debounce(() => {\n // If the Tabs component is replaced by Suspense with a fallback, the last\n // ResizeObserver's handler that runs because of the change in the layout is trying to\n // access a dom node that is no longer there (as the fallback component is being shown instead).\n // See https://github.com/mui/material-ui/issues/33276\n // TODO: Add tests that will ensure the component is not failing when\n // replaced by Suspense with a fallback, once React is updated to version 18\n if (tabsRef.current) {\n updateIndicatorState();\n updateScrollButtonState();\n }\n });\n const win = ownerWindow(tabsRef.current);\n win.addEventListener('resize', handleResize);\n let resizeObserver;\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(handleResize);\n Array.from(tabListRef.current.children).forEach(child => {\n resizeObserver.observe(child);\n });\n }\n return () => {\n handleResize.clear();\n win.removeEventListener('resize', handleResize);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [updateIndicatorState, updateScrollButtonState]);\n const handleTabsScroll = React.useMemo(() => debounce(() => {\n updateScrollButtonState();\n }), [updateScrollButtonState]);\n React.useEffect(() => {\n return () => {\n handleTabsScroll.clear();\n };\n }, [handleTabsScroll]);\n React.useEffect(() => {\n setMounted(true);\n }, []);\n React.useEffect(() => {\n updateIndicatorState();\n updateScrollButtonState();\n });\n React.useEffect(() => {\n // Don't animate on the first render.\n scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n }, [scrollSelectedIntoView, indicatorStyle]);\n React.useImperativeHandle(action, () => ({\n updateIndicator: updateIndicatorState,\n updateScrollButtons: updateScrollButtonState\n }), [updateIndicatorState, updateScrollButtonState]);\n const indicator = /*#__PURE__*/_jsx(TabsIndicator, _extends({}, TabIndicatorProps, {\n className: clsx(classes.indicator, TabIndicatorProps.className),\n ownerState: ownerState,\n style: _extends({}, indicatorStyle, TabIndicatorProps.style)\n }));\n let childIndex = 0;\n const children = React.Children.map(childrenProp, child => {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n return null;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (isFragment(child)) {\n console.error([\"MUI: The Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n const childValue = child.props.value === undefined ? childIndex : child.props.value;\n valueToIndex.set(childValue, childIndex);\n const selected = childValue === value;\n childIndex += 1;\n return /*#__PURE__*/React.cloneElement(child, _extends({\n fullWidth: variant === 'fullWidth',\n indicator: selected && !mounted && indicator,\n selected,\n selectionFollowsFocus,\n onChange,\n textColor,\n value: childValue\n }, childIndex === 1 && value === false && !child.props.tabIndex ? {\n tabIndex: 0\n } : {}));\n });\n const handleKeyDown = event => {\n const list = tabListRef.current;\n const currentFocus = ownerDocument(list).activeElement;\n // Keyboard navigation assumes that [role=\"tab\"] are siblings\n // though we might warn in the future about nested, interactive elements\n // as a a11y violation\n const role = currentFocus.getAttribute('role');\n if (role !== 'tab') {\n return;\n }\n let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';\n let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';\n if (orientation === 'horizontal' && isRtl) {\n // swap previousItemKey with nextItemKey\n previousItemKey = 'ArrowRight';\n nextItemKey = 'ArrowLeft';\n }\n switch (event.key) {\n case previousItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n break;\n case nextItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n break;\n case 'Home':\n event.preventDefault();\n moveFocus(list, null, nextItem);\n break;\n case 'End':\n event.preventDefault();\n moveFocus(list, null, previousItem);\n break;\n default:\n break;\n }\n };\n const conditionalElements = getConditionalElements();\n return /*#__PURE__*/_jsxs(TabsRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref,\n as: component\n }, other, {\n children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/_jsxs(TabsScroller, {\n className: classes.scroller,\n ownerState: ownerState,\n style: {\n overflow: scrollerStyle.overflow,\n [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth\n },\n ref: tabsRef,\n onScroll: handleTabsScroll,\n children: [/*#__PURE__*/_jsx(FlexContainer, {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-orientation\": orientation === 'vertical' ? 'vertical' : null,\n className: classes.flexContainer,\n ownerState: ownerState,\n onKeyDown: handleKeyDown,\n ref: tabListRef,\n role: \"tablist\",\n children: children\n }), mounted && indicator]\n }), conditionalElements.scrollButtonEnd]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Tabs.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Callback fired when the component mounts.\n * This is useful when you want to trigger an action programmatically.\n * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n *\n * @param {object} actions This object contains all possible actions\n * that can be triggered programmatically.\n */\n action: refType,\n /**\n * If `true`, the scroll buttons aren't forced hidden on mobile.\n * By default the scroll buttons are hidden on mobile and takes precedence over `scrollButtons`.\n * @default false\n */\n allowScrollButtonsMobile: PropTypes.bool,\n /**\n * The label for the Tabs as a string.\n */\n 'aria-label': PropTypes.string,\n /**\n * An id or list of ids separated by a space that label the Tabs.\n */\n 'aria-labelledby': PropTypes.string,\n /**\n * If `true`, the tabs are centered.\n * This prop is intended for large views.\n * @default false\n */\n centered: PropTypes.bool,\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Determines the color of the indicator.\n * @default 'primary'\n */\n indicatorColor: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n /**\n * Callback fired when the value changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.\n * @param {any} value We default to the index of the child (number)\n */\n onChange: PropTypes.func,\n /**\n * The component orientation (layout flow direction).\n * @default 'horizontal'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n /**\n * The component used to render the scroll buttons.\n * @default TabScrollButton\n */\n ScrollButtonComponent: PropTypes.elementType,\n /**\n * Determine behavior of scroll buttons when tabs are set to scroll:\n *\n * - `auto` will only present them when not all the items are visible.\n * - `true` will always present them.\n * - `false` will never present them.\n *\n * By default the scroll buttons are hidden on mobile.\n * This behavior can be disabled with `allowScrollButtonsMobile`.\n * @default 'auto'\n */\n scrollButtons: PropTypes /* @typescript-to-proptypes-ignore */.oneOf(['auto', false, true]),\n /**\n * If `true` the selected tab changes on focus. Otherwise it only\n * changes on activation.\n */\n selectionFollowsFocus: PropTypes.bool,\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n * @default {}\n */\n slotProps: PropTypes.shape({\n endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n }),\n /**\n * The components used for each slot inside.\n * @default {}\n */\n slots: PropTypes.shape({\n EndScrollButtonIcon: PropTypes.elementType,\n StartScrollButtonIcon: PropTypes.elementType\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Props applied to the tab indicator element.\n * @default {}\n */\n TabIndicatorProps: PropTypes.object,\n /**\n * Props applied to the [`TabScrollButton`](/material-ui/api/tab-scroll-button/) element.\n * @default {}\n */\n TabScrollButtonProps: PropTypes.object,\n /**\n * Determines the color of the `Tab`.\n * @default 'primary'\n */\n textColor: PropTypes.oneOf(['inherit', 'primary', 'secondary']),\n /**\n * The value of the currently selected `Tab`.\n * If you don't want any selected `Tab`, you can set this prop to `false`.\n */\n value: PropTypes.any,\n /**\n * Determines additional display behavior of the tabs:\n *\n * - `scrollable` will invoke scrolling properties and allow for horizontally\n * scrolling (or swiping) of the tab bar.\n * -`fullWidth` will make the tabs grow to use all the available space,\n * which should be used for small views, like on mobile.\n * - `standard` will render the default state.\n * @default 'standard'\n */\n variant: PropTypes.oneOf(['fullWidth', 'scrollable', 'standard']),\n /**\n * If `true`, the scrollbar is visible. It can be useful when displaying\n * a long vertical list of tabs.\n * @default false\n */\n visibleScrollbar: PropTypes.bool\n} : void 0;\nexport default Tabs;"],"names":["getTabUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","TabRoot","styled","ButtonBase","name","overridesResolver","props","styles","ownerState","root","label","icon","labelIcon","concat","capitalize","textColor","fullWidth","wrapped","_ref","_ref3","_ref4","_ref5","theme","_extends","typography","button","maxWidth","minWidth","position","minHeight","flexShrink","padding","overflow","whiteSpace","textAlign","flexDirection","iconPosition","lineHeight","_defineProperty","paddingTop","paddingBottom","tabClasses","iconWrapper","marginBottom","marginTop","marginRight","spacing","marginLeft","color","opacity","selected","disabled","vars","palette","action","disabledOpacity","text","secondary","primary","main","flexGrow","flexBasis","fontSize","pxToRem","React","inProps","ref","useThemeProps","className","_props$disabled","_props$disableFocusRi","disableFocusRipple","iconProp","_props$iconPosition","indicator","onChange","onClick","onFocus","selectionFollowsFocus","_props$textColor","value","_props$wrapped","other","_objectWithoutPropertiesLoose","classes","slots","composeClasses","useUtilityClasses","clsx","_jsxs","focusRipple","role","event","tabIndex","children","cachedType","detectScrollType","dummy","document","createElement","container","style","width","height","appendChild","dir","top","body","scrollLeft","removeChild","getNormalizedScrollLeft","element","direction","scrollWidth","clientWidth","easeInOutSin","time","Math","sin","PI","createSvgIcon","_jsx","d","getTabScrollButtonUtilityClass","TabScrollButtonRoot","orientation","tabScrollButtonClasses","transform","isRtl","_slots$StartScrollBut","_slots$EndScrollButto","_props$slots","_props$slotProps","slotProps","useTheme","StartButtonIcon","StartScrollButtonIcon","KeyboardArrowLeft","EndButtonIcon","EndScrollButtonIcon","KeyboardArrowRight","startButtonIconProps","useSlotProps","elementType","externalSlotProps","startScrollButtonIcon","additionalProps","endButtonIconProps","endScrollButtonIcon","component","getTabsUtilityClass","nextItem","list","item","firstChild","nextElementSibling","previousItem","lastChild","previousElementSibling","moveFocus","currentFocus","traversalFunction","wrappedOnce","nextFocus","nextFocusDisabled","getAttribute","hasAttribute","focus","TabsRoot","tabsClasses","scrollButtons","scrollButtonsHideMobile","vertical","WebkitOverflowScrolling","display","breakpoints","down","TabsScroller","scroller","fixed","hideScrollbar","scrollableX","scrollableY","flex","overflowX","scrollbarWidth","overflowY","FlexContainer","flexContainer","flexContainerVertical","centered","_ref6","justifyContent","TabsIndicator","_ref7","bottom","transition","transitions","create","indicatorColor","backgroundColor","right","TabsScrollbarSize","scrollbarHeight","nodeRef","setMeasurements","current","offsetHeight","clientHeight","useEnhancedEffect","handleResize","debounce","prevHeight","containerWindow","ownerWindow","addEventListener","clear","removeEventListener","defaultIndicatorStyle","Tabs","ariaLabel","ariaLabelledBy","_props$centered","childrenProp","_props$component","_props$allowScrollBut","allowScrollButtonsMobile","_props$indicatorColor","_props$orientation","_props$ScrollButtonCo","ScrollButtonComponent","TabScrollButton","_props$scrollButtons","_props$TabIndicatorPr","TabIndicatorProps","_props$TabScrollButto","TabScrollButtonProps","_props$variant","variant","_props$visibleScrollb","visibleScrollbar","scrollable","scrollStart","start","end","clientSize","size","startScrollButtonIconProps","endScrollButtonIconProps","_React$useState","_React$useState2","_slicedToArray","mounted","setMounted","_React$useState3","_React$useState4","indicatorStyle","setIndicatorStyle","_React$useState5","_React$useState6","displayScroll","setDisplayScroll","_React$useState7","_React$useState8","scrollerStyle","setScrollerStyle","valueToIndex","Map","tabsRef","tabListRef","getTabsMeta","tabsMeta","tabMeta","tabsNode","rect","getBoundingClientRect","scrollTop","scrollLeftNormalized","left","length","tab","get","process","updateIndicatorState","useEventCallback","_newIndicatorStyle","startIndicator","_getTabsMeta","startValue","correction","newIndicatorStyle","isNaN","dStart","abs","dSize","scroll","scrollValue","_ref8$animation","arguments","undefined","animation","property","to","options","cb","_options$ease","ease","_options$duration","duration","from","cancelled","cancel","Error","requestAnimationFrame","step","timestamp","min","animate","standard","moveTabsScroll","delta","getScrollSize","containerSize","totalSize","Array","i","handleStartScrollClick","handleEndScrollClick","handleScrollbarSizeChange","scrollSelectedIntoView","_getTabsMeta2","nextScrollStart","updateScrollButtonState","showStartScroll","showEndScroll","_tabsRef$current","scrollHeight","resizeObserver","win","ResizeObserver","forEach","child","observe","disconnect","handleTabsScroll","updateIndicator","updateScrollButtons","childIndex","map","childValue","set","conditionalElements","scrollbarSizeListener","scrollButtonsActive","showScrollButtons","scrollButtonStart","scrollButtonEnd","getConditionalElements","as","onScroll","onKeyDown","ownerDocument","activeElement","previousItemKey","nextItemKey","key","preventDefault"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/417.9842b54e.chunk.js b/web-app/build/static/js/417.9842b54e.chunk.js deleted file mode 100644 index aab42393c9e..00000000000 --- a/web-app/build/static/js/417.9842b54e.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[417],{63466:function(e,t,o){o.d(t,{Z:function(){return x}});var i=o(4942),n=o(63366),r=o(87462),l=o(72791),s=o(28182),a=o(94419),c=o(14036),d=o(20890),h=o(93840),u=o(52930),f=o(66934),p=o(75878),v=o(21217);function g(e){return(0,v.Z)("MuiInputAdornment",e)}var m,_=(0,p.Z)("MuiInputAdornment",["root","filled","standard","outlined","positionStart","positionEnd","disablePointerEvents","hiddenLabel","sizeSmall"]),S=o(31402),C=o(80184),y=["children","className","component","disablePointerEvents","disableTypography","position","variant"],w=(0,f.ZP)("div",{name:"MuiInputAdornment",slot:"Root",overridesResolver:function(e,t){var o=e.ownerState;return[t.root,t["position".concat((0,c.Z)(o.position))],!0===o.disablePointerEvents&&t.disablePointerEvents,t[o.variant]]}})((function(e){var t=e.theme,o=e.ownerState;return(0,r.Z)({display:"flex",height:"0.01em",maxHeight:"2em",alignItems:"center",whiteSpace:"nowrap",color:(t.vars||t).palette.action.active},"filled"===o.variant&&(0,i.Z)({},"&.".concat(_.positionStart,"&:not(.").concat(_.hiddenLabel,")"),{marginTop:16}),"start"===o.position&&{marginRight:8},"end"===o.position&&{marginLeft:8},!0===o.disablePointerEvents&&{pointerEvents:"none"})})),x=l.forwardRef((function(e,t){var o=(0,S.Z)({props:e,name:"MuiInputAdornment"}),i=o.children,f=o.className,p=o.component,v=void 0===p?"div":p,_=o.disablePointerEvents,x=void 0!==_&&_,R=o.disableTypography,T=void 0!==R&&R,z=o.position,b=o.variant,I=(0,n.Z)(o,y),Z=(0,u.Z)()||{},M=b;b&&Z.variant,Z&&!M&&(M=Z.variant);var P=(0,r.Z)({},o,{hiddenLabel:Z.hiddenLabel,size:Z.size,disablePointerEvents:x,position:z,variant:M}),k=function(e){var t=e.classes,o=e.disablePointerEvents,i=e.hiddenLabel,n=e.position,r=e.size,l=e.variant,s={root:["root",o&&"disablePointerEvents",n&&"position".concat((0,c.Z)(n)),l,i&&"hiddenLabel",r&&"size".concat((0,c.Z)(r))]};return(0,a.Z)(s,g,t)}(P);return(0,C.jsx)(h.Z.Provider,{value:null,children:(0,C.jsx)(w,(0,r.Z)({as:v,ownerState:P,className:(0,s.Z)(k.root,f),ref:t},I,{children:"string"!==typeof i||T?(0,C.jsxs)(l.Fragment,{children:["start"===z?m||(m=(0,C.jsx)("span",{className:"notranslate",children:"\u200b"})):null,i]}):(0,C.jsx)(d.Z,{color:"text.secondary",children:i})}))})}))},23688:function(e,t,o){function i(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function n(e){this.setState(function(t){var o=this.constructor.getDerivedStateFromProps(e,t);return null!==o&&void 0!==o?o:null}.bind(this))}function r(e,t){try{var o=this.props,i=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(o,i)}finally{this.props=o,this.state=i}}function l(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!==typeof e.getDerivedStateFromProps&&"function"!==typeof t.getSnapshotBeforeUpdate)return e;var o=null,l=null,s=null;if("function"===typeof t.componentWillMount?o="componentWillMount":"function"===typeof t.UNSAFE_componentWillMount&&(o="UNSAFE_componentWillMount"),"function"===typeof t.componentWillReceiveProps?l="componentWillReceiveProps":"function"===typeof t.UNSAFE_componentWillReceiveProps&&(l="UNSAFE_componentWillReceiveProps"),"function"===typeof t.componentWillUpdate?s="componentWillUpdate":"function"===typeof t.UNSAFE_componentWillUpdate&&(s="UNSAFE_componentWillUpdate"),null!==o||null!==l||null!==s){var a=e.displayName||e.name,c="function"===typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+a+" uses "+c+" but also contains the following legacy lifecycles:"+(null!==o?"\n "+o:"")+(null!==l?"\n "+l:"")+(null!==s?"\n "+s:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"===typeof e.getDerivedStateFromProps&&(t.componentWillMount=i,t.componentWillReceiveProps=n),"function"===typeof t.getSnapshotBeforeUpdate){if("function"!==typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=r;var d=t.componentDidUpdate;t.componentDidUpdate=function(e,t,o){var i=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:o;d.call(this,e,t,i)}}return e}o.r(t),o.d(t,{polyfill:function(){return l}}),i.__suppressDeprecationWarning=!0,n.__suppressDeprecationWarning=!0,r.__suppressDeprecationWarning=!0},5171:function(e,t,o){o.d(t,{qj:function(){return X},Z8:function(){return $},t1:function(){return ee},sg:function(){return Ye},b2:function(){return fe},aV:function(){return ge},iA:function(){return $e}});var i=o(15671),n=o(43144),r=o(82963),l=o(61120),s=o(97326),a=o(60136),c=o(4942),d=o(72791),h=o(23688),u=o(87462),f=o(28182);function p(e){var t=e.cellCount,o=e.cellSize,i=e.computeMetadataCallback,n=e.computeMetadataCallbackProps,r=e.nextCellsCount,l=e.nextCellSize,s=e.nextScrollToIndex,a=e.scrollToIndex,c=e.updateScrollOffsetForScrollToIndex;t===r&&("number"!==typeof o&&"number"!==typeof l||o===l)||(i(n),a>=0&&a===s&&c())}var v=o(45987),g=function(){function e(t){var o=t.cellCount,n=t.cellSizeGetter,r=t.estimatedCellSize;(0,i.Z)(this,e),(0,c.Z)(this,"_cellSizeAndPositionData",{}),(0,c.Z)(this,"_lastMeasuredIndex",-1),(0,c.Z)(this,"_lastBatchedIndex",-1),(0,c.Z)(this,"_cellCount",void 0),(0,c.Z)(this,"_cellSizeGetter",void 0),(0,c.Z)(this,"_estimatedCellSize",void 0),this._cellSizeGetter=n,this._cellCount=o,this._estimatedCellSize=r}return(0,n.Z)(e,[{key:"areOffsetsAdjusted",value:function(){return!1}},{key:"configure",value:function(e){var t=e.cellCount,o=e.estimatedCellSize,i=e.cellSizeGetter;this._cellCount=t,this._estimatedCellSize=o,this._cellSizeGetter=i}},{key:"getCellCount",value:function(){return this._cellCount}},{key:"getEstimatedCellSize",value:function(){return this._estimatedCellSize}},{key:"getLastMeasuredIndex",value:function(){return this._lastMeasuredIndex}},{key:"getOffsetAdjustment",value:function(){return 0}},{key:"getSizeAndPositionOfCell",value:function(e){if(e<0||e>=this._cellCount)throw Error("Requested index ".concat(e," is outside of range 0..").concat(this._cellCount));if(e>this._lastMeasuredIndex)for(var t=this.getSizeAndPositionOfLastMeasuredCell(),o=t.offset+t.size,i=this._lastMeasuredIndex+1;i<=e;i++){var n=this._cellSizeGetter({index:i});if(void 0===n||isNaN(n))throw Error("Invalid size returned for cell ".concat(i," of value ").concat(n));null===n?(this._cellSizeAndPositionData[i]={offset:o,size:0},this._lastBatchedIndex=e):(this._cellSizeAndPositionData[i]={offset:o,size:n},o+=n,this._lastMeasuredIndex=e)}return this._cellSizeAndPositionData[e]}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}}},{key:"getTotalSize",value:function(){var e=this.getSizeAndPositionOfLastMeasuredCell();return e.offset+e.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;if(i<=0)return 0;var l,s=this.getSizeAndPositionOfCell(r),a=s.offset,c=a-i+s.size;switch(o){case"start":l=a;break;case"end":l=c;break;case"center":l=a-(i-s.size)/2;break;default:l=Math.max(c,Math.min(a,n))}var d=this.getTotalSize();return Math.max(0,Math.min(d-i,l))}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;if(0===this.getTotalSize())return{};var i=o+t,n=this._findNearestCell(o),r=this.getSizeAndPositionOfCell(n);o=r.offset+r.size;for(var l=n;oo&&(e=i-1)}return t>0?t-1:0}},{key:"_exponentialSearch",value:function(e,t){for(var o=1;e=e?this._binarySearch(o,0,e):this._exponentialSearch(o,e)}}]),e}(),m=function(){return"undefined"!==typeof window&&window.chrome?16777100:15e5},_=function(){function e(t){var o=t.maxScrollSize,n=void 0===o?m():o,r=(0,v.Z)(t,["maxScrollSize"]);(0,i.Z)(this,e),(0,c.Z)(this,"_cellSizeAndPositionManager",void 0),(0,c.Z)(this,"_maxScrollSize",void 0),this._cellSizeAndPositionManager=new g(r),this._maxScrollSize=n}return(0,n.Z)(e,[{key:"areOffsetsAdjusted",value:function(){return this._cellSizeAndPositionManager.getTotalSize()>this._maxScrollSize}},{key:"configure",value:function(e){this._cellSizeAndPositionManager.configure(e)}},{key:"getCellCount",value:function(){return this._cellSizeAndPositionManager.getCellCount()}},{key:"getEstimatedCellSize",value:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()}},{key:"getLastMeasuredIndex",value:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()}},{key:"getOffsetAdjustment",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize(),r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(n-i))}},{key:"getSizeAndPositionOfCell",value:function(e){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(e)}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()}},{key:"getTotalSize",value:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;n=this._safeOffsetToOffset({containerSize:i,offset:n});var l=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({align:o,containerSize:i,currentOffset:n,targetIndex:r});return this._offsetToSafeOffset({containerSize:i,offset:l})}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;return o=this._safeOffsetToOffset({containerSize:t,offset:o}),this._cellSizeAndPositionManager.getVisibleCellRange({containerSize:t,offset:o})}},{key:"resetCell",value:function(e){this._cellSizeAndPositionManager.resetCell(e)}},{key:"_getOffsetPercentage",value:function(e){var t=e.containerSize,o=e.offset,i=e.totalSize;return i<=t?0:o/(i-t)}},{key:"_offsetToSafeOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:i});return Math.round(r*(n-t))}},{key:"_safeOffsetToOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(i-t))}}]),e}();function S(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t={};return function(o){var i=o.callback,n=o.indices,r=Object.keys(n),l=!e||r.every((function(e){var t=n[e];return Array.isArray(t)?t.length>0:t>=0})),s=r.length!==Object.keys(t).length||r.some((function(e){var o=t[e],i=n[e];return Array.isArray(i)?o.join(",")!==i.join(","):o!==i}));t=n,l&&s&&i(n)}}function C(e){var t=e.cellSize,o=e.cellSizeAndPositionManager,i=e.previousCellsCount,n=e.previousCellSize,r=e.previousScrollToAlignment,l=e.previousScrollToIndex,s=e.previousSize,a=e.scrollOffset,c=e.scrollToAlignment,d=e.scrollToIndex,h=e.size,u=e.sizeJustIncreasedFromZero,f=e.updateScrollIndexCallback,p=o.getCellCount(),v=d>=0&&d0&&(ho.getTotalSize()-h&&f(p-1)}var y,w,x=!("undefined"===typeof window||!window.document||!window.document.createElement);function R(e){if((!y&&0!==y||e)&&x){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),y=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return y}var T,z,b=(w="undefined"!==typeof window?window:"undefined"!==typeof self?self:{}).requestAnimationFrame||w.webkitRequestAnimationFrame||w.mozRequestAnimationFrame||w.oRequestAnimationFrame||w.msRequestAnimationFrame||function(e){return w.setTimeout(e,1e3/60)},I=w.cancelAnimationFrame||w.webkitCancelAnimationFrame||w.mozCancelAnimationFrame||w.oCancelAnimationFrame||w.msCancelAnimationFrame||function(e){w.clearTimeout(e)},Z=b,M=I,P=function(e){return M(e.id)},k=function(e,t){var o;Promise.resolve().then((function(){o=Date.now()}));var i={id:Z((function n(){Date.now()-o>=t?e.call():i.id=Z(n)}))};return i};function O(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function L(e){for(var t=1;t0&&(o._initialScrollTop=o._getCalculatedScrollTop(e,o.state)),e.scrollToColumn>0&&(o._initialScrollLeft=o._getCalculatedScrollLeft(e,o.state)),o}return(0,a.Z)(t,e),(0,n.Z)(t,[{key:"getOffsetForCell",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.alignment,o=void 0===t?this.props.scrollToAlignment:t,i=e.columnIndex,n=void 0===i?this.props.scrollToColumn:i,r=e.rowIndex,l=void 0===r?this.props.scrollToRow:r,s=L({},this.props,{scrollToAlignment:o,scrollToColumn:n,scrollToRow:l});return{scrollLeft:this._getCalculatedScrollLeft(s),scrollTop:this._getCalculatedScrollTop(s)}}},{key:"getTotalRowsHeight",value:function(){return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize()}},{key:"getTotalColumnsWidth",value:function(){return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize()}},{key:"handleScrollEvent",value:function(e){var t=e.scrollLeft,o=void 0===t?0:t,i=e.scrollTop,n=void 0===i?0:i;if(!(n<0)){this._debounceScrollEnded();var r=this.props,l=r.autoHeight,s=r.autoWidth,a=r.height,c=r.width,d=this.state.instanceProps,h=d.scrollbarSize,u=d.rowSizeAndPositionManager.getTotalSize(),f=d.columnSizeAndPositionManager.getTotalSize(),p=Math.min(Math.max(0,f-c+h),o),v=Math.min(Math.max(0,u-a+h),n);if(this.state.scrollLeft!==p||this.state.scrollTop!==v){var g={isScrolling:!0,scrollDirectionHorizontal:p!==this.state.scrollLeft?p>this.state.scrollLeft?1:-1:this.state.scrollDirectionHorizontal,scrollDirectionVertical:v!==this.state.scrollTop?v>this.state.scrollTop?1:-1:this.state.scrollDirectionVertical,scrollPositionChangeReason:G};l||(g.scrollTop=v),s||(g.scrollLeft=p),g.needToResetStyleCache=!1,this.setState(g)}this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:v,totalColumnsWidth:f,totalRowsHeight:u})}}},{key:"invalidateCellSizeAfterRender",value:function(e){var t=e.columnIndex,o=e.rowIndex;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,t):t,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,o):o}},{key:"measureAllCells",value:function(){var e=this.props,t=e.columnCount,o=e.rowCount,i=this.state.instanceProps;i.columnSizeAndPositionManager.getSizeAndPositionOfCell(t-1),i.rowSizeAndPositionManager.getSizeAndPositionOfCell(o-1)}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.scrollToColumn,s=r.scrollToRow,a=this.state.instanceProps;a.columnSizeAndPositionManager.resetCell(o),a.rowSizeAndPositionManager.resetCell(n),this._recomputeScrollLeftFlag=l>=0&&(1===this.state.scrollDirectionHorizontal?o<=l:o>=l),this._recomputeScrollTopFlag=s>=0&&(1===this.state.scrollDirectionVertical?n<=s:n>=s),this._styleCache={},this._cellCache={},this.forceUpdate()}},{key:"scrollToCell",value:function(e){var t=e.columnIndex,o=e.rowIndex,i=this.props.columnCount,n=this.props;i>1&&void 0!==t&&this._updateScrollLeftForScrollToColumn(L({},n,{scrollToColumn:t})),void 0!==o&&this._updateScrollTopForScrollToRow(L({},n,{scrollToRow:o}))}},{key:"componentDidMount",value:function(){var e=this.props,o=e.getScrollbarSize,i=e.height,n=e.scrollLeft,r=e.scrollToColumn,l=e.scrollTop,s=e.scrollToRow,a=e.width,c=this.state.instanceProps;if(this._initialScrollTop=0,this._initialScrollLeft=0,this._handleInvalidatedGridSize(),c.scrollbarSizeMeasured||this.setState((function(e){var t=L({},e,{needToResetStyleCache:!1});return t.instanceProps.scrollbarSize=o(),t.instanceProps.scrollbarSizeMeasured=!0,t})),"number"===typeof n&&n>=0||"number"===typeof l&&l>=0){var d=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:n,scrollTop:l});d&&(d.needToResetStyleCache=!1,this.setState(d))}this._scrollingContainer&&(this._scrollingContainer.scrollLeft!==this.state.scrollLeft&&(this._scrollingContainer.scrollLeft=this.state.scrollLeft),this._scrollingContainer.scrollTop!==this.state.scrollTop&&(this._scrollingContainer.scrollTop=this.state.scrollTop));var h=i>0&&a>0;r>=0&&h&&this._updateScrollLeftForScrollToColumn(),s>=0&&h&&this._updateScrollTopForScrollToRow(),this._invokeOnGridRenderedHelper(),this._invokeOnScrollMemoizer({scrollLeft:n||0,scrollTop:l||0,totalColumnsWidth:c.columnSizeAndPositionManager.getTotalSize(),totalRowsHeight:c.rowSizeAndPositionManager.getTotalSize()}),this._maybeCallOnScrollbarPresenceChange()}},{key:"componentDidUpdate",value:function(e,t){var o=this,i=this.props,n=i.autoHeight,r=i.autoWidth,l=i.columnCount,s=i.height,a=i.rowCount,c=i.scrollToAlignment,d=i.scrollToColumn,h=i.scrollToRow,u=i.width,f=this.state,p=f.scrollLeft,v=f.scrollPositionChangeReason,g=f.scrollTop,m=f.instanceProps;this._handleInvalidatedGridSize();var _=l>0&&0===e.columnCount||a>0&&0===e.rowCount;v===A&&(!r&&p>=0&&(p!==this._scrollingContainer.scrollLeft||_)&&(this._scrollingContainer.scrollLeft=p),!n&&g>=0&&(g!==this._scrollingContainer.scrollTop||_)&&(this._scrollingContainer.scrollTop=g));var S=(0===e.width||0===e.height)&&s>0&&u>0;if(this._recomputeScrollLeftFlag?(this._recomputeScrollLeftFlag=!1,this._updateScrollLeftForScrollToColumn(this.props)):C({cellSizeAndPositionManager:m.columnSizeAndPositionManager,previousCellsCount:e.columnCount,previousCellSize:e.columnWidth,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToColumn,previousSize:e.width,scrollOffset:p,scrollToAlignment:c,scrollToIndex:d,size:u,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollLeftForScrollToColumn(o.props)}}),this._recomputeScrollTopFlag?(this._recomputeScrollTopFlag=!1,this._updateScrollTopForScrollToRow(this.props)):C({cellSizeAndPositionManager:m.rowSizeAndPositionManager,previousCellsCount:e.rowCount,previousCellSize:e.rowHeight,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToRow,previousSize:e.height,scrollOffset:g,scrollToAlignment:c,scrollToIndex:h,size:s,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollTopForScrollToRow(o.props)}}),this._invokeOnGridRenderedHelper(),p!==t.scrollLeft||g!==t.scrollTop){var y=m.rowSizeAndPositionManager.getTotalSize(),w=m.columnSizeAndPositionManager.getTotalSize();this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:g,totalColumnsWidth:w,totalRowsHeight:y})}this._maybeCallOnScrollbarPresenceChange()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&P(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoContainerWidth,o=e.autoHeight,i=e.autoWidth,n=e.className,r=e.containerProps,l=e.containerRole,s=e.containerStyle,a=e.height,c=e.id,h=e.noContentRenderer,p=e.role,v=e.style,g=e.tabIndex,m=e.width,_=this.state,S=_.instanceProps,C=_.needToResetStyleCache,y=this._isScrolling(),w={boxSizing:"border-box",direction:"ltr",height:o?"auto":a,position:"relative",width:i?"auto":m,WebkitOverflowScrolling:"touch",willChange:"transform"};C&&(this._styleCache={}),this.state.isScrolling||this._resetStyleCache(),this._calculateChildrenToRender(this.props,this.state);var x=S.columnSizeAndPositionManager.getTotalSize(),R=S.rowSizeAndPositionManager.getTotalSize(),T=R>a?S.scrollbarSize:0,z=x>m?S.scrollbarSize:0;z===this._horizontalScrollBarSize&&T===this._verticalScrollBarSize||(this._horizontalScrollBarSize=z,this._verticalScrollBarSize=T,this._scrollbarPresenceChanged=!0),w.overflowX=x+T<=m?"hidden":"auto",w.overflowY=R+z<=a?"hidden":"auto";var b=this._childrenToDisplay,I=0===b.length&&a>0&&m>0;return d.createElement("div",(0,u.Z)({ref:this._setScrollingContainerRef},r,{"aria-label":this.props["aria-label"],"aria-readonly":this.props["aria-readonly"],className:(0,f.Z)("ReactVirtualized__Grid",n),id:c,onScroll:this._onScroll,role:p,style:L({},w,{},v),tabIndex:g}),b.length>0&&d.createElement("div",{className:"ReactVirtualized__Grid__innerScrollContainer",role:l,style:L({width:t?"auto":x,height:R,maxWidth:x,maxHeight:R,overflow:"hidden",pointerEvents:y?"none":"",position:"relative"},s)},b),I&&h())}},{key:"_calculateChildrenToRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,o=e.cellRenderer,i=e.cellRangeRenderer,n=e.columnCount,r=e.deferredMeasurementCache,l=e.height,s=e.overscanColumnCount,a=e.overscanIndicesGetter,c=e.overscanRowCount,d=e.rowCount,h=e.width,u=e.isScrollingOptOut,f=t.scrollDirectionHorizontal,p=t.scrollDirectionVertical,v=t.instanceProps,g=this._initialScrollTop>0?this._initialScrollTop:t.scrollTop,m=this._initialScrollLeft>0?this._initialScrollLeft:t.scrollLeft,_=this._isScrolling(e,t);if(this._childrenToDisplay=[],l>0&&h>0){var S=v.columnSizeAndPositionManager.getVisibleCellRange({containerSize:h,offset:m}),C=v.rowSizeAndPositionManager.getVisibleCellRange({containerSize:l,offset:g}),y=v.columnSizeAndPositionManager.getOffsetAdjustment({containerSize:h,offset:m}),w=v.rowSizeAndPositionManager.getOffsetAdjustment({containerSize:l,offset:g});this._renderedColumnStartIndex=S.start,this._renderedColumnStopIndex=S.stop,this._renderedRowStartIndex=C.start,this._renderedRowStopIndex=C.stop;var x=a({direction:"horizontal",cellCount:n,overscanCellsCount:s,scrollDirection:f,startIndex:"number"===typeof S.start?S.start:0,stopIndex:"number"===typeof S.stop?S.stop:-1}),R=a({direction:"vertical",cellCount:d,overscanCellsCount:c,scrollDirection:p,startIndex:"number"===typeof C.start?C.start:0,stopIndex:"number"===typeof C.stop?C.stop:-1}),T=x.overscanStartIndex,z=x.overscanStopIndex,b=R.overscanStartIndex,I=R.overscanStopIndex;if(r){if(!r.hasFixedHeight())for(var Z=b;Z<=I;Z++)if(!r.has(Z,0)){T=0,z=n-1;break}if(!r.hasFixedWidth())for(var M=T;M<=z;M++)if(!r.has(0,M)){b=0,I=d-1;break}}this._childrenToDisplay=i({cellCache:this._cellCache,cellRenderer:o,columnSizeAndPositionManager:v.columnSizeAndPositionManager,columnStartIndex:T,columnStopIndex:z,deferredMeasurementCache:r,horizontalOffsetAdjustment:y,isScrolling:_,isScrollingOptOut:u,parent:this,rowSizeAndPositionManager:v.rowSizeAndPositionManager,rowStartIndex:b,rowStopIndex:I,scrollLeft:m,scrollTop:g,styleCache:this._styleCache,verticalOffsetAdjustment:w,visibleColumnIndices:S,visibleRowIndices:C}),this._columnStartIndex=T,this._columnStopIndex=z,this._rowStartIndex=b,this._rowStopIndex=I}}},{key:"_debounceScrollEnded",value:function(){var e=this.props.scrollingResetTimeInterval;this._disablePointerEventsTimeoutId&&P(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=k(this._debounceScrollEndedCallback,e)}},{key:"_handleInvalidatedGridSize",value:function(){if("number"===typeof this._deferredInvalidateColumnIndex&&"number"===typeof this._deferredInvalidateRowIndex){var e=this._deferredInvalidateColumnIndex,t=this._deferredInvalidateRowIndex;this._deferredInvalidateColumnIndex=null,this._deferredInvalidateRowIndex=null,this.recomputeGridSize({columnIndex:e,rowIndex:t})}}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalColumnsWidth,r=e.totalRowsHeight;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:r,scrollLeft:o,scrollTop:i,scrollWidth:n})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_isScrolling",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return Object.hasOwnProperty.call(e,"isScrolling")?Boolean(e.isScrolling):Boolean(t.isScrolling)}},{key:"_maybeCallOnScrollbarPresenceChange",value:function(){if(this._scrollbarPresenceChanged){var e=this.props.onScrollbarPresenceChange;this._scrollbarPresenceChanged=!1,e({horizontal:this._horizontalScrollBarSize>0,size:this.state.instanceProps.scrollbarSize,vertical:this._verticalScrollBarSize>0})}}},{key:"scrollToPosition",value:function(e){var o=e.scrollLeft,i=e.scrollTop,n=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:o,scrollTop:i});n&&(n.needToResetStyleCache=!1,this.setState(n))}},{key:"_getCalculatedScrollLeft",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollLeft(e,o)}},{key:"_updateScrollLeftForScrollToColumn",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollLeftForScrollToColumnStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}},{key:"_getCalculatedScrollTop",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollTop(e,o)}},{key:"_resetStyleCache",value:function(){var e=this._styleCache,t=this._cellCache,o=this.props.isScrollingOptOut;this._cellCache={},this._styleCache={};for(var i=this._rowStartIndex;i<=this._rowStopIndex;i++)for(var n=this._columnStartIndex;n<=this._columnStopIndex;n++){var r="".concat(i,"-").concat(n);this._styleCache[r]=e[r],o&&(this._cellCache[r]=t[r])}}},{key:"_updateScrollTopForScrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollTopForScrollToRowStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}}],[{key:"getDerivedStateFromProps",value:function(e,o){var i={};0===e.columnCount&&0!==o.scrollLeft||0===e.rowCount&&0!==o.scrollTop?(i.scrollLeft=0,i.scrollTop=0):(e.scrollLeft!==o.scrollLeft&&e.scrollToColumn<0||e.scrollTop!==o.scrollTop&&e.scrollToRow<0)&&Object.assign(i,t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}));var n,r,l=o.instanceProps;return i.needToResetStyleCache=!1,e.columnWidth===l.prevColumnWidth&&e.rowHeight===l.prevRowHeight||(i.needToResetStyleCache=!0),l.columnSizeAndPositionManager.configure({cellCount:e.columnCount,estimatedCellSize:t._getEstimatedColumnSize(e),cellSizeGetter:t._wrapSizeGetter(e.columnWidth)}),l.rowSizeAndPositionManager.configure({cellCount:e.rowCount,estimatedCellSize:t._getEstimatedRowSize(e),cellSizeGetter:t._wrapSizeGetter(e.rowHeight)}),0!==l.prevColumnCount&&0!==l.prevRowCount||(l.prevColumnCount=0,l.prevRowCount=0),e.autoHeight&&!1===e.isScrolling&&!0===l.prevIsScrolling&&Object.assign(i,{isScrolling:!1}),p({cellCount:l.prevColumnCount,cellSize:"number"===typeof l.prevColumnWidth?l.prevColumnWidth:null,computeMetadataCallback:function(){return l.columnSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.columnCount,nextCellSize:"number"===typeof e.columnWidth?e.columnWidth:null,nextScrollToIndex:e.scrollToColumn,scrollToIndex:l.prevScrollToColumn,updateScrollOffsetForScrollToIndex:function(){n=t._getScrollLeftForScrollToColumnStateUpdate(e,o)}}),p({cellCount:l.prevRowCount,cellSize:"number"===typeof l.prevRowHeight?l.prevRowHeight:null,computeMetadataCallback:function(){return l.rowSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.rowCount,nextCellSize:"number"===typeof e.rowHeight?e.rowHeight:null,nextScrollToIndex:e.scrollToRow,scrollToIndex:l.prevScrollToRow,updateScrollOffsetForScrollToIndex:function(){r=t._getScrollTopForScrollToRowStateUpdate(e,o)}}),l.prevColumnCount=e.columnCount,l.prevColumnWidth=e.columnWidth,l.prevIsScrolling=!0===e.isScrolling,l.prevRowCount=e.rowCount,l.prevRowHeight=e.rowHeight,l.prevScrollToColumn=e.scrollToColumn,l.prevScrollToRow=e.scrollToRow,l.scrollbarSize=e.getScrollbarSize(),void 0===l.scrollbarSize?(l.scrollbarSizeMeasured=!1,l.scrollbarSize=0):l.scrollbarSizeMeasured=!0,i.instanceProps=l,L({},i,{},n,{},r)}},{key:"_getEstimatedColumnSize",value:function(e){return"number"===typeof e.columnWidth?e.columnWidth:e.estimatedColumnSize}},{key:"_getEstimatedRowSize",value:function(e){return"number"===typeof e.rowHeight?e.rowHeight:e.estimatedRowSize}},{key:"_getScrollToPositionStateUpdate",value:function(e){var t=e.prevState,o=e.scrollLeft,i=e.scrollTop,n={scrollPositionChangeReason:A};return"number"===typeof o&&o>=0&&(n.scrollDirectionHorizontal=o>t.scrollLeft?1:-1,n.scrollLeft=o),"number"===typeof i&&i>=0&&(n.scrollDirectionVertical=i>t.scrollTop?1:-1,n.scrollTop=i),"number"===typeof o&&o>=0&&o!==t.scrollLeft||"number"===typeof i&&i>=0&&i!==t.scrollTop?n:{}}},{key:"_wrapSizeGetter",value:function(e){return"function"===typeof e?e:function(){return e}}},{key:"_getCalculatedScrollLeft",value:function(e,t){var o=e.columnCount,i=e.height,n=e.scrollToAlignment,r=e.scrollToColumn,l=e.width,s=t.scrollLeft,a=t.instanceProps;if(o>0){var c=o-1,d=r<0?c:Math.min(c,r),h=a.rowSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>i?a.scrollbarSize:0;return a.columnSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:l-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollLeftForScrollToColumnStateUpdate",value:function(e,o){var i=o.scrollLeft,n=t._getCalculatedScrollLeft(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:n,scrollTop:-1}):{}}},{key:"_getCalculatedScrollTop",value:function(e,t){var o=e.height,i=e.rowCount,n=e.scrollToAlignment,r=e.scrollToRow,l=e.width,s=t.scrollTop,a=t.instanceProps;if(i>0){var c=i-1,d=r<0?c:Math.min(c,r),h=a.columnSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>l?a.scrollbarSize:0;return a.rowSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:o-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollTopForScrollToRowStateUpdate",value:function(e,o){var i=o.scrollTop,n=t._getCalculatedScrollTop(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:-1,scrollTop:n}):{}}}]),t}(d.PureComponent),(0,c.Z)(T,"propTypes",null),z);(0,c.Z)(W,"defaultProps",{"aria-label":"grid","aria-readonly":!0,autoContainerWidth:!1,autoHeight:!1,autoWidth:!1,cellRangeRenderer:function(e){for(var t=e.cellCache,o=e.cellRenderer,i=e.columnSizeAndPositionManager,n=e.columnStartIndex,r=e.columnStopIndex,l=e.deferredMeasurementCache,s=e.horizontalOffsetAdjustment,a=e.isScrolling,c=e.isScrollingOptOut,d=e.parent,h=e.rowSizeAndPositionManager,u=e.rowStartIndex,f=e.rowStopIndex,p=e.styleCache,v=e.verticalOffsetAdjustment,g=e.visibleColumnIndices,m=e.visibleRowIndices,_=[],S=i.areOffsetsAdjusted()||h.areOffsetsAdjusted(),C=!a&&!S,y=u;y<=f;y++)for(var w=h.getSizeAndPositionOfCell(y),x=n;x<=r;x++){var R=i.getSizeAndPositionOfCell(x),T=x>=g.start&&x<=g.stop&&y>=m.start&&y<=m.stop,z="".concat(y,"-").concat(x),b=void 0;C&&p[z]?b=p[z]:l&&!l.has(y,x)?b={height:"auto",left:0,position:"absolute",top:0,width:"auto"}:(b={height:w.size,left:R.offset+s,position:"absolute",top:w.offset+v,width:R.size},p[z]=b);var I={columnIndex:x,isScrolling:a,isVisible:T,key:z,parent:d,rowIndex:y,style:b},Z=void 0;!c&&!a||s||v?Z=o(I):(t[z]||(t[z]=o(I)),Z=t[z]),null!=Z&&!1!==Z&&_.push(Z)}return _},containerRole:"rowgroup",containerStyle:{},estimatedColumnSize:100,estimatedRowSize:30,getScrollbarSize:R,noContentRenderer:function(){return null},onScroll:function(){},onScrollbarPresenceChange:function(){},onSectionRendered:function(){},overscanColumnCount:0,overscanIndicesGetter:function(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return 1===i?{overscanStartIndex:Math.max(0,n),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r)}},overscanRowCount:10,role:"grid",scrollingResetTimeInterval:150,scrollToAlignment:"auto",scrollToColumn:-1,scrollToRow:-1,style:{},tabIndex:0,isScrollingOptOut:!1}),(0,h.polyfill)(W);var H=W;function E(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return o=Math.max(1,o),1===i?{overscanStartIndex:Math.max(0,n-1),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r+1)}}var D,F;function N(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var j=(F=D=function(e){function t(){var e,o;(0,i.Z)(this,t);for(var n=arguments.length,a=new Array(n),d=0;d div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=t.head||t.getElementsByTagName("head")[0],n=t.createElement("style");n.id="detectElementResize",n.type="text/css",null!=e&&n.setAttribute("nonce",e),n.styleSheet?n.styleSheet.cssText=o:n.appendChild(t.createTextNode(o)),i.appendChild(n)}}(r),t.__resizeLast__={},t.__resizeListeners__=[],(t.__resizeTriggers__=r.createElement("div")).className="resize-triggers";var c='
';if(window.trustedTypes){var d=trustedTypes.createPolicy("react-virtualized-auto-sizer",{createHTML:function(){return c}});t.__resizeTriggers__.innerHTML=d.createHTML("")}else t.__resizeTriggers__.innerHTML=c;t.appendChild(t.__resizeTriggers__),s(t),t.addEventListener("scroll",a,!0),h&&(t.__resizeTriggers__.__animationListener__=function(e){e.animationName==g&&s(t)},t.__resizeTriggers__.addEventListener(h,t.__resizeTriggers__.__animationListener__))}t.__resizeListeners__.push(o)}},removeResizeListener:function(e,t){if(n)e.detachEvent("onresize",t);else if(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),!e.__resizeListeners__.length){e.removeEventListener("scroll",a,!0),e.__resizeTriggers__.__animationListener__&&(e.__resizeTriggers__.removeEventListener(h,e.__resizeTriggers__.__animationListener__),e.__resizeTriggers__.__animationListener__=null);try{e.__resizeTriggers__=!e.removeChild(e.__resizeTriggers__)}catch(o){}}}}}function q(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function K(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};(0,i.Z)(this,e),(0,c.Z)(this,"_cellHeightCache",{}),(0,c.Z)(this,"_cellWidthCache",{}),(0,c.Z)(this,"_columnWidthCache",{}),(0,c.Z)(this,"_rowHeightCache",{}),(0,c.Z)(this,"_defaultHeight",void 0),(0,c.Z)(this,"_defaultWidth",void 0),(0,c.Z)(this,"_minHeight",void 0),(0,c.Z)(this,"_minWidth",void 0),(0,c.Z)(this,"_keyMapper",void 0),(0,c.Z)(this,"_hasFixedHeight",void 0),(0,c.Z)(this,"_hasFixedWidth",void 0),(0,c.Z)(this,"_columnCount",0),(0,c.Z)(this,"_rowCount",0),(0,c.Z)(this,"columnWidth",(function(e){var o=e.index,i=t._keyMapper(0,o);return void 0!==t._columnWidthCache[i]?t._columnWidthCache[i]:t._defaultWidth})),(0,c.Z)(this,"rowHeight",(function(e){var o=e.index,i=t._keyMapper(o,0);return void 0!==t._rowHeightCache[i]?t._rowHeightCache[i]:t._defaultHeight}));var n=o.defaultHeight,r=o.defaultWidth,l=o.fixedHeight,s=o.fixedWidth,a=o.keyMapper,d=o.minHeight,h=o.minWidth;this._hasFixedHeight=!0===l,this._hasFixedWidth=!0===s,this._minHeight=d||0,this._minWidth=h||0,this._keyMapper=a||te,this._defaultHeight=Math.max(this._minHeight,"number"===typeof n?n:30),this._defaultWidth=Math.max(this._minWidth,"number"===typeof r?r:100)}return(0,n.Z)(e,[{key:"clear",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);delete this._cellHeightCache[o],delete this._cellWidthCache[o],this._updateCachedColumnAndRowSizes(e,t)}},{key:"clearAll",value:function(){this._cellHeightCache={},this._cellWidthCache={},this._columnWidthCache={},this._rowHeightCache={},this._rowCount=0,this._columnCount=0}},{key:"hasFixedHeight",value:function(){return this._hasFixedHeight}},{key:"hasFixedWidth",value:function(){return this._hasFixedWidth}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedHeight)return this._defaultHeight;var o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]?Math.max(this._minHeight,this._cellHeightCache[o]):this._defaultHeight}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedWidth)return this._defaultWidth;var o=this._keyMapper(e,t);return void 0!==this._cellWidthCache[o]?Math.max(this._minWidth,this._cellWidthCache[o]):this._defaultWidth}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]}},{key:"set",value:function(e,t,o,i){var n=this._keyMapper(e,t);t>=this._columnCount&&(this._columnCount=t+1),e>=this._rowCount&&(this._rowCount=e+1),this._cellHeightCache[n]=i,this._cellWidthCache[n]=o,this._updateCachedColumnAndRowSizes(e,t)}},{key:"_updateCachedColumnAndRowSizes",value:function(e,t){if(!this._hasFixedWidth){for(var o=0,i=0;i=0){var d=t.getScrollPositionForCell({align:n,cellIndex:r,height:i,scrollLeft:a,scrollTop:c,width:l});d.scrollLeft===a&&d.scrollTop===c||o._setScrollPosition(d)}})),(0,c.Z)((0,s.Z)(o),"_onScroll",(function(e){if(e.target===o._scrollingContainer){o._enablePointerEventsAfterDelay();var t=o.props,i=t.cellLayoutManager,n=t.height,r=t.isScrollingChange,l=t.width,s=o._scrollbarSize,a=i.getTotalSize(),c=a.height,d=a.width,h=Math.max(0,Math.min(d-l+s,e.target.scrollLeft)),u=Math.max(0,Math.min(c-n+s,e.target.scrollTop));if(o.state.scrollLeft!==h||o.state.scrollTop!==u){var f=e.cancelable?ne:re;o.state.isScrolling||r(!0),o.setState({isScrolling:!0,scrollLeft:h,scrollPositionChangeReason:f,scrollTop:u})}o._invokeOnScrollMemoizer({scrollLeft:h,scrollTop:u,totalWidth:d,totalHeight:c})}})),o._scrollbarSize=R(),void 0===o._scrollbarSize?(o._scrollbarSizeMeasured=!1,o._scrollbarSize=0):o._scrollbarSizeMeasured=!0,o}return(0,a.Z)(t,e),(0,n.Z)(t,[{key:"recomputeCellSizesAndPositions",value:function(){this._calculateSizeAndPositionDataOnNextUpdate=!0,this.forceUpdate()}},{key:"componentDidMount",value:function(){var e=this.props,t=e.cellLayoutManager,o=e.scrollLeft,i=e.scrollToCell,n=e.scrollTop;this._scrollbarSizeMeasured||(this._scrollbarSize=R(),this._scrollbarSizeMeasured=!0,this.setState({})),i>=0?this._updateScrollPositionForScrollToCell():(o>=0||n>=0)&&this._setScrollPosition({scrollLeft:o,scrollTop:n}),this._invokeOnSectionRenderedHelper();var r=t.getTotalSize(),l=r.height,s=r.width;this._invokeOnScrollMemoizer({scrollLeft:o||0,scrollTop:n||0,totalHeight:l,totalWidth:s})}},{key:"componentDidUpdate",value:function(e,t){var o=this.props,i=o.height,n=o.scrollToAlignment,r=o.scrollToCell,l=o.width,s=this.state,a=s.scrollLeft,c=s.scrollPositionChangeReason,d=s.scrollTop;c===re&&(a>=0&&a!==t.scrollLeft&&a!==this._scrollingContainer.scrollLeft&&(this._scrollingContainer.scrollLeft=a),d>=0&&d!==t.scrollTop&&d!==this._scrollingContainer.scrollTop&&(this._scrollingContainer.scrollTop=d)),i===e.height&&n===e.scrollToAlignment&&r===e.scrollToCell&&l===e.width||this._updateScrollPositionForScrollToCell(),this._invokeOnSectionRenderedHelper()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoHeight,o=e.cellCount,i=e.cellLayoutManager,n=e.className,r=e.height,l=e.horizontalOverscanSize,s=e.id,a=e.noContentRenderer,c=e.style,h=e.verticalOverscanSize,u=e.width,p=this.state,v=p.isScrolling,g=p.scrollLeft,m=p.scrollTop;(this._lastRenderedCellCount!==o||this._lastRenderedCellLayoutManager!==i||this._calculateSizeAndPositionDataOnNextUpdate)&&(this._lastRenderedCellCount=o,this._lastRenderedCellLayoutManager=i,this._calculateSizeAndPositionDataOnNextUpdate=!1,i.calculateSizeAndPositionData());var _=i.getTotalSize(),S=_.height,C=_.width,y=Math.max(0,g-l),w=Math.max(0,m-h),x=Math.min(C,g+u+l),R=Math.min(S,m+r+h),T=r>0&&u>0?i.cellRenderers({height:R-w,isScrolling:v,width:x-y,x:y,y:w}):[],z={boxSizing:"border-box",direction:"ltr",height:t?"auto":r,position:"relative",WebkitOverflowScrolling:"touch",width:u,willChange:"transform"},b=S>r?this._scrollbarSize:0,I=C>u?this._scrollbarSize:0;return z.overflowX=C+b<=u?"hidden":"auto",z.overflowY=S+I<=r?"hidden":"auto",d.createElement("div",{ref:this._setScrollingContainerRef,"aria-label":this.props["aria-label"],className:(0,f.Z)("ReactVirtualized__Collection",n),id:s,onScroll:this._onScroll,role:"grid",style:ie({},z,{},c),tabIndex:0},o>0&&d.createElement("div",{className:"ReactVirtualized__Collection__innerScrollContainer",style:{height:S,maxHeight:S,maxWidth:C,overflow:"hidden",pointerEvents:v?"none":"",width:C}},T),0===o&&a())}},{key:"_enablePointerEventsAfterDelay",value:function(){var e=this;this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=setTimeout((function(){(0,e.props.isScrollingChange)(!1),e._disablePointerEventsTimeoutId=null,e.setState({isScrolling:!1})}),150)}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalHeight,r=e.totalWidth;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:n,scrollLeft:o,scrollTop:i,scrollWidth:r})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_setScrollPosition",value:function(e){var t=e.scrollLeft,o=e.scrollTop,i={scrollPositionChangeReason:re};t>=0&&(i.scrollLeft=t),o>=0&&(i.scrollTop=o),(t>=0&&t!==this.state.scrollLeft||o>=0&&o!==this.state.scrollTop)&&this.setState(i)}}],[{key:"getDerivedStateFromProps",value:function(e,t){return 0!==e.cellCount||0===t.scrollLeft&&0===t.scrollTop?e.scrollLeft!==t.scrollLeft||e.scrollTop!==t.scrollTop?{scrollLeft:null!=e.scrollLeft?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop?e.scrollTop:t.scrollTop,scrollPositionChangeReason:re}:null:{scrollLeft:0,scrollTop:0,scrollPositionChangeReason:re}}}]),t}(d.PureComponent);(0,c.Z)(le,"defaultProps",{"aria-label":"grid",horizontalOverscanSize:0,noContentRenderer:function(){return null},onScroll:function(){return null},onSectionRendered:function(){return null},scrollToAlignment:"auto",scrollToCell:-1,style:{},verticalOverscanSize:0}),le.propTypes={},(0,h.polyfill)(le);var se=le,ae=function(){function e(t){var o=t.height,n=t.width,r=t.x,l=t.y;(0,i.Z)(this,e),this.height=o,this.width=n,this.x=r,this.y=l,this._indexMap={},this._indices=[]}return(0,n.Z)(e,[{key:"addCellIndex",value:function(e){var t=e.index;this._indexMap[t]||(this._indexMap[t]=!0,this._indices.push(t))}},{key:"getCellIndices",value:function(){return this._indices}},{key:"toString",value:function(){return"".concat(this.x,",").concat(this.y," ").concat(this.width,"x").concat(this.height)}}]),e}(),ce=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;(0,i.Z)(this,e),this._sectionSize=t,this._cellMetadata=[],this._sections={}}return(0,n.Z)(e,[{key:"getCellIndices",value:function(e){var t=e.height,o=e.width,i=e.x,n=e.y,r={};return this.getSections({height:t,width:o,x:i,y:n}).forEach((function(e){return e.getCellIndices().forEach((function(e){r[e]=e}))})),Object.keys(r).map((function(e){return r[e]}))}},{key:"getCellMetadata",value:function(e){var t=e.index;return this._cellMetadata[t]}},{key:"getSections",value:function(e){for(var t=e.height,o=e.width,i=e.x,n=e.y,r=Math.floor(i/this._sectionSize),l=Math.floor((i+o-1)/this._sectionSize),s=Math.floor(n/this._sectionSize),a=Math.floor((n+t-1)/this._sectionSize),c=[],d=r;d<=l;d++)for(var h=s;h<=a;h++){var u="".concat(d,".").concat(h);this._sections[u]||(this._sections[u]=new ae({height:this._sectionSize,width:this._sectionSize,x:d*this._sectionSize,y:h*this._sectionSize})),c.push(this._sections[u])}return c}},{key:"getTotalSectionCount",value:function(){return Object.keys(this._sections).length}},{key:"toString",value:function(){var e=this;return Object.keys(this._sections).map((function(t){return e._sections[t].toString()}))}},{key:"registerCell",value:function(e){var t=e.cellMetadatum,o=e.index;this._cellMetadata[o]=t,this.getSections(t).forEach((function(e){return e.addCellIndex({index:o})}))}}]),e}();function de(e){var t=e.align,o=void 0===t?"auto":t,i=e.cellOffset,n=e.cellSize,r=e.containerSize,l=e.currentOffset,s=i,a=s-r+n;switch(o){case"start":return s;case"end":return a;case"center":return s-(r-n)/2;default:return Math.max(a,Math.min(s,l))}}var he=function(e){function t(e,o){var n;return(0,i.Z)(this,t),(n=(0,r.Z)(this,(0,l.Z)(t).call(this,e,o)))._cellMetadata=[],n._lastRenderedCellIndices=[],n._cellCache=[],n._isScrollingChange=n._isScrollingChange.bind((0,s.Z)(n)),n._setCollectionViewRef=n._setCollectionViewRef.bind((0,s.Z)(n)),n}return(0,a.Z)(t,e),(0,n.Z)(t,[{key:"forceUpdate",value:function(){void 0!==this._collectionView&&this._collectionView.forceUpdate()}},{key:"recomputeCellSizesAndPositions",value:function(){this._cellCache=[],this._collectionView.recomputeCellSizesAndPositions()}},{key:"render",value:function(){var e=(0,u.Z)({},this.props);return d.createElement(se,(0,u.Z)({cellLayoutManager:this,isScrollingChange:this._isScrollingChange,ref:this._setCollectionViewRef},e))}},{key:"calculateSizeAndPositionData",value:function(){var e=this.props,t=function(e){for(var t=e.cellCount,o=e.cellSizeAndPositionGetter,i=e.sectionSize,n=[],r=new ce(i),l=0,s=0,a=0;a=0&&oo||n1&&void 0!==arguments[1]?arguments[1]:0,o="function"===typeof e.recomputeGridSize?e.recomputeGridSize:e.recomputeRowHeights;o?o.call(e,t):e.forceUpdate()}(t._registeredChild,t._lastRenderedStartIndex)}))}))}},{key:"_onRowsRendered",value:function(e){var t=e.startIndex,o=e.stopIndex;this._lastRenderedStartIndex=t,this._lastRenderedStopIndex=o,this._doStuff(t,o)}},{key:"_doStuff",value:function(e,t){var o,i=this,n=this.props,r=n.isRowLoaded,l=n.minimumBatchSize,s=n.rowCount,a=n.threshold,c=function(e){for(var t=e.isRowLoaded,o=e.minimumBatchSize,i=e.rowCount,n=e.startIndex,r=e.stopIndex,l=[],s=null,a=null,c=n;c<=r;c++){t({index:c})?null!==a&&(l.push({startIndex:s,stopIndex:a}),s=a=null):(a=c,null===s&&(s=c))}if(null!==a){for(var d=Math.min(Math.max(a,s+o-1),i-1),h=a+1;h<=d&&!t({index:h});h++)a=h;l.push({startIndex:s,stopIndex:a})}if(l.length)for(var u=l[0];u.stopIndex-u.startIndex+10;){var f=u.startIndex-1;if(t({index:f}))break;u.startIndex=f}return l}({isRowLoaded:r,minimumBatchSize:l,rowCount:s,startIndex:Math.max(0,e-a),stopIndex:Math.min(s-1,t+a)}),d=(o=[]).concat.apply(o,(0,ue.Z)(c.map((function(e){return[e.startIndex,e.stopIndex]}))));this._loadMoreRowsMemoizer({callback:function(){i._loadUnloadedRanges(c)},indices:{squashedUnloadedRanges:d}})}},{key:"_registerChild",value:function(e){this._registeredChild=e}}]),t}(d.PureComponent);(0,c.Z)(fe,"defaultProps",{minimumBatchSize:10,rowCount:0,threshold:15}),fe.propTypes={};var pe,ve,ge=(ve=pe=function(e){function t(){var e,o;(0,i.Z)(this,t);for(var n=arguments.length,a=new Array(n),d=0;d0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e,columnIndex:0})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"render",value:function(){var e=this.props,t=e.className,o=e.noRowsRenderer,i=e.scrollToIndex,n=e.width,r=(0,f.Z)("ReactVirtualized__List",t);return d.createElement(H,(0,u.Z)({},this.props,{autoContainerWidth:!0,cellRenderer:this._cellRenderer,className:r,columnWidth:n,columnCount:1,noContentRenderer:o,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,scrollToRow:i}))}}]),t}(d.PureComponent),(0,c.Z)(pe,"propTypes",null),ve);(0,c.Z)(ge,"defaultProps",{autoHeight:!1,estimatedRowSize:30,onScroll:function(){},noRowsRenderer:function(){return null},onRowsRendered:function(){},overscanIndicesGetter:E,overscanRowCount:10,scrollToAlignment:"auto",scrollToIndex:-1,style:{}});var me=o(29439);var _e={ge:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>=0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>=i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},gt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},lt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=t-1;t<=o;){var l=t+o>>>1;n(e[l],i)<0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]>>1;n(e[l],i)<=0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]<=i?(n=r,t=r+1):o=r-1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},eq:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(;t<=o;){var r=t+o>>>1,l=n(e[r],i);if(0===l)return r;l<=0?t=r+1:o=r-1}return-1}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(;t<=o;){var n=t+o>>>1,r=e[n];if(r===i)return n;r<=i?t=n+1:o=n-1}return-1}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)}};function Se(e,t,o,i,n){this.mid=e,this.left=t,this.right=o,this.leftPoints=i,this.rightPoints=n,this.count=(t?t.count:0)+(o?o.count:0)+i.length}var Ce=Se.prototype;function ye(e,t){e.mid=t.mid,e.left=t.left,e.right=t.right,e.leftPoints=t.leftPoints,e.rightPoints=t.rightPoints,e.count=t.count}function we(e,t){var o=Pe(t);e.mid=o.mid,e.left=o.left,e.right=o.right,e.leftPoints=o.leftPoints,e.rightPoints=o.rightPoints,e.count=o.count}function xe(e,t){var o=e.intervals([]);o.push(t),we(e,o)}function Re(e,t){var o=e.intervals([]),i=o.indexOf(t);return i<0?0:(o.splice(i,1),we(e,o),1)}function Te(e,t,o){for(var i=0;i=0&&e[i][1]>=t;--i){var n=o(e[i]);if(n)return n}}function be(e,t){for(var o=0;o>1],n=[],r=[],l=[];for(o=0;o3*(t+1)?xe(this,e):this.left.insert(e):this.left=Pe([e]);else if(e[0]>this.mid)this.right?4*(this.right.count+1)>3*(t+1)?xe(this,e):this.right.insert(e):this.right=Pe([e]);else{var o=_e.ge(this.leftPoints,e,Ze),i=_e.ge(this.rightPoints,e,Me);this.leftPoints.splice(o,0,e),this.rightPoints.splice(i,0,e)}},Ce.remove=function(e){var t=this.count-this.leftPoints;if(e[1]3*(t-1)?Re(this,e):2===(r=this.left.remove(e))?(this.left=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(e[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(t-1)?Re(this,e):2===(r=this.right.remove(e))?(this.right=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(1===this.count)return this.leftPoints[0]===e?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===e){if(this.left&&this.right){for(var o=this,i=this.left;i.right;)o=i,i=i.right;if(o===this)i.right=this.right;else{var n=this.left,r=this.right;o.count-=i.count,o.right=i.left,i.left=n,i.right=r}ye(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?ye(this,this.left):ye(this,this.right);return 1}for(n=_e.ge(this.leftPoints,e,Ze);nthis.mid){var o;if(this.right)if(o=this.right.queryPoint(e,t))return o;return ze(this.rightPoints,e,t)}return be(this.leftPoints,t)},Ce.queryInterval=function(e,t,o){var i;if(ethis.mid&&this.right&&(i=this.right.queryInterval(e,t,o)))return i;return tthis.mid?ze(this.rightPoints,e,o):be(this.leftPoints,o)};var Oe=ke.prototype;Oe.insert=function(e){this.root?this.root.insert(e):this.root=new Se(e[0],null,null,[e],[e])},Oe.remove=function(e){if(this.root){var t=this.root.remove(e);return 2===t&&(this.root=null),0!==t}return!1},Oe.queryPoint=function(e,t){if(this.root)return this.root.queryPoint(e,t)},Oe.queryInterval=function(e,t,o){if(e<=t&&this.root)return this.root.queryInterval(e,t,o)},Object.defineProperty(Oe,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(Oe,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});var Le,Ge,Ae=function(){function e(){var t;(0,i.Z)(this,e),(0,c.Z)(this,"_columnSizeMap",{}),(0,c.Z)(this,"_intervalTree",t&&0!==t.length?new ke(Pe(t)):new ke(null)),(0,c.Z)(this,"_leftMap",{})}return(0,n.Z)(e,[{key:"estimateTotalHeight",value:function(e,t,o){var i=e-this.count;return this.tallestColumnSize+Math.ceil(i/t)*o}},{key:"range",value:function(e,t,o){var i=this;this._intervalTree.queryInterval(e,e+t,(function(e){var t=(0,me.Z)(e,3),n=t[0],r=(t[1],t[2]);return o(r,i._leftMap[r],n)}))}},{key:"setPosition",value:function(e,t,o,i){this._intervalTree.insert([o,o+i,e]),this._leftMap[e]=t;var n=this._columnSizeMap,r=n[t];n[t]=void 0===r?o+i:Math.max(r,o+i)}},{key:"count",get:function(){return this._intervalTree.count}},{key:"shortestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=0===t?i:Math.min(t,i)}return t}},{key:"tallestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=Math.max(t,i)}return t}}]),e}();function We(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function He(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};(0,i.Z)(this,e),(0,c.Z)(this,"_cellMeasurerCache",void 0),(0,c.Z)(this,"_columnIndexOffset",void 0),(0,c.Z)(this,"_rowIndexOffset",void 0),(0,c.Z)(this,"columnWidth",(function(e){var o=e.index;t._cellMeasurerCache.columnWidth({index:o+t._columnIndexOffset})})),(0,c.Z)(this,"rowHeight",(function(e){var o=e.index;t._cellMeasurerCache.rowHeight({index:o+t._rowIndexOffset})}));var n=o.cellMeasurerCache,r=o.columnIndexOffset,l=void 0===r?0:r,s=o.rowIndexOffset,a=void 0===s?0:s;this._cellMeasurerCache=n,this._columnIndexOffset=l,this._rowIndexOffset=a}return(0,n.Z)(e,[{key:"clear",value:function(e,t){this._cellMeasurerCache.clear(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"clearAll",value:function(){this._cellMeasurerCache.clearAll()}},{key:"hasFixedHeight",value:function(){return this._cellMeasurerCache.hasFixedHeight()}},{key:"hasFixedWidth",value:function(){return this._cellMeasurerCache.hasFixedWidth()}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getHeight(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getWidth(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.has(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"set",value:function(e,t,o,i){this._cellMeasurerCache.set(e+this._rowIndexOffset,t+this._columnIndexOffset,o,i)}},{key:"defaultHeight",get:function(){return this._cellMeasurerCache.defaultHeight}},{key:"defaultWidth",get:function(){return this._cellMeasurerCache.defaultWidth}}]),e}();function Ne(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function je(e){for(var t=1;t0?new Fe({cellMeasurerCache:a,columnIndexOffset:0,rowIndexOffset:u}):a,n._deferredMeasurementCacheBottomRightGrid=h>0||u>0?new Fe({cellMeasurerCache:a,columnIndexOffset:h,rowIndexOffset:u}):a,n._deferredMeasurementCacheTopRightGrid=h>0?new Fe({cellMeasurerCache:a,columnIndexOffset:h,rowIndexOffset:0}):a),n}return(0,a.Z)(t,e),(0,n.Z)(t,[{key:"forceUpdateGrids",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.forceUpdate(),this._bottomRightGrid&&this._bottomRightGrid.forceUpdate(),this._topLeftGrid&&this._topLeftGrid.forceUpdate(),this._topRightGrid&&this._topRightGrid.forceUpdate()}},{key:"invalidateCellSizeAfterRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,o):o,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,n):n}},{key:"measureAllCells",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.measureAllCells(),this._bottomRightGrid&&this._bottomRightGrid.measureAllCells(),this._topLeftGrid&&this._topLeftGrid.measureAllCells(),this._topRightGrid&&this._topRightGrid.measureAllCells()}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.fixedColumnCount,s=r.fixedRowCount,a=Math.max(0,o-l),c=Math.max(0,n-s);this._bottomLeftGrid&&this._bottomLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:c}),this._bottomRightGrid&&this._bottomRightGrid.recomputeGridSize({columnIndex:a,rowIndex:c}),this._topLeftGrid&&this._topLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:n}),this._topRightGrid&&this._topRightGrid.recomputeGridSize({columnIndex:a,rowIndex:n}),this._leftGridWidth=null,this._topGridHeight=null,this._maybeCalculateCachedStyles(!0)}},{key:"componentDidMount",value:function(){var e=this.props,t=e.scrollLeft,o=e.scrollTop;if(t>0||o>0){var i={};t>0&&(i.scrollLeft=t),o>0&&(i.scrollTop=o),this.setState(i)}this._handleInvalidatedGridSize()}},{key:"componentDidUpdate",value:function(){this._handleInvalidatedGridSize()}},{key:"render",value:function(){var e=this.props,t=e.onScroll,o=e.onSectionRendered,i=(e.onScrollbarPresenceChange,e.scrollLeft,e.scrollToColumn),n=(e.scrollTop,e.scrollToRow),r=(0,v.Z)(e,["onScroll","onSectionRendered","onScrollbarPresenceChange","scrollLeft","scrollToColumn","scrollTop","scrollToRow"]);if(this._prepareForRender(),0===this.props.width||0===this.props.height)return null;var l=this.state,s=l.scrollLeft,a=l.scrollTop;return d.createElement("div",{style:this._containerOuterStyle},d.createElement("div",{style:this._containerTopStyle},this._renderTopLeftGrid(r),this._renderTopRightGrid(je({},r,{onScroll:t,scrollLeft:s}))),d.createElement("div",{style:this._containerBottomStyle},this._renderBottomLeftGrid(je({},r,{onScroll:t,scrollTop:a})),this._renderBottomRightGrid(je({},r,{onScroll:t,onSectionRendered:o,scrollLeft:s,scrollToColumn:i,scrollToRow:n,scrollTop:a}))))}},{key:"_getBottomGridHeight",value:function(e){return e.height-this._getTopGridHeight(e)}},{key:"_getLeftGridWidth",value:function(e){var t=e.fixedColumnCount,o=e.columnWidth;if(null==this._leftGridWidth)if("function"===typeof o){for(var i=0,n=0;n=0?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop&&e.scrollTop>=0?e.scrollTop:t.scrollTop}:null}}]),t}(d.PureComponent);(0,c.Z)(Ue,"defaultProps",{classNameBottomLeftGrid:"",classNameBottomRightGrid:"",classNameTopLeftGrid:"",classNameTopRightGrid:"",enableFixedColumnScroll:!1,enableFixedRowScroll:!1,fixedColumnCount:0,fixedRowCount:0,scrollToColumn:-1,scrollToRow:-1,style:{},styleBottomLeftGrid:{},styleBottomRightGrid:{},styleTopLeftGrid:{},styleTopRightGrid:{},hideTopRightGridScrollbar:!1,hideBottomLeftGridScrollbar:!1}),Ue.propTypes={},(0,h.polyfill)(Ue);(function(e){function t(e,o){var n;return(0,i.Z)(this,t),(n=(0,r.Z)(this,(0,l.Z)(t).call(this,e,o))).state={clientHeight:0,clientWidth:0,scrollHeight:0,scrollLeft:0,scrollTop:0,scrollWidth:0},n._onScroll=n._onScroll.bind((0,s.Z)(n)),n}return(0,a.Z)(t,e),(0,n.Z)(t,[{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.clientHeight,i=t.clientWidth,n=t.scrollHeight,r=t.scrollLeft,l=t.scrollTop,s=t.scrollWidth;return e({clientHeight:o,clientWidth:i,onScroll:this._onScroll,scrollHeight:n,scrollLeft:r,scrollTop:l,scrollWidth:s})}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.clientWidth,i=e.scrollHeight,n=e.scrollLeft,r=e.scrollTop,l=e.scrollWidth;this.setState({clientHeight:t,clientWidth:o,scrollHeight:i,scrollLeft:n,scrollTop:r,scrollWidth:l})}}]),t}(d.PureComponent)).propTypes={};function Be(e){var t=e.className,o=e.columns,i=e.style;return d.createElement("div",{className:t,role:"row",style:i},o)}Be.propTypes=null;var Ve={ASC:"ASC",DESC:"DESC"};function qe(e){var t=e.sortDirection,o=(0,f.Z)("ReactVirtualized__Table__sortableHeaderIcon",{"ReactVirtualized__Table__sortableHeaderIcon--ASC":t===Ve.ASC,"ReactVirtualized__Table__sortableHeaderIcon--DESC":t===Ve.DESC});return d.createElement("svg",{className:o,width:18,height:18,viewBox:"0 0 24 24"},t===Ve.ASC?d.createElement("path",{d:"M7 14l5-5 5 5z"}):d.createElement("path",{d:"M7 10l5 5 5-5z"}),d.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}function Ke(e){var t=e.dataKey,o=e.label,i=e.sortBy,n=e.sortDirection,r=i===t,l=[d.createElement("span",{className:"ReactVirtualized__Table__headerTruncatedText",key:"label",title:"string"===typeof o?o:null},o)];return r&&l.push(d.createElement(qe,{key:"SortIndicator",sortDirection:n})),l}function Xe(e){var t=e.className,o=e.columns,i=e.index,n=e.key,r=e.onRowClick,l=e.onRowDoubleClick,s=e.onRowMouseOut,a=e.onRowMouseOver,c=e.onRowRightClick,h=e.rowData,f=e.style,p={"aria-rowindex":i+1};return(r||l||s||a||c)&&(p["aria-label"]="row",p.tabIndex=0,r&&(p.onClick=function(e){return r({event:e,index:i,rowData:h})}),l&&(p.onDoubleClick=function(e){return l({event:e,index:i,rowData:h})}),s&&(p.onMouseOut=function(e){return s({event:e,index:i,rowData:h})}),a&&(p.onMouseOver=function(e){return a({event:e,index:i,rowData:h})}),c&&(p.onContextMenu=function(e){return c({event:e,index:i,rowData:h})})),d.createElement("div",(0,u.Z)({},p,{className:t,key:n,role:"row",style:f}),o)}qe.propTypes={},Ke.propTypes=null,Xe.propTypes=null;var Ye=function(e){function t(){return(0,i.Z)(this,t),(0,r.Z)(this,(0,l.Z)(t).apply(this,arguments))}return(0,a.Z)(t,e),t}(d.Component);function Je(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function Qe(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"getScrollbarWidth",value:function(){if(this.Grid){var e=(0,Q.findDOMNode)(this.Grid),t=e.clientWidth||0;return(e.offsetWidth||0)-t}return 0}},{key:"componentDidMount",value:function(){this._setScrollbarWidth()}},{key:"componentDidUpdate",value:function(){this._setScrollbarWidth()}},{key:"render",value:function(){var e=this,t=this.props,o=t.children,i=t.className,n=t.disableHeader,r=t.gridClassName,l=t.gridStyle,s=t.headerHeight,a=t.headerRowRenderer,c=t.height,h=t.id,p=t.noRowsRenderer,v=t.rowClassName,g=t.rowStyle,m=t.scrollToIndex,_=t.style,S=t.width,C=this.state.scrollbarWidth,y=n?c:c-s,w="function"===typeof v?v({index:-1}):v,x="function"===typeof g?g({index:-1}):g;return this._cachedColumnStyles=[],d.Children.toArray(o).forEach((function(t,o){var i=e._getFlexStyleForColumn(t,t.props.style);e._cachedColumnStyles[o]=Qe({overflow:"hidden"},i)})),d.createElement("div",{"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-colcount":d.Children.toArray(o).length,"aria-rowcount":this.props.rowCount,className:(0,f.Z)("ReactVirtualized__Table",i),id:h,role:"grid",style:_},!n&&a({className:(0,f.Z)("ReactVirtualized__Table__headerRow",w),columns:this._getHeaderColumns(),style:Qe({height:s,overflow:"hidden",paddingRight:C,width:S},x)}),d.createElement(H,(0,u.Z)({},this.props,{"aria-readonly":null,autoContainerWidth:!0,className:(0,f.Z)("ReactVirtualized__Table__Grid",r),cellRenderer:this._createRow,columnWidth:S,columnCount:1,height:y,id:void 0,noContentRenderer:p,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,role:"rowgroup",scrollbarWidth:C,scrollToRow:m,style:Qe({},l,{overflowX:"hidden"})})))}},{key:"_createColumn",value:function(e){var t=e.column,o=e.columnIndex,i=e.isScrolling,n=e.parent,r=e.rowData,l=e.rowIndex,s=this.props.onColumnClick,a=t.props,c=a.cellDataGetter,h=a.cellRenderer,u=a.className,p=a.columnData,v=a.dataKey,g=a.id,m=h({cellData:c({columnData:p,dataKey:v,rowData:r}),columnData:p,columnIndex:o,dataKey:v,isScrolling:i,parent:n,rowData:r,rowIndex:l}),_=this._cachedColumnStyles[o],S="string"===typeof m?m:null;return d.createElement("div",{"aria-colindex":o+1,"aria-describedby":g,className:(0,f.Z)("ReactVirtualized__Table__rowColumn",u),key:"Row"+l+"-Col"+o,onClick:function(e){s&&s({columnData:p,dataKey:v,event:e})},role:"gridcell",style:_,title:S},m)}},{key:"_createHeader",value:function(e){var t,o,i,n,r,l=e.column,s=e.index,a=this.props,c=a.headerClassName,h=a.headerStyle,u=a.onHeaderClick,p=a.sort,v=a.sortBy,g=a.sortDirection,m=l.props,_=m.columnData,S=m.dataKey,C=m.defaultSortDirection,y=m.disableSort,w=m.headerRenderer,x=m.id,R=m.label,T=!y&&p,z=(0,f.Z)("ReactVirtualized__Table__headerColumn",c,l.props.headerClassName,{ReactVirtualized__Table__sortableHeaderColumn:T}),b=this._getFlexStyleForColumn(l,Qe({},h,{},l.props.headerStyle)),I=w({columnData:_,dataKey:S,disableSort:y,label:R,sortBy:v,sortDirection:g});if(T||u){var Z=v!==S?C:g===Ve.DESC?Ve.ASC:Ve.DESC,M=function(e){T&&p({defaultSortDirection:C,event:e,sortBy:S,sortDirection:Z}),u&&u({columnData:_,dataKey:S,event:e})};r=l.props["aria-label"]||R||S,n="none",i=0,t=M,o=function(e){"Enter"!==e.key&&" "!==e.key||M(e)}}return v===S&&(n=g===Ve.ASC?"ascending":"descending"),d.createElement("div",{"aria-label":r,"aria-sort":n,className:z,id:x,key:"Header-Col"+s,onClick:t,onKeyDown:o,role:"columnheader",style:b,tabIndex:i},I)}},{key:"_createRow",value:function(e){var t=this,o=e.rowIndex,i=e.isScrolling,n=e.key,r=e.parent,l=e.style,s=this.props,a=s.children,c=s.onRowClick,h=s.onRowDoubleClick,u=s.onRowRightClick,p=s.onRowMouseOver,v=s.onRowMouseOut,g=s.rowClassName,m=s.rowGetter,_=s.rowRenderer,S=s.rowStyle,C=this.state.scrollbarWidth,y="function"===typeof g?g({index:o}):g,w="function"===typeof S?S({index:o}):S,x=m({index:o}),R=d.Children.toArray(a).map((function(e,n){return t._createColumn({column:e,columnIndex:n,isScrolling:i,parent:r,rowData:x,rowIndex:o,scrollbarWidth:C})})),T=(0,f.Z)("ReactVirtualized__Table__row",y),z=Qe({},l,{height:this._getRowHeight(o),overflow:"hidden",paddingRight:C},w);return _({className:T,columns:R,index:o,isScrolling:i,key:n,onRowClick:c,onRowDoubleClick:h,onRowRightClick:u,onRowMouseOver:p,onRowMouseOut:v,rowData:x,style:z})}},{key:"_getFlexStyleForColumn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o="".concat(e.props.flexGrow," ").concat(e.props.flexShrink," ").concat(e.props.width,"px"),i=Qe({},t,{flex:o,msFlex:o,WebkitFlex:o});return e.props.maxWidth&&(i.maxWidth=e.props.maxWidth),e.props.minWidth&&(i.minWidth=e.props.minWidth),i}},{key:"_getHeaderColumns",value:function(){var e=this,t=this.props,o=t.children;return(t.disableHeader?[]:d.Children.toArray(o)).map((function(t,o){return e._createHeader({column:t,index:o})}))}},{key:"_getRowHeight",value:function(e){var t=this.props.rowHeight;return"function"===typeof t?t({index:e}):t}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.scrollHeight,i=e.scrollTop;(0,this.props.onScroll)({clientHeight:t,scrollHeight:o,scrollTop:i})}},{key:"_onSectionRendered",value:function(e){var t=e.rowOverscanStartIndex,o=e.rowOverscanStopIndex,i=e.rowStartIndex,n=e.rowStopIndex;(0,this.props.onRowsRendered)({overscanStartIndex:t,overscanStopIndex:o,startIndex:i,stopIndex:n})}},{key:"_setRef",value:function(e){this.Grid=e}},{key:"_setScrollbarWidth",value:function(){var e=this.getScrollbarWidth();this.setState({scrollbarWidth:e})}}]),t}(d.PureComponent);(0,c.Z)($e,"defaultProps",{disableHeader:!1,estimatedRowSize:30,headerHeight:0,headerStyle:{},noRowsRenderer:function(){return null},onRowsRendered:function(){return null},onScroll:function(){return null},overscanIndicesGetter:E,overscanRowCount:10,rowRenderer:Xe,headerRowRenderer:Be,rowStyle:{},scrollToAlignment:"auto",scrollToIndex:-1,style:{}}),$e.propTypes={};var et=[],tt=null,ot=null;function it(){ot&&(ot=null,document.body&&null!=tt&&(document.body.style.pointerEvents=tt),tt=null)}function nt(){it(),et.forEach((function(e){return e.__resetIsScrolling()}))}function rt(e){e.currentTarget===window&&null==tt&&document.body&&(tt=document.body.style.pointerEvents,document.body.style.pointerEvents="none"),function(){ot&&P(ot);var e=0;et.forEach((function(t){e=Math.max(e,t.props.scrollingResetTimeInterval)})),ot=k(nt,e)}(),et.forEach((function(t){t.props.scrollElement===e.currentTarget&&t.__handleWindowScrollEvent()}))}function lt(e,t){et.some((function(e){return e.props.scrollElement===t}))||t.addEventListener("scroll",rt),et.push(e)}function st(e,t){(et=et.filter((function(t){return t!==e}))).length||(t.removeEventListener("scroll",rt),ot&&(P(ot),it()))}var at,ct,dt=function(e){return e===window},ht=function(e){return e.getBoundingClientRect()};function ut(e,t){if(e){if(dt(e)){var o=window,i=o.innerHeight,n=o.innerWidth;return{height:"number"===typeof i?i:0,width:"number"===typeof n?n:0}}return ht(e)}return{height:t.serverHeight,width:t.serverWidth}}function ft(e){return dt(e)&&document.documentElement?{top:"scrollY"in window?window.scrollY:document.documentElement.scrollTop,left:"scrollX"in window?window.scrollX:document.documentElement.scrollLeft}:{top:e.scrollTop,left:e.scrollLeft}}function pt(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var vt=function(){return"undefined"!==typeof window?window:void 0},gt=(ct=at=function(e){function t(){var e,o;(0,i.Z)(this,t);for(var n=arguments.length,a=new Array(n),d=0;d0&&void 0!==arguments[0]?arguments[0]:this.props.scrollElement,t=this.props.onResize,o=this.state,i=o.height,n=o.width,r=this._child||Q.findDOMNode(this);if(r instanceof Element&&e){var l=function(e,t){if(dt(t)&&document.documentElement){var o=document.documentElement,i=ht(e),n=ht(o);return{top:i.top-n.top,left:i.left-n.left}}var r=ft(t),l=ht(e),s=ht(t);return{top:l.top+r.top-s.top,left:l.left+r.left-s.left}}(r,e);this._positionFromTop=l.top,this._positionFromLeft=l.left}var s=ut(e,this.props);i===s.height&&n===s.width||(this.setState({height:s.height,width:s.width}),t({height:s.height,width:s.width}))}},{key:"componentDidMount",value:function(){var e=this.props.scrollElement;this._detectElementResize=V(),this.updatePosition(e),e&&(lt(this,e),this._registerResizeListener(e)),this._isMounted=!0}},{key:"componentDidUpdate",value:function(e,t){var o=this.props.scrollElement,i=e.scrollElement;i!==o&&null!=i&&null!=o&&(this.updatePosition(o),st(this,i),lt(this,o),this._unregisterResizeListener(i),this._registerResizeListener(o))}},{key:"componentWillUnmount",value:function(){var e=this.props.scrollElement;e&&(st(this,e),this._unregisterResizeListener(e)),this._isMounted=!1}},{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.isScrolling,i=t.scrollTop,n=t.scrollLeft,r=t.height,l=t.width;return e({onChildScroll:this._onChildScroll,registerChild:this._registerChild,height:r,isScrolling:o,scrollLeft:n,scrollTop:i,width:l})}}]),t}(d.PureComponent),(0,c.Z)(at,"propTypes",null),ct);(0,c.Z)(gt,"defaultProps",{onResize:function(){},onScroll:function(){},scrollingResetTimeInterval:150,scrollElement:vt(),serverHeight:0,serverWidth:0})}}]); -//# sourceMappingURL=417.9842b54e.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/417.9842b54e.chunk.js.map b/web-app/build/static/js/417.9842b54e.chunk.js.map deleted file mode 100644 index 87aff287cab..00000000000 --- a/web-app/build/static/js/417.9842b54e.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/417.9842b54e.chunk.js","mappings":"0RAEO,SAASA,EAA8BC,GAC5C,OAAOC,EAAAA,EAAAA,GAAqB,oBAAqBD,EACnD,CACA,ICHIE,EDIJ,GAD8BC,EAAAA,EAAAA,GAAuB,oBAAqB,CAAC,OAAQ,SAAU,WAAY,WAAY,gBAAiB,cAAe,uBAAwB,cAAe,c,sBCFtLC,EAAY,CAAC,WAAY,YAAa,YAAa,uBAAwB,oBAAqB,WAAY,WAkC5GC,GAAqBC,EAAAA,EAAAA,IAAO,MAAO,CACvCC,KAAM,oBACNP,KAAM,OACNQ,kBAvBwB,SAACC,EAAOC,GAChC,IACEC,EACEF,EADFE,WAEF,MAAO,CAACD,EAAOE,KAAMF,EAAO,WAADG,QAAYC,EAAAA,EAAAA,GAAWH,EAAWI,aAAkD,IAApCJ,EAAWK,sBAAiCN,EAAOM,qBAAsBN,EAAOC,EAAWM,SACxK,GAe2BX,EAIxB,SAAAY,GAAA,IACDC,EAAKD,EAALC,MACAR,EAAUO,EAAVP,WAAU,OACNS,EAAAA,EAAAA,GAAS,CACbC,QAAS,OACTC,OAAQ,SAERC,UAAW,MACXC,WAAY,SACZC,WAAY,SACZC,OAAQP,EAAMQ,MAAQR,GAAOS,QAAQC,OAAOC,QACpB,WAAvBnB,EAAWM,UAAoBc,EAAAA,EAAAA,GAAA,QAAAlB,OAE1BmB,EAAsBC,cAAa,WAAApB,OAAUmB,EAAsBE,YAAW,KAAM,CACxFC,UAAW,KAEY,UAAxBxB,EAAWI,UAAwB,CAEpCqB,YAAa,GACY,QAAxBzB,EAAWI,UAAsB,CAElCsB,WAAY,IACyB,IAApC1B,EAAWK,sBAAiC,CAE7CsB,cAAe,QACf,IAwGF,EAvGoCC,EAAAA,YAAiB,SAAwBC,EAASC,GACpF,IAAMhC,GAAQiC,EAAAA,EAAAA,GAAc,CAC1BjC,MAAO+B,EACPjC,KAAM,sBAGJoC,EAOElC,EAPFkC,SACAC,EAMEnC,EANFmC,UAASC,EAMPpC,EALFqC,UAAAA,OAAS,IAAAD,EAAG,MAAKA,EAAAE,EAKftC,EAJFO,qBAAAA,OAAoB,IAAA+B,GAAQA,EAAAC,EAI1BvC,EAHFwC,kBAAAA,OAAiB,IAAAD,GAAQA,EACzBjC,EAEEN,EAFFM,SACSmC,EACPzC,EADFQ,QAEFkC,GAAQC,EAAAA,EAAAA,GAA8B3C,EAAOL,GACzCiD,GAAiBC,EAAAA,EAAAA,MAAoB,CAAC,EACxCrC,EAAUiC,EACVA,GAAeG,EAAepC,QAO9BoC,IAAmBpC,IACrBA,EAAUoC,EAAepC,SAE3B,IAAMN,GAAaS,EAAAA,EAAAA,GAAS,CAAC,EAAGX,EAAO,CACrCyB,YAAamB,EAAenB,YAC5BqB,KAAMF,EAAeE,KACrBvC,qBAAAA,EACAD,SAAAA,EACAE,QAAAA,IAEIuC,EA9EkB,SAAA7C,GACxB,IACE6C,EAME7C,EANF6C,QACAxC,EAKEL,EALFK,qBACAkB,EAIEvB,EAJFuB,YACAnB,EAGEJ,EAHFI,SACAwC,EAEE5C,EAFF4C,KACAtC,EACEN,EADFM,QAEIwC,EAAQ,CACZ7C,KAAM,CAAC,OAAQI,GAAwB,uBAAwBD,GAAY,WAAJF,QAAeC,EAAAA,EAAAA,GAAWC,IAAaE,EAASiB,GAAe,cAAeqB,GAAQ,OAAJ1C,QAAWC,EAAAA,EAAAA,GAAWyC,MAEjL,OAAOG,EAAAA,EAAAA,GAAeD,EAAO1D,EAA+ByD,EAC9D,CAiEkBG,CAAkBhD,GAClC,OAAoBiD,EAAAA,EAAAA,KAAKC,EAAAA,EAAmBC,SAAU,CACpDC,MAAO,KACPpB,UAAuBiB,EAAAA,EAAAA,KAAKvD,GAAoBe,EAAAA,EAAAA,GAAS,CACvD4C,GAAIlB,EACJnC,WAAYA,EACZiC,WAAWqB,EAAAA,EAAAA,GAAKT,EAAQ5C,KAAMgC,GAC9BH,IAAKA,GACJU,EAAO,CACRR,SAA8B,kBAAbA,GAA0BM,GAGzBiB,EAAAA,EAAAA,MAAM3B,EAAAA,SAAgB,CACtCI,SAAU,CAAc,UAAb5B,EAA0Gb,IAAUA,GAAqB0D,EAAAA,EAAAA,KAAK,OAAQ,CAC/JhB,UAAW,cACXD,SAAU,YACN,KAAMA,MAP8DiB,EAAAA,EAAAA,KAAKO,EAAAA,EAAY,CAC3FzC,MAAO,iBACPiB,SAAUA,QASlB,G,wBClHA,SAASyB,IAEP,IAAIC,EAAQC,KAAKC,YAAYC,yBAAyBF,KAAK7D,MAAO6D,KAAKD,OACzD,OAAVA,QAA4BI,IAAVJ,GACpBC,KAAKI,SAASL,EAElB,CAEA,SAASM,EAA0BC,GAQjCN,KAAKI,SALL,SAAiBG,GACf,IAAIR,EAAQC,KAAKC,YAAYC,yBAAyBI,EAAWC,GACjE,OAAiB,OAAVR,QAA4BI,IAAVJ,EAAsBA,EAAQ,IACzD,EAEsBS,KAAKR,MAC7B,CAEA,SAASS,EAAoBH,EAAWI,GACtC,IACE,IAAIC,EAAYX,KAAK7D,MACjBoE,EAAYP,KAAKD,MACrBC,KAAK7D,MAAQmE,EACbN,KAAKD,MAAQW,EACbV,KAAKY,6BAA8B,EACnCZ,KAAKa,wBAA0Bb,KAAKc,wBAClCH,EACAJ,EAEJ,CAAE,QACAP,KAAK7D,MAAQwE,EACbX,KAAKD,MAAQQ,CACf,CACF,CAQA,SAASQ,EAASC,GAChB,IAAIC,EAAYD,EAAUC,UAE1B,IAAKA,IAAcA,EAAUC,iBAC3B,MAAM,IAAIC,MAAM,sCAGlB,GACgD,oBAAvCH,EAAUd,0BAC4B,oBAAtCe,EAAUH,wBAEjB,OAAOE,EAMT,IAAII,EAAqB,KACrBC,EAA4B,KAC5BC,EAAsB,KAgB1B,GAf4C,oBAAjCL,EAAUnB,mBACnBsB,EAAqB,qBACmC,oBAAxCH,EAAUM,4BAC1BH,EAAqB,6BAE4B,oBAAxCH,EAAUZ,0BACnBgB,EAA4B,4BACmC,oBAA/CJ,EAAUO,mCAC1BH,EAA4B,oCAEe,oBAAlCJ,EAAUR,oBACnBa,EAAsB,sBACmC,oBAAzCL,EAAUQ,6BAC1BH,EAAsB,8BAGC,OAAvBF,GAC8B,OAA9BC,GACwB,OAAxBC,EACA,CACA,IAAII,EAAgBV,EAAUW,aAAeX,EAAU/E,KACnD2F,EAC4C,oBAAvCZ,EAAUd,yBACb,6BACA,4BAEN,MAAMiB,MACJ,2FACEO,EACA,SACAE,EACA,uDACwB,OAAvBR,EAA8B,OAASA,EAAqB,KAC9B,OAA9BC,EACG,OAASA,EACT,KACqB,OAAxBC,EAA+B,OAASA,EAAsB,IATjE,uIAaJ,CAaA,GARkD,oBAAvCN,EAAUd,2BACnBe,EAAUnB,mBAAqBA,EAC/BmB,EAAUZ,0BAA4BA,GAMS,oBAAtCY,EAAUH,wBAAwC,CAC3D,GAA4C,oBAAjCG,EAAUY,mBACnB,MAAM,IAAIV,MACR,qHAIJF,EAAUR,oBAAsBA,EAEhC,IAAIoB,EAAqBZ,EAAUY,mBAEnCZ,EAAUY,mBAAqB,SAC7BlB,EACAJ,EACAuB,GAUA,IAAIC,EAAW/B,KAAKY,4BAChBZ,KAAKa,wBACLiB,EAEJD,EAAmBG,KAAKhC,KAAMW,EAAWJ,EAAWwB,EACtD,CACF,CAEA,OAAOf,CACT,C,8CA9GAlB,EAAmBmC,8BAA+B,EAClD5B,EAA0B4B,8BAA+B,EACzDxB,EAAoBwB,8BAA+B,C,yUC5CpC,SAASC,EAAkDtF,GACxE,IAAIuF,EAAYvF,EAAKuF,UACjBC,EAAWxF,EAAKwF,SAChBC,EAA0BzF,EAAKyF,wBAC/BC,EAA+B1F,EAAK0F,6BACpCC,EAAiB3F,EAAK2F,eACtBC,EAAe5F,EAAK4F,aACpBC,EAAoB7F,EAAK6F,kBACzBC,EAAgB9F,EAAK8F,cACrBC,EAAqC/F,EAAK+F,mCAI1CR,IAAcI,IAAuC,kBAAbH,GAAiD,kBAAjBI,GAA8BJ,IAAaI,KACrHH,EAAwBC,GAGpBI,GAAiB,GAAKA,IAAkBD,GAC1CE,IAGN,C,eCjBIC,EAEJ,WAKE,SAASA,EAA2BhG,GAClC,IAAIuF,EAAYvF,EAAKuF,UACjBU,EAAiBjG,EAAKiG,eACtBC,EAAoBlG,EAAKkG,mBAE7BC,EAAAA,EAAAA,GAAgB/C,KAAM4C,IAEtBnF,EAAAA,EAAAA,GAAgBuC,KAAM,2BAA4B,CAAC,IAEnDvC,EAAAA,EAAAA,GAAgBuC,KAAM,sBAAuB,IAE7CvC,EAAAA,EAAAA,GAAgBuC,KAAM,qBAAsB,IAE5CvC,EAAAA,EAAAA,GAAgBuC,KAAM,kBAAc,IAEpCvC,EAAAA,EAAAA,GAAgBuC,KAAM,uBAAmB,IAEzCvC,EAAAA,EAAAA,GAAgBuC,KAAM,0BAAsB,GAE5CA,KAAKgD,gBAAkBH,EACvB7C,KAAKiD,WAAad,EAClBnC,KAAKkD,mBAAqBJ,CAC5B,CAqQA,OAnQAK,EAAAA,EAAAA,GAAaP,EAA4B,CAAC,CACxCQ,IAAK,qBACL3D,MAAO,WACL,OAAO,CACT,GACC,CACD2D,IAAK,YACL3D,MAAO,SAAmB4D,GACxB,IAAIlB,EAAYkB,EAAMlB,UAClBW,EAAoBO,EAAMP,kBAC1BD,EAAiBQ,EAAMR,eAC3B7C,KAAKiD,WAAad,EAClBnC,KAAKkD,mBAAqBJ,EAC1B9C,KAAKgD,gBAAkBH,CACzB,GACC,CACDO,IAAK,eACL3D,MAAO,WACL,OAAOO,KAAKiD,UACd,GACC,CACDG,IAAK,uBACL3D,MAAO,WACL,OAAOO,KAAKkD,kBACd,GACC,CACDE,IAAK,uBACL3D,MAAO,WACL,OAAOO,KAAKsD,kBACd,GACC,CACDF,IAAK,sBACL3D,MAAO,WACL,OAAO,CACT,GAMC,CACD2D,IAAK,2BACL3D,MAAO,SAAkC8D,GACvC,GAAIA,EAAQ,GAAKA,GAASvD,KAAKiD,WAC7B,MAAM9B,MAAM,mBAAmB5E,OAAOgH,EAAO,4BAA4BhH,OAAOyD,KAAKiD,aAGvF,GAAIM,EAAQvD,KAAKsD,mBAIf,IAHA,IAAIE,EAAkCxD,KAAKyD,uCACvCC,EAASF,EAAgCE,OAASF,EAAgCvE,KAE7E0E,EAAI3D,KAAKsD,mBAAqB,EAAGK,GAAKJ,EAAOI,IAAK,CACzD,IAAI1E,EAAOe,KAAKgD,gBAAgB,CAC9BO,MAAOI,IAKT,QAAaxD,IAATlB,GAAsB2E,MAAM3E,GAC9B,MAAMkC,MAAM,kCAAkC5E,OAAOoH,EAAG,cAAcpH,OAAO0C,IAC3D,OAATA,GACTe,KAAK6D,yBAAyBF,GAAK,CACjCD,OAAQA,EACRzE,KAAM,GAERe,KAAK8D,kBAAoBP,IAEzBvD,KAAK6D,yBAAyBF,GAAK,CACjCD,OAAQA,EACRzE,KAAMA,GAERyE,GAAUzE,EACVe,KAAKsD,mBAAqBC,EAE9B,CAGF,OAAOvD,KAAK6D,yBAAyBN,EACvC,GACC,CACDH,IAAK,uCACL3D,MAAO,WACL,OAAOO,KAAKsD,oBAAsB,EAAItD,KAAK6D,yBAAyB7D,KAAKsD,oBAAsB,CAC7FI,OAAQ,EACRzE,KAAM,EAEV,GAOC,CACDmE,IAAK,eACL3D,MAAO,WACL,IAAI+D,EAAkCxD,KAAKyD,uCAI3C,OAH+BD,EAAgCE,OAASF,EAAgCvE,MAC/Ee,KAAKiD,WAAajD,KAAKsD,mBAAqB,GACftD,KAAKkD,kBAE7D,GAaC,CACDE,IAAK,2BACL3D,MAAO,SAAkCsE,GACvC,IAAIC,EAAcD,EAAME,MACpBA,OAAwB,IAAhBD,EAAyB,OAASA,EAC1CE,EAAgBH,EAAMG,cACtBC,EAAgBJ,EAAMI,cACtBC,EAAcL,EAAMK,YAExB,GAAIF,GAAiB,EACnB,OAAO,EAGT,IAGIG,EAHAC,EAAQtE,KAAKuE,yBAAyBH,GACtCI,EAAYF,EAAMZ,OAClBe,EAAYD,EAAYN,EAAgBI,EAAMrF,KAGlD,OAAQgF,GACN,IAAK,QACHI,EAAcG,EACd,MAEF,IAAK,MACHH,EAAcI,EACd,MAEF,IAAK,SACHJ,EAAcG,GAAaN,EAAgBI,EAAMrF,MAAQ,EACzD,MAEF,QACEoF,EAAcK,KAAKC,IAAIF,EAAWC,KAAKE,IAAIJ,EAAWL,IAI1D,IAAIU,EAAY7E,KAAK8E,eACrB,OAAOJ,KAAKC,IAAI,EAAGD,KAAKE,IAAIC,EAAYX,EAAeG,GACzD,GACC,CACDjB,IAAK,sBACL3D,MAAO,SAA6BsF,GAClC,IAAIb,EAAgBa,EAAOb,cACvBR,EAASqB,EAAOrB,OAGpB,GAAkB,IAFF1D,KAAK8E,eAGnB,MAAO,CAAC,EAGV,IAAIN,EAAYd,EAASQ,EAErBc,EAAQhF,KAAKiF,iBAAiBvB,GAE9BY,EAAQtE,KAAKuE,yBAAyBS,GAC1CtB,EAASY,EAAMZ,OAASY,EAAMrF,KAG9B,IAFA,IAAIiG,EAAOF,EAEJtB,EAASc,GAAaU,EAAOlF,KAAKiD,WAAa,GACpDiC,IACAxB,GAAU1D,KAAKuE,yBAAyBW,GAAMjG,KAGhD,MAAO,CACL+F,MAAOA,EACPE,KAAMA,EAEV,GAOC,CACD9B,IAAK,YACL3D,MAAO,SAAmB8D,GACxBvD,KAAKsD,mBAAqBoB,KAAKE,IAAI5E,KAAKsD,mBAAoBC,EAAQ,EACtE,GACC,CACDH,IAAK,gBACL3D,MAAO,SAAuB0F,EAAMC,EAAK1B,GACvC,KAAO0B,GAAOD,GAAM,CAClB,IAAIE,EAASD,EAAMV,KAAKY,OAAOH,EAAOC,GAAO,GACzCjB,EAAgBnE,KAAKuE,yBAAyBc,GAAQ3B,OAE1D,GAAIS,IAAkBT,EACpB,OAAO2B,EACElB,EAAgBT,EACzB0B,EAAMC,EAAS,EACNlB,EAAgBT,IACzByB,EAAOE,EAAS,EAEpB,CAEA,OAAID,EAAM,EACDA,EAAM,EAEN,CAEX,GACC,CACDhC,IAAK,qBACL3D,MAAO,SAA4B8D,EAAOG,GAGxC,IAFA,IAAI6B,EAAW,EAERhC,EAAQvD,KAAKiD,YAAcjD,KAAKuE,yBAAyBhB,GAAOG,OAASA,GAC9EH,GAASgC,EACTA,GAAY,EAGd,OAAOvF,KAAKwF,cAAcd,KAAKE,IAAIrB,EAAOvD,KAAKiD,WAAa,GAAIyB,KAAKY,MAAM/B,EAAQ,GAAIG,EACzF,GAQC,CACDN,IAAK,mBACL3D,MAAO,SAA0BiE,GAC/B,GAAIE,MAAMF,GACR,MAAMvC,MAAM,kBAAkB5E,OAAOmH,EAAQ,eAK/CA,EAASgB,KAAKC,IAAI,EAAGjB,GACrB,IAAIF,EAAkCxD,KAAKyD,uCACvCgC,EAAoBf,KAAKC,IAAI,EAAG3E,KAAKsD,oBAEzC,OAAIE,EAAgCE,QAAUA,EAErC1D,KAAKwF,cAAcC,EAAmB,EAAG/B,GAKzC1D,KAAK0F,mBAAmBD,EAAmB/B,EAEtD,KAGKd,CACT,CAjSA,GCEW+C,EAAoB,WAC7B,MARyB,qBAAXC,QAILA,OAAOC,OAPY,SADC,IAmB/B,ECTIC,EAEJ,WACE,SAASA,EAAkClJ,GACzC,IAAImJ,EAAqBnJ,EAAKoJ,cAC1BA,OAAuC,IAAvBD,EAAgCJ,IAAsBI,EACtEhB,GAASkB,EAAAA,EAAAA,GAAyBrJ,EAAM,CAAC,mBAE7CmG,EAAAA,EAAAA,GAAgB/C,KAAM8F,IAEtBrI,EAAAA,EAAAA,GAAgBuC,KAAM,mCAA+B,IAErDvC,EAAAA,EAAAA,GAAgBuC,KAAM,sBAAkB,GAGxCA,KAAKkG,4BAA8B,IAAItD,EAA2BmC,GAClE/E,KAAKmG,eAAiBH,CACxB,CAyKA,OAvKA7C,EAAAA,EAAAA,GAAa2C,EAAmC,CAAC,CAC/C1C,IAAK,qBACL3D,MAAO,WACL,OAAOO,KAAKkG,4BAA4BpB,eAAiB9E,KAAKmG,cAChE,GACC,CACD/C,IAAK,YACL3D,MAAO,SAAmBsF,GACxB/E,KAAKkG,4BAA4BE,UAAUrB,EAC7C,GACC,CACD3B,IAAK,eACL3D,MAAO,WACL,OAAOO,KAAKkG,4BAA4BG,cAC1C,GACC,CACDjD,IAAK,uBACL3D,MAAO,WACL,OAAOO,KAAKkG,4BAA4BI,sBAC1C,GACC,CACDlD,IAAK,uBACL3D,MAAO,WACL,OAAOO,KAAKkG,4BAA4BK,sBAC1C,GAMC,CACDnD,IAAK,sBACL3D,MAAO,SAA6B4D,GAClC,IAAIa,EAAgBb,EAAMa,cACtBR,EAASL,EAAMK,OAEfmB,EAAY7E,KAAKkG,4BAA4BpB,eAE7C0B,EAAgBxG,KAAK8E,eAErB2B,EAAmBzG,KAAK0G,qBAAqB,CAC/CxC,cAAeA,EACfR,OAAQA,EACRmB,UAAW2B,IAGb,OAAO9B,KAAKiC,MAAMF,GAAoBD,EAAgB3B,GACxD,GACC,CACDzB,IAAK,2BACL3D,MAAO,SAAkC8D,GACvC,OAAOvD,KAAKkG,4BAA4B3B,yBAAyBhB,EACnE,GACC,CACDH,IAAK,uCACL3D,MAAO,WACL,OAAOO,KAAKkG,4BAA4BzC,sCAC1C,GAGC,CACDL,IAAK,eACL3D,MAAO,WACL,OAAOiF,KAAKE,IAAI5E,KAAKmG,eAAgBnG,KAAKkG,4BAA4BpB,eACxE,GAGC,CACD1B,IAAK,2BACL3D,MAAO,SAAkCsE,GACvC,IAAIC,EAAcD,EAAME,MACpBA,OAAwB,IAAhBD,EAAyB,OAASA,EAC1CE,EAAgBH,EAAMG,cACtBC,EAAgBJ,EAAMI,cACtBC,EAAcL,EAAMK,YACxBD,EAAgBnE,KAAK4G,oBAAoB,CACvC1C,cAAeA,EACfR,OAAQS,IAGV,IAAIT,EAAS1D,KAAKkG,4BAA4BW,yBAAyB,CACrE5C,MAAOA,EACPC,cAAeA,EACfC,cAAeA,EACfC,YAAaA,IAGf,OAAOpE,KAAK8G,oBAAoB,CAC9B5C,cAAeA,EACfR,OAAQA,GAEZ,GAGC,CACDN,IAAK,sBACL3D,MAAO,SAA6BsH,GAClC,IAAI7C,EAAgB6C,EAAM7C,cACtBR,EAASqD,EAAMrD,OAKnB,OAJAA,EAAS1D,KAAK4G,oBAAoB,CAChC1C,cAAeA,EACfR,OAAQA,IAEH1D,KAAKkG,4BAA4Bc,oBAAoB,CAC1D9C,cAAeA,EACfR,OAAQA,GAEZ,GACC,CACDN,IAAK,YACL3D,MAAO,SAAmB8D,GACxBvD,KAAKkG,4BAA4Be,UAAU1D,EAC7C,GACC,CACDH,IAAK,uBACL3D,MAAO,SAA8ByH,GACnC,IAAIhD,EAAgBgD,EAAMhD,cACtBR,EAASwD,EAAMxD,OACfmB,EAAYqC,EAAMrC,UACtB,OAAOA,GAAaX,EAAgB,EAAIR,GAAUmB,EAAYX,EAChE,GACC,CACDd,IAAK,sBACL3D,MAAO,SAA6B0H,GAClC,IAAIjD,EAAgBiD,EAAMjD,cACtBR,EAASyD,EAAMzD,OAEfmB,EAAY7E,KAAKkG,4BAA4BpB,eAE7C0B,EAAgBxG,KAAK8E,eAEzB,GAAID,IAAc2B,EAChB,OAAO9C,EAEP,IAAI+C,EAAmBzG,KAAK0G,qBAAqB,CAC/CxC,cAAeA,EACfR,OAAQA,EACRmB,UAAWA,IAGb,OAAOH,KAAKiC,MAAMF,GAAoBD,EAAgBtC,GAE1D,GACC,CACDd,IAAK,sBACL3D,MAAO,SAA6B2H,GAClC,IAAIlD,EAAgBkD,EAAMlD,cACtBR,EAAS0D,EAAM1D,OAEfmB,EAAY7E,KAAKkG,4BAA4BpB,eAE7C0B,EAAgBxG,KAAK8E,eAEzB,GAAID,IAAc2B,EAChB,OAAO9C,EAEP,IAAI+C,EAAmBzG,KAAK0G,qBAAqB,CAC/CxC,cAAeA,EACfR,OAAQA,EACRmB,UAAW2B,IAGb,OAAO9B,KAAKiC,MAAMF,GAAoB5B,EAAYX,GAEtD,KAGK4B,CACT,CAzLA,GCTe,SAASuB,IACtB,IAAIC,IAAiBC,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,KAAmBA,UAAU,GAChFE,EAAgB,CAAC,EACrB,OAAO,SAAU7K,GACf,IAAI8K,EAAW9K,EAAK8K,SAChBC,EAAU/K,EAAK+K,QACfC,EAAOC,OAAOD,KAAKD,GACnBG,GAAkBR,GAAkBM,EAAKG,OAAM,SAAU3E,GAC3D,IAAI3D,EAAQkI,EAAQvE,GACpB,OAAO4E,MAAMC,QAAQxI,GAASA,EAAM+H,OAAS,EAAI/H,GAAS,CAC5D,IACIyI,EAAeN,EAAKJ,SAAWK,OAAOD,KAAKH,GAAeD,QAAUI,EAAKO,MAAK,SAAU/E,GAC1F,IAAIgF,EAAcX,EAAcrE,GAC5B3D,EAAQkI,EAAQvE,GACpB,OAAO4E,MAAMC,QAAQxI,GAAS2I,EAAYC,KAAK,OAAS5I,EAAM4I,KAAK,KAAOD,IAAgB3I,CAC5F,IACAgI,EAAgBE,EAEZG,GAAkBI,GACpBR,EAASC,EAEb,CACF,CCnBe,SAASW,EAAwB1L,GAC9C,IAAIwF,EAAWxF,EAAKwF,SAChBmG,EAA6B3L,EAAK2L,2BAClCC,EAAqB5L,EAAK4L,mBAC1BC,EAAmB7L,EAAK6L,iBACxBC,EAA4B9L,EAAK8L,0BACjCC,EAAwB/L,EAAK+L,sBAC7BC,EAAehM,EAAKgM,aACpBC,EAAejM,EAAKiM,aACpBC,EAAoBlM,EAAKkM,kBACzBpG,EAAgB9F,EAAK8F,cACrBzD,EAAOrC,EAAKqC,KACZ8J,EAA4BnM,EAAKmM,0BACjCC,EAA4BpM,EAAKoM,0BACjC7G,EAAYoG,EAA2BlC,eACvC4C,EAAmBvG,GAAiB,GAAKA,EAAgBP,EAIzD8G,IAHiBhK,IAAS2J,GAAgBG,IAA8BN,GAAwC,kBAAbrG,GAAyBA,IAAaqG,GAGlGK,IAAsBJ,GAA6BhG,IAAkBiG,GAC9GK,EAA0BtG,IAEhBuG,GAAoB9G,EAAY,IAAMlD,EAAO2J,GAAgBzG,EAAYqG,IAK/EK,EAAeN,EAA2BzD,eAAiB7F,GAC7D+J,EAA0B7G,EAAY,EAG5C,CCrCA,ICCIlD,ECAAiK,EFDJ,IAAoC,qBAAXtD,SAA0BA,OAAOuD,WAAYvD,OAAOuD,SAASC,eCEvE,SAASC,EAAcC,GACpC,KAAKrK,GAAiB,IAATA,GAAcqK,IACrBC,EAAW,CACb,IAAIC,EAAYL,SAASC,cAAc,OACvCI,EAAUC,MAAMhN,SAAW,WAC3B+M,EAAUC,MAAMC,IAAM,UACtBF,EAAUC,MAAME,MAAQ,OACxBH,EAAUC,MAAMzM,OAAS,OACzBwM,EAAUC,MAAMG,SAAW,SAC3BT,SAASU,KAAKC,YAAYN,GAC1BvK,EAAOuK,EAAUO,YAAcP,EAAUQ,YACzCb,SAASU,KAAKI,YAAYT,EAC5B,CAGF,OAAOvK,CACT,CCLA,ICJIiL,EAAQC,EDIRC,GATFlB,EADoB,qBAAXtD,OACHA,OACmB,qBAATyE,KACVA,KAEA,CAAC,GAKSC,uBAAyBpB,EAAIqB,6BAA+BrB,EAAIsB,0BAA4BtB,EAAIuB,wBAA0BvB,EAAIwB,yBAA2B,SAAUhD,GACnL,OAAOwB,EAAIyB,WAAWjD,EAAU,IAAO,GACzC,EAEIkD,EAAS1B,EAAI2B,sBAAwB3B,EAAI4B,4BAA8B5B,EAAI6B,yBAA2B7B,EAAI8B,uBAAyB9B,EAAI+B,wBAA0B,SAAUC,GAC7KhC,EAAIiC,aAAaD,EACnB,EAEWE,EAAMhB,EACNiB,EAAMT,EElBNU,EAAyB,SAAgCC,GAClE,OAAOF,EAAIE,EAAML,GACnB,EAQWM,EAA0B,SAAiC9D,EAAU+D,GAC9E,IAAIzG,EAEJ0G,QAAQC,UAAUC,MAAK,WACrB5G,EAAQ6G,KAAKC,KACf,IAEA,IAQIP,EAAQ,CACVL,GAAIE,GATQ,SAASW,IACjBF,KAAKC,MAAQ9G,GAASyG,EACxB/D,EAAS1F,OAETuJ,EAAML,GAAKE,EAAIW,EAEnB,KAKA,OAAOR,CACT,EDtBA,SAASS,EAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,EAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,EAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,EAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAkB9f,IAMHM,EACQ,WADRA,EAES,YAWTC,GAAQhD,EAAQD,EAEpB,SAAUkD,GAIR,SAASD,EAAKhR,GACZ,IAAIkR,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAMmN,GAEtBE,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBJ,GAAMnL,KAAKhC,KAAM7D,KAE1EsB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,0BAA2BhG,MAE1E5J,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,oBAAqBhG,GAAuB,KAE3F5J,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iCAAkC,OAEjF5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,8BAA+B,OAE9E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,4BAA4B,IAE3E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,2BAA2B,IAE1E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,2BAA4B,IAE3E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,yBAA0B,IAEzE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,IAE5E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,2BAAuB,IAEtE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,0BAAsB,IAErE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,yBAAqB,IAEpE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,wBAAoB,IAEnE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAkB,IAEjE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,qBAAiB,IAEhE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,4BAA6B,IAE5E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,2BAA4B,IAE3E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,yBAA0B,IAEzE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,wBAAyB,IAExE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,yBAAqB,IAEpE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,0BAAsB,IAErE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sCAAkC,IAEjF5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAe,CAAC,IAE/D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAc,CAAC,IAE9D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,gCAAgC,WAC7EA,EAAMI,+BAAiC,KAEvCJ,EAAMjN,SAAS,CACbsN,aAAa,EACbC,uBAAuB,GAE3B,KAEAlQ,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,+BAA+B,WAC5E,IAAIO,EAAoBP,EAAMlR,MAAMyR,kBAEpCP,EAAMQ,wBAAwB,CAC5BnG,SAAUkG,EACVjG,QAAS,CACPmG,yBAA0BT,EAAMU,kBAChCC,wBAAyBX,EAAMY,iBAC/BC,iBAAkBb,EAAMc,0BACxBC,gBAAiBf,EAAMgB,yBACvBC,sBAAuBjB,EAAMkB,eAC7BC,qBAAsBnB,EAAMoB,cAC5BC,cAAerB,EAAMsB,uBACrBC,aAAcvB,EAAMwB,wBAG1B,KAEApR,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,SAAUlP,GACpFkP,EAAMyB,oBAAsB3Q,CAC9B,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,SAAU0B,GAIhEA,EAAMnC,SAAWS,EAAMyB,qBACzBzB,EAAM2B,kBAAkBD,EAAMnC,OAElC,IAEA,IAAIqC,EAA+B,IAAInJ,EAAkC,CACvE3D,UAAWhG,EAAM+S,YACjBrM,eAAgB,SAAwBkC,GACtC,OAAOoI,EAAKgC,gBAAgBhT,EAAMiT,YAA3BjC,CAAwCpI,EACjD,EACAjC,kBAAmBqK,EAAKkC,wBAAwBlT,KAE9CmT,EAA4B,IAAIxJ,EAAkC,CACpE3D,UAAWhG,EAAMoT,SACjB1M,eAAgB,SAAwBkC,GACtC,OAAOoI,EAAKgC,gBAAgBhT,EAAMqT,UAA3BrC,CAAsCpI,EAC/C,EACAjC,kBAAmBqK,EAAKsC,qBAAqBtT,KAiC/C,OA/BAkR,EAAMtN,MAAQ,CACZ2P,cAAe,CACbT,6BAA8BA,EAC9BK,0BAA2BA,EAC3BK,gBAAiBxT,EAAMiT,YACvBQ,cAAezT,EAAMqT,UACrBK,gBAAiB1T,EAAM+S,YACvBY,aAAc3T,EAAMoT,SACpBQ,iBAAuC,IAAtB5T,EAAMuR,YACvBsC,mBAAoB7T,EAAM8T,eAC1BC,gBAAiB/T,EAAMgU,YACvB9G,cAAe,EACf+G,uBAAuB,GAEzB1C,aAAa,EACb2C,0BEnLgC,EFoLhCC,wBEpLgC,EFqLhCC,WAAY,EACZC,UAAW,EACXC,2BAA4B,KAC5B9C,uBAAuB,GAGrBxR,EAAMgU,YAAc,IACtB9C,EAAMqD,kBAAoBrD,EAAMsD,wBAAwBxU,EAAOkR,EAAMtN,QAGnE5D,EAAM8T,eAAiB,IACzB5C,EAAMuD,mBAAqBvD,EAAMwD,yBAAyB1U,EAAOkR,EAAMtN,QAGlEsN,CACT,CA2iCA,OA3rCAyD,EAAAA,EAAAA,GAAU3D,EAAMC,IAsJhBjK,EAAAA,EAAAA,GAAagK,EAAM,CAAC,CAClB/J,IAAK,mBACL3D,MAAO,WACL,IAAI7C,EAAO2K,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC5EwJ,EAAiBnU,EAAKoU,UACtBA,OAA+B,IAAnBD,EAA4B/Q,KAAK7D,MAAM2M,kBAAoBiI,EACvEE,EAAmBrU,EAAKsU,YACxBA,OAAmC,IAArBD,EAA8BjR,KAAK7D,MAAM8T,eAAiBgB,EACxEE,EAAgBvU,EAAKwU,SACrBA,OAA6B,IAAlBD,EAA2BnR,KAAK7D,MAAMgU,YAAcgB,EAE/DE,EAAc1E,EAAc,CAAC,EAAG3M,KAAK7D,MAAO,CAC9C2M,kBAAmBkI,EACnBf,eAAgBiB,EAChBf,YAAaiB,IAGf,MAAO,CACLb,WAAYvQ,KAAK6Q,yBAAyBQ,GAC1Cb,UAAWxQ,KAAK2Q,wBAAwBU,GAE5C,GAKC,CACDjO,IAAK,qBACL3D,MAAO,WACL,OAAOO,KAAKD,MAAM2P,cAAcJ,0BAA0BxK,cAC5D,GAKC,CACD1B,IAAK,uBACL3D,MAAO,WACL,OAAOO,KAAKD,MAAM2P,cAAcT,6BAA6BnK,cAC/D,GAMC,CACD1B,IAAK,oBACL3D,MAAO,SAA2B4D,GAChC,IAAIiO,EAAmBjO,EAAMkN,WACzBgB,OAAuC,IAArBD,EAA8B,EAAIA,EACpDE,EAAkBnO,EAAMmN,UACxBiB,OAAqC,IAApBD,EAA6B,EAAIA,EAItD,KAAIC,EAAiB,GAArB,CAKAzR,KAAK0R,uBAEL,IAAIC,EAAc3R,KAAK7D,MACnByV,EAAaD,EAAYC,WACzBC,EAAYF,EAAYE,UACxB7U,EAAS2U,EAAY3U,OACrB2M,EAAQgI,EAAYhI,MACpB+F,EAAgB1P,KAAKD,MAAM2P,cAK3BrG,EAAgBqG,EAAcrG,cAC9ByI,EAAkBpC,EAAcJ,0BAA0BxK,eAC1DiN,EAAoBrC,EAAcT,6BAA6BnK,eAC/DyL,EAAa7L,KAAKE,IAAIF,KAAKC,IAAI,EAAGoN,EAAoBpI,EAAQN,GAAgBkI,GAC9Ef,EAAY9L,KAAKE,IAAIF,KAAKC,IAAI,EAAGmN,EAAkB9U,EAASqM,GAAgBoI,GAKhF,GAAIzR,KAAKD,MAAMwQ,aAAeA,GAAcvQ,KAAKD,MAAMyQ,YAAcA,EAAW,CAG9E,IAEIwB,EAAW,CACbtE,aAAa,EACb2C,0BAJ8BE,IAAevQ,KAAKD,MAAMwQ,WAAaA,EAAavQ,KAAKD,MAAMwQ,WE9RjE,GADC,EF+RoIvQ,KAAKD,MAAMsQ,0BAK5KC,wBAJ4BE,IAAcxQ,KAAKD,MAAMyQ,UAAYA,EAAYxQ,KAAKD,MAAMyQ,UE/R5D,GADC,EFgS8HxQ,KAAKD,MAAMuQ,wBAKtKG,2BAA4BvD,GAGzB0E,IACHI,EAASxB,UAAYA,GAGlBqB,IACHG,EAASzB,WAAaA,GAGxByB,EAASrE,uBAAwB,EACjC3N,KAAKI,SAAS4R,EAChB,CAEAhS,KAAKiS,wBAAwB,CAC3B1B,WAAYA,EACZC,UAAWA,EACXuB,kBAAmBA,EACnBD,gBAAiBA,GApDnB,CAsDF,GASC,CACD1O,IAAK,gCACL3D,MAAO,SAAuCsE,GAC5C,IAAImN,EAAcnN,EAAMmN,YACpBE,EAAWrN,EAAMqN,SACrBpR,KAAKkS,+BAAgF,kBAAxClS,KAAKkS,+BAA8CxN,KAAKE,IAAI5E,KAAKkS,+BAAgChB,GAAeA,EAC7JlR,KAAKmS,4BAA0E,kBAArCnS,KAAKmS,4BAA2CzN,KAAKE,IAAI5E,KAAKmS,4BAA6Bf,GAAYA,CACnJ,GAOC,CACDhO,IAAK,kBACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpB+S,EAAckD,EAAalD,YAC3BK,EAAW6C,EAAa7C,SACxBG,EAAgB1P,KAAKD,MAAM2P,cAC/BA,EAAcT,6BAA6B1K,yBAAyB2K,EAAc,GAClFQ,EAAcJ,0BAA0B/K,yBAAyBgL,EAAW,EAC9E,GAOC,CACDnM,IAAK,oBACL3D,MAAO,WACL,IAAIsH,EAAQQ,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC7E8K,EAAoBtL,EAAMmK,YAC1BA,OAAoC,IAAtBmB,EAA+B,EAAIA,EACjDC,EAAiBvL,EAAMqK,SACvBA,OAA8B,IAAnBkB,EAA4B,EAAIA,EAE3CC,EAAevS,KAAK7D,MACpB8T,EAAiBsC,EAAatC,eAC9BE,EAAcoC,EAAapC,YAC3BT,EAAgB1P,KAAKD,MAAM2P,cAC/BA,EAAcT,6BAA6BhI,UAAUiK,GACrDxB,EAAcJ,0BAA0BrI,UAAUmK,GAIlDpR,KAAKwS,yBAA2BvC,GAAkB,IElXlB,IFkXwBjQ,KAAKD,MAAMsQ,0BAAyDa,GAAejB,EAAiBiB,GAAejB,GAC3KjQ,KAAKyS,wBAA0BtC,GAAe,IEnXd,IFmXoBnQ,KAAKD,MAAMuQ,wBAAuDc,GAAYjB,EAAciB,GAAYjB,GAG5JnQ,KAAK0S,YAAc,CAAC,EACpB1S,KAAK2S,WAAa,CAAC,EACnB3S,KAAK4S,aACP,GAKC,CACDxP,IAAK,eACL3D,MAAO,SAAsByH,GAC3B,IAAIgK,EAAchK,EAAMgK,YACpBE,EAAWlK,EAAMkK,SACjBlC,EAAclP,KAAK7D,MAAM+S,YACzB/S,EAAQ6D,KAAK7D,MAGb+S,EAAc,QAAqB/O,IAAhB+Q,GACrBlR,KAAK6S,mCAAmClG,EAAc,CAAC,EAAGxQ,EAAO,CAC/D8T,eAAgBiB,UAIH/Q,IAAbiR,GACFpR,KAAK8S,+BAA+BnG,EAAc,CAAC,EAAGxQ,EAAO,CAC3DgU,YAAaiB,IAGnB,GACC,CACDhO,IAAK,oBACL3D,MAAO,WACL,IAAIsT,EAAe/S,KAAK7D,MACpB6W,EAAmBD,EAAaC,iBAChChW,EAAS+V,EAAa/V,OACtBuT,EAAawC,EAAaxC,WAC1BN,EAAiB8C,EAAa9C,eAC9BO,EAAYuC,EAAavC,UACzBL,EAAc4C,EAAa5C,YAC3BxG,EAAQoJ,EAAapJ,MACrB+F,EAAgB1P,KAAKD,MAAM2P,cAsB/B,GApBA1P,KAAK0Q,kBAAoB,EACzB1Q,KAAK4Q,mBAAqB,EAG1B5Q,KAAKiT,6BAIAvD,EAAcU,uBACjBpQ,KAAKI,UAAS,SAAUG,GACtB,IAAI2S,EAAcvG,EAAc,CAAC,EAAGpM,EAAW,CAC7CoN,uBAAuB,IAKzB,OAFAuF,EAAYxD,cAAcrG,cAAgB2J,IAC1CE,EAAYxD,cAAcU,uBAAwB,EAC3C8C,CACT,IAGwB,kBAAf3C,GAA2BA,GAAc,GAA0B,kBAAdC,GAA0BA,GAAa,EAAG,CACxG,IAAI0C,EAAc/F,EAAKgG,gCAAgC,CACrD5S,UAAWP,KAAKD,MAChBwQ,WAAYA,EACZC,UAAWA,IAGT0C,IACFA,EAAYvF,uBAAwB,EACpC3N,KAAKI,SAAS8S,GAElB,CAGIlT,KAAK8O,sBAGH9O,KAAK8O,oBAAoByB,aAAevQ,KAAKD,MAAMwQ,aACrDvQ,KAAK8O,oBAAoByB,WAAavQ,KAAKD,MAAMwQ,YAG/CvQ,KAAK8O,oBAAoB0B,YAAcxQ,KAAKD,MAAMyQ,YACpDxQ,KAAK8O,oBAAoB0B,UAAYxQ,KAAKD,MAAMyQ,YAMpD,IAAI4C,EAAuBpW,EAAS,GAAK2M,EAAQ,EAE7CsG,GAAkB,GAAKmD,GACzBpT,KAAK6S,qCAGH1C,GAAe,GAAKiD,GACtBpT,KAAK8S,iCAIP9S,KAAKqT,8BAGLrT,KAAKiS,wBAAwB,CAC3B1B,WAAYA,GAAc,EAC1BC,UAAWA,GAAa,EACxBuB,kBAAmBrC,EAAcT,6BAA6BnK,eAC9DgN,gBAAiBpC,EAAcJ,0BAA0BxK,iBAG3D9E,KAAKsT,qCACP,GAOC,CACDlQ,IAAK,qBACL3D,MAAO,SAA4BkB,EAAWJ,GAC5C,IAAIgT,EAASvT,KAETwT,EAAexT,KAAK7D,MACpByV,EAAa4B,EAAa5B,WAC1BC,EAAY2B,EAAa3B,UACzB3C,EAAcsE,EAAatE,YAC3BlS,EAASwW,EAAaxW,OACtBuS,EAAWiE,EAAajE,SACxBzG,EAAoB0K,EAAa1K,kBACjCmH,EAAiBuD,EAAavD,eAC9BE,EAAcqD,EAAarD,YAC3BxG,EAAQ6J,EAAa7J,MACrB8J,EAAczT,KAAKD,MACnBwQ,EAAakD,EAAYlD,WACzBE,EAA6BgD,EAAYhD,2BACzCD,EAAYiD,EAAYjD,UACxBd,EAAgB+D,EAAY/D,cAGhC1P,KAAKiT,6BAKL,IAAIS,EAAwCxE,EAAc,GAA+B,IAA1BvO,EAAUuO,aAAqBK,EAAW,GAA4B,IAAvB5O,EAAU4O,SAMpHkB,IAA+BvD,KAG5B2E,GAAatB,GAAc,IAAMA,IAAevQ,KAAK8O,oBAAoByB,YAAcmD,KAC1F1T,KAAK8O,oBAAoByB,WAAaA,IAGnCqB,GAAcpB,GAAa,IAAMA,IAAcxQ,KAAK8O,oBAAoB0B,WAAakD,KACxF1T,KAAK8O,oBAAoB0B,UAAYA,IAOzC,IAAIzH,GAAiD,IAApBpI,EAAUgJ,OAAoC,IAArBhJ,EAAU3D,SAAiBA,EAAS,GAAK2M,EAAQ,EAqD3G,GAlDI3J,KAAKwS,0BACPxS,KAAKwS,0BAA2B,EAEhCxS,KAAK6S,mCAAmC7S,KAAK7D,QAE7CmM,EAAwB,CACtBC,2BAA4BmH,EAAcT,6BAC1CzG,mBAAoB7H,EAAUuO,YAC9BzG,iBAAkB9H,EAAUyO,YAC5B1G,0BAA2B/H,EAAUmI,kBACrCH,sBAAuBhI,EAAUsP,eACjCrH,aAAcjI,EAAUgJ,MACxBd,aAAc0H,EACdzH,kBAAmBA,EACnBpG,cAAeuN,EACfhR,KAAM0K,EACNZ,0BAA2BA,EAC3BC,0BAA2B,WACzB,OAAOuK,EAAOV,mCAAmCU,EAAOpX,MAC1D,IAIA6D,KAAKyS,yBACPzS,KAAKyS,yBAA0B,EAE/BzS,KAAK8S,+BAA+B9S,KAAK7D,QAEzCmM,EAAwB,CACtBC,2BAA4BmH,EAAcJ,0BAC1C9G,mBAAoB7H,EAAU4O,SAC9B9G,iBAAkB9H,EAAU6O,UAC5B9G,0BAA2B/H,EAAUmI,kBACrCH,sBAAuBhI,EAAUwP,YACjCvH,aAAcjI,EAAU3D,OACxB6L,aAAc2H,EACd1H,kBAAmBA,EACnBpG,cAAeyN,EACflR,KAAMjC,EACN+L,0BAA2BA,EAC3BC,0BAA2B,WACzB,OAAOuK,EAAOT,+BAA+BS,EAAOpX,MACtD,IAKJ6D,KAAKqT,8BAGD9C,IAAehQ,EAAUgQ,YAAcC,IAAcjQ,EAAUiQ,UAAW,CAC5E,IAAIsB,EAAkBpC,EAAcJ,0BAA0BxK,eAC1DiN,EAAoBrC,EAAcT,6BAA6BnK,eAEnE9E,KAAKiS,wBAAwB,CAC3B1B,WAAYA,EACZC,UAAWA,EACXuB,kBAAmBA,EACnBD,gBAAiBA,GAErB,CAEA9R,KAAKsT,qCACP,GACC,CACDlQ,IAAK,uBACL3D,MAAO,WACDO,KAAKyN,gCACPnC,EAAuBtL,KAAKyN,+BAEhC,GAQC,CACDrK,IAAK,SACL3D,MAAO,WACL,IAAIkU,EAAe3T,KAAK7D,MACpByX,EAAqBD,EAAaC,mBAClChC,EAAa+B,EAAa/B,WAC1BC,EAAY8B,EAAa9B,UACzBvT,EAAYqV,EAAarV,UACzBuV,EAAiBF,EAAaE,eAC9BC,EAAgBH,EAAaG,cAC7BC,EAAiBJ,EAAaI,eAC9B/W,EAAS2W,EAAa3W,OACtBkO,EAAKyI,EAAazI,GAClB8I,EAAoBL,EAAaK,kBACjCC,EAAON,EAAaM,KACpBxK,EAAQkK,EAAalK,MACrByK,EAAWP,EAAaO,SACxBvK,EAAQgK,EAAahK,MACrBwK,EAAenU,KAAKD,MACpB2P,EAAgByE,EAAazE,cAC7B/B,EAAwBwG,EAAaxG,sBAErCD,EAAc1N,KAAKoU,eAEnBC,EAAY,CACdC,UAAW,aACXC,UAAW,MACXvX,OAAQ4U,EAAa,OAAS5U,EAC9BP,SAAU,WACVkN,MAAOkI,EAAY,OAASlI,EAC5B6K,wBAAyB,QACzBC,WAAY,aAGV9G,IACF3N,KAAK0S,YAAc,CAAC,GAKjB1S,KAAKD,MAAM2N,aACd1N,KAAK0U,mBAIP1U,KAAK2U,2BAA2B3U,KAAK7D,MAAO6D,KAAKD,OAEjD,IAAIgS,EAAoBrC,EAAcT,6BAA6BnK,eAC/DgN,EAAkBpC,EAAcJ,0BAA0BxK,eAI1D8P,EAAwB9C,EAAkB9U,EAAS0S,EAAcrG,cAAgB,EACjFwL,EAA0B9C,EAAoBpI,EAAQ+F,EAAcrG,cAAgB,EAEpFwL,IAA4B7U,KAAK8U,0BAA4BF,IAA0B5U,KAAK+U,yBAC9F/U,KAAK8U,yBAA2BD,EAChC7U,KAAK+U,uBAAyBH,EAC9B5U,KAAKgV,2BAA4B,GAQnCX,EAAUY,UAAYlD,EAAoB6C,GAAyBjL,EAAQ,SAAW,OACtF0K,EAAUa,UAAYpD,EAAkB+C,GAA2B7X,EAAS,SAAW,OACvF,IAAImY,EAAoBnV,KAAKoV,mBACzBC,EAAqD,IAA7BF,EAAkB3N,QAAgBxK,EAAS,GAAK2M,EAAQ,EACpF,OAAO1L,EAAAA,cAAoB,OAAOnB,EAAAA,EAAAA,GAAS,CACzCqB,IAAK6B,KAAKsV,2BACTzB,EAAgB,CACjB,aAAc7T,KAAK7D,MAAM,cACzB,gBAAiB6D,KAAK7D,MAAM,iBAC5BmC,WAAWqB,EAAAA,EAAAA,GAAK,yBAA0BrB,GAC1C4M,GAAIA,EACJqK,SAAUvV,KAAKwV,UACfvB,KAAMA,EACNxK,MAAOkD,EAAc,CAAC,EAAG0H,EAAW,CAAC,EAAG5K,GACxCyK,SAAUA,IACRiB,EAAkB3N,OAAS,GAAKvJ,EAAAA,cAAoB,MAAO,CAC7DK,UAAW,+CACX2V,KAAMH,EACNrK,MAAOkD,EAAc,CACnBhD,MAAOiK,EAAqB,OAAS7B,EACrC/U,OAAQ8U,EACR2D,SAAU1D,EACV9U,UAAW6U,EACXlI,SAAU,SACV5L,cAAe0P,EAAc,OAAS,GACtCjR,SAAU,YACTsX,IACFoB,GAAoBE,GAAyBrB,IAClD,GAGC,CACD5Q,IAAK,6BACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MACjF2V,EAAevZ,EAAMuZ,aACrBC,EAAoBxZ,EAAMwZ,kBAC1BzG,EAAc/S,EAAM+S,YACpB0G,EAA2BzZ,EAAMyZ,yBACjC5Y,EAASb,EAAMa,OACf6Y,EAAsB1Z,EAAM0Z,oBAC5BC,EAAwB3Z,EAAM2Z,sBAC9BC,EAAmB5Z,EAAM4Z,iBACzBxG,EAAWpT,EAAMoT,SACjB5F,EAAQxN,EAAMwN,MACdqM,EAAoB7Z,EAAM6Z,kBAC1B3F,EAA4BtQ,EAAMsQ,0BAClCC,EAA0BvQ,EAAMuQ,wBAChCZ,EAAgB3P,EAAM2P,cACtBc,EAAYxQ,KAAK0Q,kBAAoB,EAAI1Q,KAAK0Q,kBAAoB3Q,EAAMyQ,UACxED,EAAavQ,KAAK4Q,mBAAqB,EAAI5Q,KAAK4Q,mBAAqB7Q,EAAMwQ,WAE3E7C,EAAc1N,KAAKoU,aAAajY,EAAO4D,GAI3C,GAFAC,KAAKoV,mBAAqB,GAEtBpY,EAAS,GAAK2M,EAAQ,EAAG,CAC3B,IAAIsM,EAAuBvG,EAAcT,6BAA6BjI,oBAAoB,CACxF9C,cAAeyF,EACfjG,OAAQ6M,IAEN2F,EAAoBxG,EAAcJ,0BAA0BtI,oBAAoB,CAClF9C,cAAelH,EACf0G,OAAQ8M,IAEN2F,EAA6BzG,EAAcT,6BAA6BmH,oBAAoB,CAC9FlS,cAAeyF,EACfjG,OAAQ6M,IAEN8F,EAA2B3G,EAAcJ,0BAA0B8G,oBAAoB,CACzFlS,cAAelH,EACf0G,OAAQ8M,IAGVxQ,KAAKmO,0BAA4B8H,EAAqBjR,MACtDhF,KAAKqO,yBAA2B4H,EAAqB/Q,KACrDlF,KAAK2O,uBAAyBuH,EAAkBlR,MAChDhF,KAAK6O,sBAAwBqH,EAAkBhR,KAC/C,IAAIoR,EAAwBR,EAAsB,CAChDvB,UAAW,aACXpS,UAAW+M,EACXqH,mBAAoBV,EACpBW,gBAAiBnG,EACjBoG,WAAkD,kBAA/BR,EAAqBjR,MAAqBiR,EAAqBjR,MAAQ,EAC1F0R,UAAgD,kBAA9BT,EAAqB/Q,KAAoB+Q,EAAqB/Q,MAAQ,IAEtFyR,EAAqBb,EAAsB,CAC7CvB,UAAW,WACXpS,UAAWoN,EACXgH,mBAAoBR,EACpBS,gBAAiBlG,EACjBmG,WAA+C,kBAA5BP,EAAkBlR,MAAqBkR,EAAkBlR,MAAQ,EACpF0R,UAA6C,kBAA3BR,EAAkBhR,KAAoBgR,EAAkBhR,MAAQ,IAGhFgJ,EAAmBoI,EAAsBM,mBACzCxI,EAAkBkI,EAAsBO,kBACxCnI,EAAgBiI,EAAmBC,mBACnChI,EAAe+H,EAAmBE,kBAEtC,GAAIjB,EAA0B,CAK5B,IAAKA,EAAyBkB,iBAC5B,IAAK,IAAI1F,EAAW1C,EAAe0C,GAAYxC,EAAcwC,IAC3D,IAAKwE,EAAyBmB,IAAI3F,EAAU,GAAI,CAC9ClD,EAAmB,EACnBE,EAAkBc,EAAc,EAChC,KACF,CAQJ,IAAK0G,EAAyBoB,gBAC5B,IAAK,IAAI9F,EAAchD,EAAkBgD,GAAe9C,EAAiB8C,IACvE,IAAK0E,EAAyBmB,IAAI,EAAG7F,GAAc,CACjDxC,EAAgB,EAChBE,EAAeW,EAAW,EAC1B,KACF,CAGN,CAEAvP,KAAKoV,mBAAqBO,EAAkB,CAC1CsB,UAAWjX,KAAK2S,WAChB+C,aAAcA,EACdzG,6BAA8BS,EAAcT,6BAC5Cf,iBAAkBA,EAClBE,gBAAiBA,EACjBwH,yBAA0BA,EAC1BO,2BAA4BA,EAC5BzI,YAAaA,EACbsI,kBAAmBA,EACnBkB,OAAQlX,KACRsP,0BAA2BI,EAAcJ,0BACzCZ,cAAeA,EACfE,aAAcA,EACd2B,WAAYA,EACZC,UAAWA,EACX2G,WAAYnX,KAAK0S,YACjB2D,yBAA0BA,EAC1BJ,qBAAsBA,EACtBC,kBAAmBA,IAGrBlW,KAAK+N,kBAAoBG,EACzBlO,KAAKiO,iBAAmBG,EACxBpO,KAAKuO,eAAiBG,EACtB1O,KAAKyO,cAAgBG,CACvB,CACF,GAOC,CACDxL,IAAK,uBACL3D,MAAO,WACL,IAAI2X,EAA6BpX,KAAK7D,MAAMib,2BAExCpX,KAAKyN,gCACPnC,EAAuBtL,KAAKyN,gCAG9BzN,KAAKyN,+BAAiCjC,EAAwBxL,KAAKqX,6BAA8BD,EACnG,GACC,CACDhU,IAAK,6BAML3D,MAAO,WACL,GAAmD,kBAAxCO,KAAKkS,gCAA2F,kBAArClS,KAAKmS,4BAA0C,CACnH,IAAIjB,EAAclR,KAAKkS,+BACnBd,EAAWpR,KAAKmS,4BACpBnS,KAAKkS,+BAAiC,KACtClS,KAAKmS,4BAA8B,KACnCnS,KAAKsX,kBAAkB,CACrBpG,YAAaA,EACbE,SAAUA,GAEd,CACF,GACC,CACDhO,IAAK,0BACL3D,MAAO,SAAiC0H,GACtC,IAAIoQ,EAASvX,KAETuQ,EAAapJ,EAAMoJ,WACnBC,EAAYrJ,EAAMqJ,UAClBuB,EAAoB5K,EAAM4K,kBAC1BD,EAAkB3K,EAAM2K,gBAE5B9R,KAAKwX,kBAAkB,CACrB9P,SAAU,SAAkBN,GAC1B,IAAImJ,EAAanJ,EAAMmJ,WACnBC,EAAYpJ,EAAMoJ,UAClBiH,EAAeF,EAAOpb,MACtBa,EAASya,EAAaza,QAG1BuY,EAFekC,EAAalC,UAEnB,CACPmC,aAAc1a,EACdgN,YAHUyN,EAAa9N,MAIvBgO,aAAc7F,EACdvB,WAAYA,EACZC,UAAWA,EACXoH,YAAa7F,GAEjB,EACApK,QAAS,CACP4I,WAAYA,EACZC,UAAWA,IAGjB,GACC,CACDpN,IAAK,eACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MAGrF,OAAO8H,OAAOgQ,eAAe7V,KAAK7F,EAAO,eAAiB2b,QAAQ3b,EAAMuR,aAAeoK,QAAQ/X,EAAM2N,YACvG,GACC,CACDtK,IAAK,sCACL3D,MAAO,WACL,GAAIO,KAAKgV,0BAA2B,CAClC,IAAI+C,EAA4B/X,KAAK7D,MAAM4b,0BAC3C/X,KAAKgV,2BAA4B,EACjC+C,EAA0B,CACxBC,WAAYhY,KAAK8U,yBAA2B,EAC5C7V,KAAMe,KAAKD,MAAM2P,cAAcrG,cAC/B4O,SAAUjY,KAAK+U,uBAAyB,GAE5C,CACF,GACC,CACD3R,IAAK,mBAML3D,MAAO,SAA0ByY,GAC/B,IAAI3H,EAAa2H,EAAM3H,WACnBC,EAAY0H,EAAM1H,UAElB0C,EAAc/F,EAAKgG,gCAAgC,CACrD5S,UAAWP,KAAKD,MAChBwQ,WAAYA,EACZC,UAAWA,IAGT0C,IACFA,EAAYvF,uBAAwB,EACpC3N,KAAKI,SAAS8S,GAElB,GACC,CACD9P,IAAK,2BACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MACrF,OAAOoN,EAAK0D,yBAAyB1U,EAAO4D,EAC9C,GACC,CACDqD,IAAK,qCACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MAEjFmT,EAAc/F,EAAKgL,2CAA2Chc,EAAO4D,GAErEmT,IACFA,EAAYvF,uBAAwB,EACpC3N,KAAKI,SAAS8S,GAElB,GACC,CACD9P,IAAK,0BACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MACrF,OAAOoN,EAAKwD,wBAAwBxU,EAAO4D,EAC7C,GACC,CACDqD,IAAK,mBACL3D,MAAO,WACL,IAAI0X,EAAanX,KAAK0S,YAClBuE,EAAYjX,KAAK2S,WACjBqD,EAAoBhW,KAAK7D,MAAM6Z,kBAOnChW,KAAK2S,WAAa,CAAC,EACnB3S,KAAK0S,YAAc,CAAC,EAEpB,IAAK,IAAItB,EAAWpR,KAAKuO,eAAgB6C,GAAYpR,KAAKyO,cAAe2C,IACvE,IAAK,IAAIF,EAAclR,KAAK+N,kBAAmBmD,GAAelR,KAAKiO,iBAAkBiD,IAAe,CAClG,IAAI9N,EAAM,GAAG7G,OAAO6U,EAAU,KAAK7U,OAAO2U,GAC1ClR,KAAK0S,YAAYtP,GAAO+T,EAAW/T,GAE/B4S,IACFhW,KAAK2S,WAAWvP,GAAO6T,EAAU7T,GAErC,CAEJ,GACC,CACDA,IAAK,iCACL3D,MAAO,WACL,IAAItD,EAAQoL,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MACjF4D,EAAQwH,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAKD,MAEjFmT,EAAc/F,EAAKiL,uCAAuCjc,EAAO4D,GAEjEmT,IACFA,EAAYvF,uBAAwB,EACpC3N,KAAKI,SAAS8S,GAElB,IACE,CAAC,CACH9P,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,IAAIyR,EAAW,CAAC,EAEc,IAA1B1R,EAAU4O,aAA8C,IAAzB3O,EAAUgQ,YAA2C,IAAvBjQ,EAAUiP,UAA0C,IAAxBhP,EAAUiQ,WACrGwB,EAASzB,WAAa,EACtByB,EAASxB,UAAY,IAEZlQ,EAAUiQ,aAAehQ,EAAUgQ,YAAcjQ,EAAU2P,eAAiB,GAAK3P,EAAUkQ,YAAcjQ,EAAUiQ,WAAalQ,EAAU6P,YAAc,IACjKtI,OAAOwQ,OAAOrG,EAAU7E,EAAKgG,gCAAgC,CAC3D5S,UAAWA,EACXgQ,WAAYjQ,EAAUiQ,WACtBC,UAAWlQ,EAAUkQ,aAIzB,IAgCI8H,EACAC,EAjCA7I,EAAgBnP,EAAUmP,cAkF9B,OAhFAsC,EAASrE,uBAAwB,EAE7BrN,EAAU8O,cAAgBM,EAAcC,iBAAmBrP,EAAUkP,YAAcE,EAAcE,gBAEnGoC,EAASrE,uBAAwB,GAGnC+B,EAAcT,6BAA6B7I,UAAU,CACnDjE,UAAW7B,EAAU4O,YACrBpM,kBAAmBqK,EAAKkC,wBAAwB/O,GAChDuC,eAAgBsK,EAAKgC,gBAAgB7O,EAAU8O,eAEjDM,EAAcJ,0BAA0BlJ,UAAU,CAChDjE,UAAW7B,EAAUiP,SACrBzM,kBAAmBqK,EAAKsC,qBAAqBnP,GAC7CuC,eAAgBsK,EAAKgC,gBAAgB7O,EAAUkP,aAGX,IAAlCE,EAAcG,iBAAwD,IAA/BH,EAAcI,eACvDJ,EAAcG,gBAAkB,EAChCH,EAAcI,aAAe,GAI3BxP,EAAUsR,aAAwC,IAA1BtR,EAAUoN,cAA2D,IAAlCgC,EAAcK,iBAC3ElI,OAAOwQ,OAAOrG,EAAU,CACtBtE,aAAa,IAMjBxL,EAAkD,CAChDC,UAAWuN,EAAcG,gBACzBzN,SAAmD,kBAAlCsN,EAAcC,gBAA+BD,EAAcC,gBAAkB,KAC9FtN,wBAAyB,WACvB,OAAOqN,EAAcT,6BAA6BhI,UAAU,EAC9D,EACA3E,6BAA8BhC,EAC9BiC,eAAgBjC,EAAU4O,YAC1B1M,aAA+C,kBAA1BlC,EAAU8O,YAA2B9O,EAAU8O,YAAc,KAClF3M,kBAAmBnC,EAAU2P,eAC7BvN,cAAegN,EAAcM,mBAC7BrN,mCAAoC,WAClC2V,EAAcnL,EAAKgL,2CAA2C7X,EAAWC,EAC3E,IAEF2B,EAAkD,CAChDC,UAAWuN,EAAcI,aACzB1N,SAAiD,kBAAhCsN,EAAcE,cAA6BF,EAAcE,cAAgB,KAC1FvN,wBAAyB,WACvB,OAAOqN,EAAcJ,0BAA0BrI,UAAU,EAC3D,EACA3E,6BAA8BhC,EAC9BiC,eAAgBjC,EAAUiP,SAC1B/M,aAA6C,kBAAxBlC,EAAUkP,UAAyBlP,EAAUkP,UAAY,KAC9E/M,kBAAmBnC,EAAU6P,YAC7BzN,cAAegN,EAAcQ,gBAC7BvN,mCAAoC,WAClC4V,EAAcpL,EAAKiL,uCAAuC9X,EAAWC,EACvE,IAEFmP,EAAcG,gBAAkBvP,EAAU4O,YAC1CQ,EAAcC,gBAAkBrP,EAAU8O,YAC1CM,EAAcK,iBAA4C,IAA1BzP,EAAUoN,YAC1CgC,EAAcI,aAAexP,EAAUiP,SACvCG,EAAcE,cAAgBtP,EAAUkP,UACxCE,EAAcM,mBAAqB1P,EAAU2P,eAC7CP,EAAcQ,gBAAkB5P,EAAU6P,YAE1CT,EAAcrG,cAAgB/I,EAAU0S,wBAEJ7S,IAAhCuP,EAAcrG,eAChBqG,EAAcU,uBAAwB,EACtCV,EAAcrG,cAAgB,GAE9BqG,EAAcU,uBAAwB,EAGxC4B,EAAStC,cAAgBA,EAClB/C,EAAc,CAAC,EAAGqF,EAAU,CAAC,EAAGsG,EAAa,CAAC,EAAGC,EAC1D,GACC,CACDnV,IAAK,0BACL3D,MAAO,SAAiCtD,GACtC,MAAoC,kBAAtBA,EAAMiT,YAA2BjT,EAAMiT,YAAcjT,EAAMqc,mBAC3E,GACC,CACDpV,IAAK,uBACL3D,MAAO,SAA8BtD,GACnC,MAAkC,kBAApBA,EAAMqT,UAAyBrT,EAAMqT,UAAYrT,EAAMsc,gBACvE,GACC,CACDrV,IAAK,kCAML3D,MAAO,SAAyCiZ,GAC9C,IAAInY,EAAYmY,EAAMnY,UAClBgQ,EAAamI,EAAMnI,WACnBC,EAAYkI,EAAMlI,UAClBwB,EAAW,CACbvB,2BAA4BvD,GAa9B,MAV0B,kBAAfqD,GAA2BA,GAAc,IAClDyB,EAAS3B,0BAA4BE,EAAahQ,EAAUgQ,WEjoC9B,GADC,EFmoC/ByB,EAASzB,WAAaA,GAGC,kBAAdC,GAA0BA,GAAa,IAChDwB,EAAS1B,wBAA0BE,EAAYjQ,EAAUiQ,UEtoC3B,GADC,EFwoC/BwB,EAASxB,UAAYA,GAGG,kBAAfD,GAA2BA,GAAc,GAAKA,IAAehQ,EAAUgQ,YAAmC,kBAAdC,GAA0BA,GAAa,GAAKA,IAAcjQ,EAAUiQ,UAClKwB,EAGF,CAAC,CACV,GACC,CACD5O,IAAK,kBACL3D,MAAO,SAAyBA,GAC9B,MAAwB,oBAAVA,EAAuBA,EAAQ,WAC3C,OAAOA,CACT,CACF,GACC,CACD2D,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,IAAI2O,EAAc5O,EAAU4O,YACxBlS,EAASsD,EAAUtD,OACnB8L,EAAoBxI,EAAUwI,kBAC9BmH,EAAiB3P,EAAU2P,eAC3BtG,EAAQrJ,EAAUqJ,MAClB4G,EAAahQ,EAAUgQ,WACvBb,EAAgBnP,EAAUmP,cAE9B,GAAIR,EAAc,EAAG,CACnB,IAAIyJ,EAAczJ,EAAc,EAC5B9K,EAAc6L,EAAiB,EAAI0I,EAAcjU,KAAKE,IAAI+T,EAAa1I,GACvE6B,EAAkBpC,EAAcJ,0BAA0BxK,eAC1D8T,EAAgBlJ,EAAcU,uBAAyB0B,EAAkB9U,EAAS0S,EAAcrG,cAAgB,EACpH,OAAOqG,EAAcT,6BAA6BpI,yBAAyB,CACzE5C,MAAO6E,EACP5E,cAAeyF,EAAQiP,EACvBzU,cAAeoM,EACfnM,YAAaA,GAEjB,CAEA,OAAO,CACT,GACC,CACDhB,IAAK,6CACL3D,MAAO,SAAoDa,EAAWC,GACpE,IAAIgQ,EAAahQ,EAAUgQ,WAEvBsI,EAAuB1L,EAAK0D,yBAAyBvQ,EAAWC,GAEpE,MAAoC,kBAAzBsY,GAAqCA,GAAwB,GAAKtI,IAAesI,EACnF1L,EAAKgG,gCAAgC,CAC1C5S,UAAWA,EACXgQ,WAAYsI,EACZrI,WAAY,IAIT,CAAC,CACV,GACC,CACDpN,IAAK,0BACL3D,MAAO,SAAiCa,EAAWC,GACjD,IAAIvD,EAASsD,EAAUtD,OACnBuS,EAAWjP,EAAUiP,SACrBzG,EAAoBxI,EAAUwI,kBAC9BqH,EAAc7P,EAAU6P,YACxBxG,EAAQrJ,EAAUqJ,MAClB6G,EAAYjQ,EAAUiQ,UACtBd,EAAgBnP,EAAUmP,cAE9B,GAAIH,EAAW,EAAG,CAChB,IAAIuJ,EAAWvJ,EAAW,EACtBnL,EAAc+L,EAAc,EAAI2I,EAAWpU,KAAKE,IAAIkU,EAAU3I,GAC9D4B,EAAoBrC,EAAcT,6BAA6BnK,eAC/D8T,EAAgBlJ,EAAcU,uBAAyB2B,EAAoBpI,EAAQ+F,EAAcrG,cAAgB,EACrH,OAAOqG,EAAcJ,0BAA0BzI,yBAAyB,CACtE5C,MAAO6E,EACP5E,cAAelH,EAAS4b,EACxBzU,cAAeqM,EACfpM,YAAaA,GAEjB,CAEA,OAAO,CACT,GACC,CACDhB,IAAK,yCACL3D,MAAO,SAAgDa,EAAWC,GAChE,IAAIiQ,EAAYjQ,EAAUiQ,UAEtBuI,EAAsB5L,EAAKwD,wBAAwBrQ,EAAWC,GAElE,MAAmC,kBAAxBwY,GAAoCA,GAAuB,GAAKvI,IAAcuI,EAChF5L,EAAKgG,gCAAgC,CAC1C5S,UAAWA,EACXgQ,YAAa,EACbC,UAAWuI,IAIR,CAAC,CACV,KAGK5L,CACT,CA7rCA,CA6rCElP,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,EAAQ,YAAqD,MAkLjGC,IAEJ1M,EAAAA,EAAAA,GAAgB0P,EAAM,eAAgB,CACpC,aAAc,OACd,iBAAiB,EACjByG,oBAAoB,EACpBhC,YAAY,EACZC,WAAW,EACX8D,kBGv6Ca,SAAkC/Y,GA2B/C,IA1BA,IAAIqa,EAAYra,EAAKqa,UACjBvB,EAAe9Y,EAAK8Y,aACpBzG,EAA+BrS,EAAKqS,6BACpCf,EAAmBtR,EAAKsR,iBACxBE,EAAkBxR,EAAKwR,gBACvBwH,EAA2BhZ,EAAKgZ,yBAChCO,EAA6BvZ,EAAKuZ,2BAClCzI,EAAc9Q,EAAK8Q,YACnBsI,EAAoBpZ,EAAKoZ,kBACzBkB,EAASta,EAAKsa,OACd5H,EAA4B1S,EAAK0S,0BACjCZ,EAAgB9R,EAAK8R,cACrBE,EAAehS,EAAKgS,aACpBuI,EAAava,EAAKua,WAClBd,EAA2BzZ,EAAKyZ,yBAChCJ,EAAuBrZ,EAAKqZ,qBAC5BC,EAAoBtZ,EAAKsZ,kBACzB8C,EAAgB,GAMhBC,EAAqBhK,EAA6BgK,sBAAwB3J,EAA0B2J,qBACpGC,GAAiBxL,IAAgBuL,EAE5B7H,EAAW1C,EAAe0C,GAAYxC,EAAcwC,IAG3D,IAFA,IAAI+H,EAAW7J,EAA0B/K,yBAAyB6M,GAEzDF,EAAchD,EAAkBgD,GAAe9C,EAAiB8C,IAAe,CACtF,IAAIkI,EAAcnK,EAA6B1K,yBAAyB2M,GACpEmI,EAAYnI,GAAe+E,EAAqBjR,OAASkM,GAAe+E,EAAqB/Q,MAAQkM,GAAY8E,EAAkBlR,OAASoM,GAAY8E,EAAkBhR,KAC1K9B,EAAM,GAAG7G,OAAO6U,EAAU,KAAK7U,OAAO2U,GACtCzH,OAAQ,EAERyP,GAAiB/B,EAAW/T,GAC9BqG,EAAQ0N,EAAW/T,GAIfwS,IAA6BA,EAAyBmB,IAAI3F,EAAUF,GAItEzH,EAAQ,CACNzM,OAAQ,OACRsc,KAAM,EACN7c,SAAU,WACViN,IAAK,EACLC,MAAO,SAGTF,EAAQ,CACNzM,OAAQmc,EAASla,KACjBqa,KAAMF,EAAY1V,OAASyS,EAC3B1Z,SAAU,WACViN,IAAKyP,EAASzV,OAAS2S,EACvB1M,MAAOyP,EAAYna,MAErBkY,EAAW/T,GAAOqG,GAItB,IAAI8P,EAAqB,CACvBrI,YAAaA,EACbxD,YAAaA,EACb2L,UAAWA,EACXjW,IAAKA,EACL8T,OAAQA,EACR9F,SAAUA,EACV3H,MAAOA,GAEL+P,OAAe,GAWdxD,IAAqBtI,GAAiByI,GAA+BE,EAQxEmD,EAAe9D,EAAa6D,IAPvBtC,EAAU7T,KACb6T,EAAU7T,GAAOsS,EAAa6D,IAGhCC,EAAevC,EAAU7T,IAMP,MAAhBoW,IAAyC,IAAjBA,GAQ5BR,EAAcvM,KAAK+M,EACrB,CAGF,OAAOR,CACT,EH4zCElF,cAAe,WACfC,eAAgB,CAAC,EACjByE,oBAAqB,IACrBC,iBAAkB,GAClBzF,iBAAkB3J,EAClB2K,kBAv4Ce,WACf,OAAO,IACT,EAs4CEuB,SAAU,WAAqB,EAC/BwC,0BAA2B,WAAsC,EACjEnK,kBAAmB,WAA8B,EACjDiI,oBAAqB,EACrBC,sBE76Ca,SAAsClZ,GACnD,IAAIuF,EAAYvF,EAAKuF,UACjBoU,EAAqB3Z,EAAK2Z,mBAC1BC,EAAkB5Z,EAAK4Z,gBACvBC,EAAa7Z,EAAK6Z,WAClBC,EAAY9Z,EAAK8Z,UAErB,OAfoC,IAehCF,EACK,CACLI,mBAAoBlS,KAAKC,IAAI,EAAG8R,GAChCI,kBAAmBnS,KAAKE,IAAIzC,EAAY,EAAGuU,EAAYH,IAGlD,CACLK,mBAAoBlS,KAAKC,IAAI,EAAG8R,EAAaF,GAC7CM,kBAAmBnS,KAAKE,IAAIzC,EAAY,EAAGuU,GAGjD,EF45CEX,iBAAkB,GAClB9B,KAAM,OACNmD,2BA15CiD,IA25CjDtO,kBAAmB,OACnBmH,gBAAiB,EACjBE,aAAc,EACd1G,MAAO,CAAC,EACRyK,SAAU,EACV8B,mBAAmB,KAGrBjV,EAAAA,EAAAA,UAASoM,GACT,QI17Ce,SAASsM,EAA6B7c,GACnD,IAAIuF,EAAYvF,EAAKuF,UACjBoU,EAAqB3Z,EAAK2Z,mBAC1BC,EAAkB5Z,EAAK4Z,gBACvBC,EAAa7Z,EAAK6Z,WAClBC,EAAY9Z,EAAK8Z,UAMrB,OAFAH,EAAqB7R,KAAKC,IAAI,EAAG4R,GAjBG,IAmBhCC,EACK,CACLI,mBAAoBlS,KAAKC,IAAI,EAAG8R,EAAa,GAC7CI,kBAAmBnS,KAAKE,IAAIzC,EAAY,EAAGuU,EAAYH,IAGlD,CACLK,mBAAoBlS,KAAKC,IAAI,EAAG8R,EAAaF,GAC7CM,kBAAmBnS,KAAKE,IAAIzC,EAAY,EAAGuU,EAAY,GAG7D,CC/BA,ICQIxM,EAAQC,EAEZ,SAAS6B,EAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAUpV,IAAI8R,GAAmBvP,EAAQD,EAE/B,SAAUkD,GAGR,SAASsM,IACP,IAAIC,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAM0Z,GAEtB,IAAK,IAAIE,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAkFzB,OA/EAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBmM,IAAkB1X,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAE1Ipc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAAS,CACtD4C,eAAgB,EAChBE,YAAa,EACbT,cAAe,CACbM,mBAAoB,EACpBE,gBAAiB,MAIrBzS,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,oBAAqB,IAEpE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,mBAAoB,IAEnE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iBAAkB,IAEjE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,gBAAiB,IAEhE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAc,SAAU0B,GACrE,IAAI4C,EAActE,EAAMlR,MACpB+S,EAAcyC,EAAYzC,YAC1B6K,EAAWpI,EAAYoI,SACvBC,EAAOrI,EAAYqI,KACnBzK,EAAWoC,EAAYpC,SAE3B,IAAIwK,EAAJ,CAIA,IAAIE,EAAwB5M,EAAM6M,kBAC9BC,EAAyBF,EAAsBhK,eAC/CmK,EAAsBH,EAAsB9J,YAE5CkK,EAAyBhN,EAAM6M,kBAC/BjK,EAAiBoK,EAAuBpK,eACxCE,EAAckK,EAAuBlK,YAIzC,OAAQpB,EAAM3L,KACZ,IAAK,YACH+M,EAAuB,UAAT6J,EAAmBtV,KAAKE,IAAIuL,EAAc,EAAGZ,EAAW,GAAK7K,KAAKE,IAAIyI,EAAMoB,cAAgB,EAAGc,EAAW,GACxH,MAEF,IAAK,YACHU,EAA0B,UAAT+J,EAAmBtV,KAAKC,IAAIsL,EAAiB,EAAG,GAAKvL,KAAKC,IAAI0I,EAAMU,kBAAoB,EAAG,GAC5G,MAEF,IAAK,aACHkC,EAA0B,UAAT+J,EAAmBtV,KAAKE,IAAIqL,EAAiB,EAAGf,EAAc,GAAKxK,KAAKE,IAAIyI,EAAMY,iBAAmB,EAAGiB,EAAc,GACvI,MAEF,IAAK,UACHiB,EAAuB,UAAT6J,EAAmBtV,KAAKC,IAAIwL,EAAc,EAAG,GAAKzL,KAAKC,IAAI0I,EAAMkB,eAAiB,EAAG,GAInG0B,IAAmBkK,GAA0BhK,IAAgBiK,IAC/DrL,EAAMuL,iBAENjN,EAAMkN,mBAAmB,CACvBtK,eAAgBA,EAChBE,YAAaA,IAnCjB,CAsCF,KAEA1S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAsB,SAAUzQ,GAC7E,IAAIsR,EAAmBtR,EAAKsR,iBACxBE,EAAkBxR,EAAKwR,gBACvBM,EAAgB9R,EAAK8R,cACrBE,EAAehS,EAAKgS,aACxBvB,EAAMU,kBAAoBG,EAC1Bb,EAAMY,iBAAmBG,EACzBf,EAAMkB,eAAiBG,EACvBrB,EAAMoB,cAAgBG,CACxB,IAEOvB,CACT,CAkFA,OA/KAyD,EAAAA,EAAAA,GAAU4I,EAAiBtM,IA+F3BjK,EAAAA,EAAAA,GAAauW,EAAiB,CAAC,CAC7BtW,IAAK,mBACL3D,MAAO,SAA0B4D,GAC/B,IAAI4M,EAAiB5M,EAAM4M,eACvBE,EAAc9M,EAAM8M,YACxBnQ,KAAKI,SAAS,CACZ+P,YAAaA,EACbF,eAAgBA,GAEpB,GACC,CACD7M,IAAK,SACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpBmC,EAAY8T,EAAa9T,UACzBD,EAAW+T,EAAa/T,SAExBmc,EAAyBxa,KAAKka,kBAC9BjK,EAAiBuK,EAAuBvK,eACxCE,EAAcqK,EAAuBrK,YAEzC,OAAOlS,EAAAA,cAAoB,MAAO,CAChCK,UAAWA,EACXmc,UAAWza,KAAK0a,YACfrc,EAAS,CACVuP,kBAAmB5N,KAAK2a,mBACxB1K,eAAgBA,EAChBE,YAAaA,IAEjB,GACC,CACD/M,IAAK,kBACL3D,MAAO,WACL,OAAOO,KAAK7D,MAAMye,aAAe5a,KAAK7D,MAAQ6D,KAAKD,KACrD,GACC,CACDqD,IAAK,qBACL3D,MAAO,SAA4BsE,GACjC,IAAIkM,EAAiBlM,EAAMkM,eACvBE,EAAcpM,EAAMoM,YACpBoC,EAAevS,KAAK7D,MACpBye,EAAerI,EAAaqI,aAC5BC,EAAmBtI,EAAasI,iBAEJ,oBAArBA,GACTA,EAAiB,CACf5K,eAAgBA,EAChBE,YAAaA,IAIZyK,GACH5a,KAAKI,SAAS,CACZ6P,eAAgBA,EAChBE,YAAaA,GAGnB,IACE,CAAC,CACH/M,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,OAAID,EAAUsa,aACL,CAAC,EAGNta,EAAU2P,iBAAmB1P,EAAUmP,cAAcM,oBAAsB1P,EAAU6P,cAAgB5P,EAAUmP,cAAcQ,gBA3KvI,SAAuBtD,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,EAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,EAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CA4KtfD,CAAc,CAAC,EAAGpM,EAAW,CAClC0P,eAAgB3P,EAAU2P,eAC1BE,YAAa7P,EAAU6P,YACvBT,cAAe,CACbM,mBAAoB1P,EAAU2P,eAC9BC,gBAAiB5P,EAAU6P,eAK1B,CAAC,CACV,KAGKuJ,CACT,CAjLA,CAiLEzb,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,EAAQ,YAAqD,MAWjGC,IAEJ1M,EAAAA,EAAAA,GAAgBic,EAAiB,eAAgB,CAC/CK,UAAU,EACVa,cAAc,EACdZ,KAAM,QACN/J,eAAgB,EAChBE,YAAa,KAGfpP,EAAAA,EAAAA,UAAS2Y,GACT,ICrNIxP,EAAQC,ECIG,SAAS2Q,EAA0BC,EAAOC,GAEvD,IAAIC,EAYAC,EAA0C,qBAT5CD,EADwB,qBAAfD,EACCA,EACiB,qBAAXpV,OACNA,OACe,qBAATyE,KACNA,KAEA8Q,EAAAA,GAGqBhS,UAA4B8R,EAAQ9R,SAAS+R,YAE9E,IAAKA,EAAa,CAChB,IAAIE,EAAe,WACjB,IAAIhQ,EAAM6P,EAAQ3Q,uBAAyB2Q,EAAQzQ,0BAA4ByQ,EAAQ1Q,6BAA+B,SAAU8Q,GAC9H,OAAOJ,EAAQtQ,WAAW0Q,EAAI,GAChC,EAEA,OAAO,SAAUA,GACf,OAAOjQ,EAAIiQ,EACb,CACF,CARmB,GAUfC,EAAc,WAChB,IAAI1Q,EAASqQ,EAAQpQ,sBAAwBoQ,EAAQlQ,yBAA2BkQ,EAAQnQ,4BAA8BmQ,EAAQ9P,aAC9H,OAAO,SAAUD,GACf,OAAON,EAAOM,EAChB,CACF,CALkB,GAOdqQ,EAAgB,SAAuBC,GACzC,IAAIC,EAAWD,EAAQE,mBACnBC,EAASF,EAASG,kBAClBC,EAAWJ,EAASK,iBACpBC,EAAcJ,EAAOC,kBACzBC,EAAStL,WAAasL,EAASjE,YAC/BiE,EAASrL,UAAYqL,EAASlE,aAC9BoE,EAAYtS,MAAME,MAAQgS,EAAO5R,YAAc,EAAI,KACnDgS,EAAYtS,MAAMzM,OAAS2e,EAAOK,aAAe,EAAI,KACrDL,EAAOpL,WAAaoL,EAAO/D,YAC3B+D,EAAOnL,UAAYmL,EAAOhE,YAC5B,EAMIsE,EAAiB,SAAwBC,GAE3C,KAAIA,EAAEtP,OAAOtO,WAAmD,oBAA/B4d,EAAEtP,OAAOtO,UAAU6d,SAA0BD,EAAEtP,OAAOtO,UAAU6d,QAAQ,oBAAsB,GAAKD,EAAEtP,OAAOtO,UAAU6d,QAAQ,kBAAoB,GAAnL,CAIA,IAAIX,EAAUxb,KACdub,EAAcvb,MAEVA,KAAKoc,eACPd,EAAYtb,KAAKoc,eAGnBpc,KAAKoc,cAAgBhB,GAAa,YAjBhB,SAAuBI,GACzC,OAAOA,EAAQzR,aAAeyR,EAAQa,eAAe1S,OAAS6R,EAAQQ,cAAgBR,EAAQa,eAAerf,MAC/G,EAgBQsf,CAAcd,KAChBA,EAAQa,eAAe1S,MAAQ6R,EAAQzR,YACvCyR,EAAQa,eAAerf,OAASwe,EAAQQ,aAExCR,EAAQe,oBAAoBzP,SAAQ,SAAUuO,GAC5CA,EAAGrZ,KAAKwZ,EAASU,EACnB,IAEJ,GAlBA,CAmBF,EAIIM,GAAY,EACZC,EAAiB,GACjBC,EAAsB,iBACtBC,EAAc,kBAAkBC,MAAM,KACtCC,EAAc,uEAAuED,MAAM,KAGzFE,EAAM7B,EAAQ9R,SAASC,cAAc,eAMzC,QAJgCjJ,IAA5B2c,EAAIrT,MAAMsT,gBACZP,GAAY,IAGI,IAAdA,EACF,IAAK,IAAI7Y,EAAI,EAAGA,EAAIgZ,EAAYnV,OAAQ7D,IACtC,QAAoDxD,IAAhD2c,EAAIrT,MAAMkT,EAAYhZ,GAAK,iBAAgC,CAE7D8Y,EAAiB,IADXE,EAAYhZ,GACSqZ,cAAgB,IAC3CN,EAAsBG,EAAYlZ,GAClC6Y,GAAY,EACZ,KACF,CAIN,IAAIO,EAAgB,aAChBE,EAAqB,IAAMR,EAAiB,aAAeM,EAAgB,gDAC3EG,EAAiBT,EAAiB,kBAAoBM,EAAgB,IAC5E,CAkGA,MAAO,CACLI,kBA1EsB,SAA2B3B,EAASH,GAC1D,GAAIH,EACFM,EAAQN,YAAY,WAAYG,OAC3B,CACL,IAAKG,EAAQE,mBAAoB,CAC/B,IAAI0B,EAAM5B,EAAQ6B,cAEdC,EAAerC,EAAQsC,iBAAiB/B,GAExC8B,GAAyC,UAAzBA,EAAa7gB,WAC/B+e,EAAQ/R,MAAMhN,SAAW,YAjCd,SAAsB2gB,GACvC,IAAKA,EAAII,eAAe,uBAAwB,CAE9C,IAAIC,GAAOR,GAA0C,IAAM,uBAAyBC,GAAkC,IAA5G,6VACNQ,EAAON,EAAIM,MAAQN,EAAIO,qBAAqB,QAAQ,GACpDlU,EAAQ2T,EAAIhU,cAAc,SAC9BK,EAAMyB,GAAK,sBACXzB,EAAMmU,KAAO,WAEA,MAAT7C,GACFtR,EAAMoU,aAAa,QAAS9C,GAG1BtR,EAAMqU,WACRrU,EAAMqU,WAAWC,QAAUN,EAE3BhU,EAAMK,YAAYsT,EAAIY,eAAeP,IAGvCC,EAAK5T,YAAYL,EACnB,CACF,CAeMwU,CAAab,GACb5B,EAAQa,eAAiB,CAAC,EAC1Bb,EAAQe,oBAAsB,IAC7Bf,EAAQE,mBAAqB0B,EAAIhU,cAAc,QAAQ9K,UAAY,kBACpE,IAAI4f,EAAqB,oFAEzB,GAAItY,OAAOuY,aAAc,CACvB,IAAIC,EAAeD,aAAaE,aAAa,+BAAgC,CAC3EC,WAAY,WACV,OAAOJ,CACT,IAEF1C,EAAQE,mBAAmB6C,UAAYH,EAAaE,WAAW,GACjE,MACE9C,EAAQE,mBAAmB6C,UAAYL,EAGzC1C,EAAQ1R,YAAY0R,EAAQE,oBAC5BH,EAAcC,GACdA,EAAQgD,iBAAiB,SAAUvC,GAAgB,GAG/CS,IACFlB,EAAQE,mBAAmB+C,sBAAwB,SAA2BvC,GACxEA,EAAEa,eAAiBA,GACrBxB,EAAcC,EAElB,EAEAA,EAAQE,mBAAmB8C,iBAAiB9B,EAAqBlB,EAAQE,mBAAmB+C,uBAEhG,CAEAjD,EAAQe,oBAAoB9P,KAAK4O,EACnC,CACF,EA2BEqD,qBAzByB,SAA8BlD,EAASH,GAChE,GAAIH,EACFM,EAAQmD,YAAY,WAAYtD,QAIhC,GAFAG,EAAQe,oBAAoBqC,OAAOpD,EAAQe,oBAAoBJ,QAAQd,GAAK,IAEvEG,EAAQe,oBAAoB/U,OAAQ,CACvCgU,EAAQqD,oBAAoB,SAAU5C,GAAgB,GAElDT,EAAQE,mBAAmB+C,wBAC7BjD,EAAQE,mBAAmBmD,oBAAoBnC,EAAqBlB,EAAQE,mBAAmB+C,uBAE/FjD,EAAQE,mBAAmB+C,sBAAwB,MAGrD,IACEjD,EAAQE,oBAAsBF,EAAQvR,YAAYuR,EAAQE,mBAC5D,CAAE,MAAOQ,GAAI,CAEf,CAEJ,EAMF,CDlNA,SAASlQ,EAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,EAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,EAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,EAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAIrgB,IAAIkS,GAAa3U,EAAQD,EAEzB,SAAU6U,GAGR,SAASD,IACP,IAAInF,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAM8e,GAEtB,IAAK,IAAIlF,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAyDzB,OAtDAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBuR,IAAY9c,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAEpIpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAAS,CACtDrQ,OAAQqQ,EAAMlR,MAAM6iB,eAAiB,EACrCrV,MAAO0D,EAAMlR,MAAM8iB,cAAgB,KAGrCxhB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,mBAAe,IAE9D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,kBAAc,IAE7D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,eAAW,IAE1D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,4BAAwB,IAEvE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,WAC1D,IAAIsE,EAActE,EAAMlR,MACpB+iB,EAAgBvN,EAAYuN,cAC5BC,EAAexN,EAAYwN,aAC3BC,EAAWzN,EAAYyN,SAE3B,GAAI/R,EAAMgS,YAAa,CAIrB,IAAIriB,EAASqQ,EAAMgS,YAAYrD,cAAgB,EAC3CrS,EAAQ0D,EAAMgS,YAAYtV,aAAe,EAEzCN,GADM4D,EAAM4N,SAAWrV,QACX2X,iBAAiBlQ,EAAMgS,cAAgB,CAAC,EACpDC,EAAcC,SAAS9V,EAAM6V,YAAa,KAAO,EACjDE,EAAeD,SAAS9V,EAAM+V,aAAc,KAAO,EACnDC,EAAaF,SAAS9V,EAAMgW,WAAY,KAAO,EAC/CC,EAAgBH,SAAS9V,EAAMiW,cAAe,KAAO,EACrDC,EAAY3iB,EAASyiB,EAAaC,EAClCE,EAAWjW,EAAQ2V,EAAcE,IAEhCN,GAAiB7R,EAAMtN,MAAM/C,SAAW2iB,IAAcR,GAAgB9R,EAAMtN,MAAM4J,QAAUiW,KAC/FvS,EAAMjN,SAAS,CACbpD,OAAQA,EAASyiB,EAAaC,EAC9B/V,MAAOA,EAAQ2V,EAAcE,IAG/BJ,EAAS,CACPpiB,OAAQA,EACR2M,MAAOA,IAGb,CACF,KAEAlM,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,WAAW,SAAUwS,GAClExS,EAAMyS,WAAaD,CACrB,IAEOxS,CACT,CAgFA,OApJAyD,EAAAA,EAAAA,GAAUgO,EAAWC,IAsErB5b,EAAAA,EAAAA,GAAa2b,EAAW,CAAC,CACvB1b,IAAK,oBACL3D,MAAO,WACL,IAAIsb,EAAQ/a,KAAK7D,MAAM4e,MAEnB/a,KAAK8f,YAAc9f,KAAK8f,WAAWC,YAAc/f,KAAK8f,WAAWC,WAAW1C,eAAiBrd,KAAK8f,WAAWC,WAAW1C,cAAc2C,aAAehgB,KAAK8f,WAAWC,sBAAsB/f,KAAK8f,WAAWC,WAAW1C,cAAc2C,YAAYC,cAIlPjgB,KAAKqf,YAAcrf,KAAK8f,WAAWC,WACnC/f,KAAKib,QAAUjb,KAAK8f,WAAWC,WAAW1C,cAAc2C,YAGxDhgB,KAAKkgB,qBAAuBpF,EAA0BC,EAAO/a,KAAKib,SAElEjb,KAAKkgB,qBAAqB/C,kBAAkBnd,KAAKqf,YAAarf,KAAKmgB,WAEnEngB,KAAKmgB,YAET,GACC,CACD/c,IAAK,uBACL3D,MAAO,WACDO,KAAKkgB,sBAAwBlgB,KAAKqf,aACpCrf,KAAKkgB,qBAAqBxB,qBAAqB1e,KAAKqf,YAAarf,KAAKmgB,UAE1E,GACC,CACD/c,IAAK,SACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpBkC,EAAW+T,EAAa/T,SACxBC,EAAY8T,EAAa9T,UACzB4gB,EAAgB9M,EAAa8M,cAC7BC,EAAe/M,EAAa+M,aAC5B1V,EAAQ2I,EAAa3I,MACrBgK,EAAczT,KAAKD,MACnB/C,EAASyW,EAAYzW,OACrB2M,EAAQ8J,EAAY9J,MAIpByW,EAAa,CACfxW,SAAU,WAERyW,EAAc,CAAC,EAyBnB,OAvBKnB,IACHkB,EAAWpjB,OAAS,EACpBqjB,EAAYrjB,OAASA,GAGlBmiB,IACHiB,EAAWzW,MAAQ,EACnB0W,EAAY1W,MAAQA,GAgBf1L,EAAAA,cAAoB,MAAO,CAChCK,UAAWA,EACXH,IAAK6B,KAAKsgB,QACV7W,MAAOkD,EAAc,CAAC,EAAGyT,EAAY,CAAC,EAAG3W,IACxCpL,EAASgiB,GACd,KAGKvB,CACT,CAtJA,CAsJE7gB,EAAAA,YAAkBR,EAAAA,EAAAA,GAAgByM,EAAQ,YAAqD,MA2B7FC,IAEJ1M,EAAAA,EAAAA,GAAgBqhB,EAAW,eAAgB,CACzCM,SAAU,WAAqB,EAC/BF,eAAe,EACfC,cAAc,EACd1V,MAAO,CAAC,I,IEjMNS,EAAQC,E,WAURoW,GAAgBpW,EAAQD,EAE5B,SAAUkD,GAGR,SAASmT,IACP,IAAI5G,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAMugB,GAEtB,IAAK,IAAI3G,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GA4CzB,OAzCAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBgT,IAAeve,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAEvIpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAU,IAEzD5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,YAAY,WACzD,IAAIsE,EAActE,EAAMlR,MACpBqkB,EAAQ7O,EAAY6O,MACpBC,EAAwB9O,EAAYT,YACpCA,OAAwC,IAA1BuP,EAAmC,EAAIA,EACrDvJ,EAASvF,EAAYuF,OACrBwJ,EAAuB/O,EAAYP,SACnCA,OAAoC,IAAzBsP,EAAkCrT,EAAMlR,MAAMoH,OAAS,EAAImd,EAEtEC,EAAwBtT,EAAMuT,uBAC9B5jB,EAAS2jB,EAAsB3jB,OAC/B2M,EAAQgX,EAAsBhX,MAE9B3M,IAAWwjB,EAAMK,UAAUzP,EAAUF,IAAgBvH,IAAU6W,EAAMM,SAAS1P,EAAUF,KAC1FsP,EAAMO,IAAI3P,EAAUF,EAAavH,EAAO3M,GAEpCka,GAA8C,oBAA7BA,EAAOI,mBAC1BJ,EAAOI,kBAAkB,CACvBpG,YAAaA,EACbE,SAAUA,IAIlB,KAEA3T,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,kBAAkB,SAAUmO,IACrEA,GAAaA,aAAmBwF,SAClCC,QAAQC,KAAK,mEAGf7T,EAAM8T,OAAS3F,EAEXA,GACFnO,EAAM+T,mBAEV,IAEO/T,CACT,CAiGA,OAxJAyD,EAAAA,EAAAA,GAAUyP,EAAcnT,IAyDxBjK,EAAAA,EAAAA,GAAaod,EAAc,CAAC,CAC1Bnd,IAAK,oBACL3D,MAAO,WACLO,KAAKohB,mBACP,GACC,CACDhe,IAAK,qBACL3D,MAAO,WACLO,KAAKohB,mBACP,GACC,CACDhe,IAAK,SACL3D,MAAO,WACL,IAAIpB,EAAW2B,KAAK7D,MAAMkC,SAC1B,MAA2B,oBAAbA,EAA0BA,EAAS,CAC/CgjB,QAASrhB,KAAKshB,SACdC,cAAevhB,KAAKwhB,iBACjBnjB,CACP,GACC,CACD+E,IAAK,uBACL3D,MAAO,WACL,IAAI+gB,EAAQxgB,KAAK7D,MAAMqkB,MACnBiB,EAAOzhB,KAAKmhB,SAAUO,EAAAA,EAAAA,aAAY1hB,MAEtC,GAAIyhB,GAAQA,EAAKpE,eAAiBoE,EAAKpE,cAAc2C,aAAeyB,aAAgBA,EAAKpE,cAAc2C,YAAYC,YAAa,CAC9H,IAAI0B,EAAaF,EAAKhY,MAAME,MACxBiY,EAAcH,EAAKhY,MAAMzM,OAUxBwjB,EAAMxJ,kBACTyK,EAAKhY,MAAME,MAAQ,QAGhB6W,EAAM1J,mBACT2K,EAAKhY,MAAMzM,OAAS,QAGtB,IAAIA,EAAS0H,KAAKmd,KAAKJ,EAAKzF,cACxBrS,EAAQjF,KAAKmd,KAAKJ,EAAK1X,aAU3B,OARI4X,IACFF,EAAKhY,MAAME,MAAQgY,GAGjBC,IACFH,EAAKhY,MAAMzM,OAAS4kB,GAGf,CACL5kB,OAAQA,EACR2M,MAAOA,EAEX,CACE,MAAO,CACL3M,OAAQ,EACR2M,MAAO,EAGb,GACC,CACDvG,IAAK,oBACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpBqkB,EAAQpO,EAAaoO,MACrBsB,EAAwB1P,EAAalB,YACrCA,OAAwC,IAA1B4Q,EAAmC,EAAIA,EACrD5K,EAAS9E,EAAa8E,OACtB6K,EAAwB3P,EAAahB,SACrCA,OAAqC,IAA1B2Q,EAAmC/hB,KAAK7D,MAAMoH,OAAS,EAAIwe,EAE1E,IAAKvB,EAAMzJ,IAAI3F,EAAUF,GAAc,CACrC,IAAI8Q,EAAyBhiB,KAAK4gB,uBAC9B5jB,EAASglB,EAAuBhlB,OAChC2M,EAAQqY,EAAuBrY,MAEnC6W,EAAMO,IAAI3P,EAAUF,EAAavH,EAAO3M,GAEpCka,GAA0D,oBAAzCA,EAAO+K,+BAC1B/K,EAAO+K,8BAA8B,CACnC/Q,YAAaA,EACbE,SAAUA,GAGhB,CACF,KAGKmP,CACT,CA1JA,CA0JEtiB,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,EAAQ,YAAqD,MAYjGC,IAEJ1M,EAAAA,EAAAA,GAAgB8iB,EAAc,8BAA8B,GCzLrD,IAOH2B,GAEJ,WACE,SAASA,IACP,IAAI7U,EAAQrN,KAER+E,EAASwC,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAElFxE,EAAAA,EAAAA,GAAgB/C,KAAMkiB,IAEtBzkB,EAAAA,EAAAA,GAAgBuC,KAAM,mBAAoB,CAAC,IAE3CvC,EAAAA,EAAAA,GAAgBuC,KAAM,kBAAmB,CAAC,IAE1CvC,EAAAA,EAAAA,GAAgBuC,KAAM,oBAAqB,CAAC,IAE5CvC,EAAAA,EAAAA,GAAgBuC,KAAM,kBAAmB,CAAC,IAE1CvC,EAAAA,EAAAA,GAAgBuC,KAAM,sBAAkB,IAExCvC,EAAAA,EAAAA,GAAgBuC,KAAM,qBAAiB,IAEvCvC,EAAAA,EAAAA,GAAgBuC,KAAM,kBAAc,IAEpCvC,EAAAA,EAAAA,GAAgBuC,KAAM,iBAAa,IAEnCvC,EAAAA,EAAAA,GAAgBuC,KAAM,kBAAc,IAEpCvC,EAAAA,EAAAA,GAAgBuC,KAAM,uBAAmB,IAEzCvC,EAAAA,EAAAA,GAAgBuC,KAAM,sBAAkB,IAExCvC,EAAAA,EAAAA,GAAgBuC,KAAM,eAAgB,IAEtCvC,EAAAA,EAAAA,GAAgBuC,KAAM,YAAa,IAEnCvC,EAAAA,EAAAA,GAAgBuC,KAAM,eAAe,SAAUpD,GAC7C,IAAI2G,EAAQ3G,EAAK2G,MAEbH,EAAMiK,EAAM8U,WAAW,EAAG5e,GAE9B,YAAwCpD,IAAjCkN,EAAM+U,kBAAkBhf,GAAqBiK,EAAM+U,kBAAkBhf,GAAOiK,EAAMgV,aAC3F,KAEA5kB,EAAAA,EAAAA,GAAgBuC,KAAM,aAAa,SAAUqD,GAC3C,IAAIE,EAAQF,EAAME,MAEdH,EAAMiK,EAAM8U,WAAW5e,EAAO,GAElC,YAAsCpD,IAA/BkN,EAAMiV,gBAAgBlf,GAAqBiK,EAAMiV,gBAAgBlf,GAAOiK,EAAMkV,cACvF,IAEA,IAAIvD,EAAgBja,EAAOia,cACvBC,EAAela,EAAOka,aACtBuD,EAAczd,EAAOyd,YACrBC,EAAa1d,EAAO0d,WACpBC,EAAY3d,EAAO2d,UACnBC,EAAY5d,EAAO4d,UACnBC,EAAW7d,EAAO6d,SACtB5iB,KAAK6iB,iBAAkC,IAAhBL,EACvBxiB,KAAK8iB,gBAAgC,IAAfL,EACtBziB,KAAK+iB,WAAaJ,GAAa,EAC/B3iB,KAAKgjB,UAAYJ,GAAY,EAC7B5iB,KAAKmiB,WAAaO,GAAaO,GAC/BjjB,KAAKuiB,eAAiB7d,KAAKC,IAAI3E,KAAK+iB,WAAqC,kBAAlB/D,EAA6BA,EAvE5D,IAwExBhf,KAAKqiB,cAAgB3d,KAAKC,IAAI3E,KAAKgjB,UAAmC,kBAAjB/D,EAA4BA,EAvE1D,IAsFzB,CAmIA,OAjIA9b,EAAAA,EAAAA,GAAa+e,EAAmB,CAAC,CAC/B9e,IAAK,QACL3D,MAAO,SAAe2R,GACpB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAElFnE,EAAMpD,KAAKmiB,WAAW/Q,EAAUF,UAE7BlR,KAAKkjB,iBAAiB9f,UACtBpD,KAAKmjB,gBAAgB/f,GAE5BpD,KAAKojB,+BAA+BhS,EAAUF,EAChD,GACC,CACD9N,IAAK,WACL3D,MAAO,WACLO,KAAKkjB,iBAAmB,CAAC,EACzBljB,KAAKmjB,gBAAkB,CAAC,EACxBnjB,KAAKoiB,kBAAoB,CAAC,EAC1BpiB,KAAKsiB,gBAAkB,CAAC,EACxBtiB,KAAKqjB,UAAY,EACjBrjB,KAAKsjB,aAAe,CACtB,GACC,CACDlgB,IAAK,iBACL3D,MAAO,WACL,OAAOO,KAAK6iB,eACd,GACC,CACDzf,IAAK,gBACL3D,MAAO,WACL,OAAOO,KAAK8iB,cACd,GACC,CACD1f,IAAK,YACL3D,MAAO,SAAmB2R,GACxB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAEtF,GAAIvH,KAAK6iB,gBACP,OAAO7iB,KAAKuiB,eAEZ,IAAIzI,EAAO9Z,KAAKmiB,WAAW/Q,EAAUF,GAErC,YAAuC/Q,IAAhCH,KAAKkjB,iBAAiBpJ,GAAsBpV,KAAKC,IAAI3E,KAAK+iB,WAAY/iB,KAAKkjB,iBAAiBpJ,IAAS9Z,KAAKuiB,cAErH,GACC,CACDnf,IAAK,WACL3D,MAAO,SAAkB2R,GACvB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAEtF,GAAIvH,KAAK8iB,eACP,OAAO9iB,KAAKqiB,cAEZ,IAAIkB,EAAQvjB,KAAKmiB,WAAW/Q,EAAUF,GAEtC,YAAuC/Q,IAAhCH,KAAKmjB,gBAAgBI,GAAuB7e,KAAKC,IAAI3E,KAAKgjB,UAAWhjB,KAAKmjB,gBAAgBI,IAAUvjB,KAAKqiB,aAEpH,GACC,CACDjf,IAAK,MACL3D,MAAO,SAAa2R,GAClB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAElFnE,EAAMpD,KAAKmiB,WAAW/Q,EAAUF,GAEpC,YAAsC/Q,IAA/BH,KAAKkjB,iBAAiB9f,EAC/B,GACC,CACDA,IAAK,MACL3D,MAAO,SAAa2R,EAAUF,EAAavH,EAAO3M,GAChD,IAAIoG,EAAMpD,KAAKmiB,WAAW/Q,EAAUF,GAEhCA,GAAelR,KAAKsjB,eACtBtjB,KAAKsjB,aAAepS,EAAc,GAGhCE,GAAYpR,KAAKqjB,YACnBrjB,KAAKqjB,UAAYjS,EAAW,GAI9BpR,KAAKkjB,iBAAiB9f,GAAOpG,EAC7BgD,KAAKmjB,gBAAgB/f,GAAOuG,EAE5B3J,KAAKojB,+BAA+BhS,EAAUF,EAChD,GACC,CACD9N,IAAK,iCACL3D,MAAO,SAAwC2R,EAAUF,GAKvD,IAAKlR,KAAK8iB,eAAgB,CAGxB,IAFA,IAAI1T,EAAc,EAETzL,EAAI,EAAGA,EAAI3D,KAAKqjB,UAAW1f,IAClCyL,EAAc1K,KAAKC,IAAIyK,EAAapP,KAAK8gB,SAASnd,EAAGuN,IAGvD,IAAIsS,EAAYxjB,KAAKmiB,WAAW,EAAGjR,GAEnClR,KAAKoiB,kBAAkBoB,GAAapU,CACtC,CAEA,IAAKpP,KAAK6iB,gBAAiB,CAGzB,IAFA,IAAIrT,EAAY,EAEPiU,EAAK,EAAGA,EAAKzjB,KAAKsjB,aAAcG,IACvCjU,EAAY9K,KAAKC,IAAI6K,EAAWxP,KAAK6gB,UAAUzP,EAAUqS,IAG3D,IAAIC,EAAS1jB,KAAKmiB,WAAW/Q,EAAU,GAEvCpR,KAAKsiB,gBAAgBoB,GAAUlU,CACjC,CACF,GACC,CACDpM,IAAK,gBACLugB,IAAK,WACH,OAAO3jB,KAAKuiB,cACd,GACC,CACDnf,IAAK,eACLugB,IAAK,WACH,OAAO3jB,KAAKqiB,aACd,KAGKH,CACT,CAlNA,GAsNA,SAASe,GAAiB7R,EAAUF,GAClC,MAAO,GAAG3U,OAAO6U,EAAU,KAAK7U,OAAO2U,EACzC,CC5NA,SAASlF,GAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,GAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,GAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,GAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAcrgB,IAMIM,GACQ,WADRA,GAES,YAOT0W,GAEJ,SAAUxW,GAIR,SAASwW,IACP,IAAIjK,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAM4jB,GAEtB,IAAK,IAAIhK,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAkIzB,OA/HAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBqW,IAAiB5hB,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAGzIpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAAS,CACtDK,aAAa,EACb6C,WAAY,EACZC,UAAW,KAGb/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6CAA6C,IAE5F5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA8BhG,MAE7E5J,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,oBAAqBhG,GAAuB,KAE3F5J,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,kCAAkC,WAC/E,IAAIsE,EAActE,EAAMlR,MACpB0nB,EAAoBlS,EAAYkS,kBAChCjW,EAAoB+D,EAAY/D,kBAEpCP,EAAMyW,2BAA2B,CAC/Bpc,SAAUkG,EACVjG,QAAS,CACPA,QAASkc,EAAkBE,2BAGjC,KAEAtmB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,SAAUlP,GACpFkP,EAAMyB,oBAAsB3Q,CAC9B,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,wCAAwC,WACrF,IAAI+E,EAAe/E,EAAMlR,MACrB0nB,EAAoBzR,EAAayR,kBACjC7mB,EAASoV,EAAapV,OACtB8L,EAAoBsJ,EAAatJ,kBACjCkb,EAAe5R,EAAa4R,aAC5Bra,EAAQyI,EAAazI,MACrB8J,EAAcpG,EAAMtN,MACpBwQ,EAAakD,EAAYlD,WACzBC,EAAYiD,EAAYjD,UAE5B,GAAIwT,GAAgB,EAAG,CACrB,IAAIC,EAAiBJ,EAAkBK,yBAAyB,CAC9DjgB,MAAO6E,EACPqb,UAAWH,EACXhnB,OAAQA,EACRuT,WAAYA,EACZC,UAAWA,EACX7G,MAAOA,IAGLsa,EAAe1T,aAAeA,GAAc0T,EAAezT,YAAcA,GAC3EnD,EAAM+W,mBAAmBH,EAE7B,CACF,KAEAxmB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,SAAU0B,GAIpE,GAAIA,EAAMnC,SAAWS,EAAMyB,oBAA3B,CAKAzB,EAAMgX,iCAMN,IAAI9R,EAAelF,EAAMlR,MACrB0nB,EAAoBtR,EAAasR,kBACjC7mB,EAASuV,EAAavV,OACtBsnB,EAAoB/R,EAAa+R,kBACjC3a,EAAQ4I,EAAa5I,MACrBN,EAAgBgE,EAAMkX,eAEtBC,EAAwBX,EAAkB/e,eAC1C2f,EAAcD,EAAsBxnB,OACpC0nB,EAAaF,EAAsB7a,MAEnC4G,EAAa7L,KAAKC,IAAI,EAAGD,KAAKE,IAAI8f,EAAa/a,EAAQN,EAAe0F,EAAMnC,OAAO2D,aACnFC,EAAY9L,KAAKC,IAAI,EAAGD,KAAKE,IAAI6f,EAAcznB,EAASqM,EAAe0F,EAAMnC,OAAO4D,YAKxF,GAAInD,EAAMtN,MAAMwQ,aAAeA,GAAclD,EAAMtN,MAAMyQ,YAAcA,EAAW,CAKhF,IAAIC,EAA6B1B,EAAM4V,WAAazX,GAA0CA,GAEzFG,EAAMtN,MAAM2N,aACf4W,GAAkB,GAGpBjX,EAAMjN,SAAS,CACbsN,aAAa,EACb6C,WAAYA,EACZE,2BAA4BA,EAC5BD,UAAWA,GAEf,CAEAnD,EAAM4E,wBAAwB,CAC5B1B,WAAYA,EACZC,UAAWA,EACXkU,WAAYA,EACZD,YAAaA,GAjDf,CAmDF,IAEApX,EAAMkX,eAAiBvR,SAEM7S,IAAzBkN,EAAMkX,gBACRlX,EAAMuX,wBAAyB,EAC/BvX,EAAMkX,eAAiB,GAEvBlX,EAAMuX,wBAAyB,EAG1BvX,CACT,CAqSA,OAnbAyD,EAAAA,EAAAA,GAAU8S,EAAgBxW,IAsJ1BjK,EAAAA,EAAAA,GAAaygB,EAAgB,CAAC,CAC5BxgB,IAAK,iCACL3D,MAAO,WACLO,KAAK6kB,2CAA4C,EACjD7kB,KAAK4S,aACP,GAWC,CACDxP,IAAK,oBACL3D,MAAO,WACL,IAAIsT,EAAe/S,KAAK7D,MACpB0nB,EAAoB9Q,EAAa8Q,kBACjCtT,EAAawC,EAAaxC,WAC1ByT,EAAejR,EAAaiR,aAC5BxT,EAAYuC,EAAavC,UAGxBxQ,KAAK4kB,yBACR5kB,KAAKukB,eAAiBvR,IACtBhT,KAAK4kB,wBAAyB,EAC9B5kB,KAAKI,SAAS,CAAC,IAGb4jB,GAAgB,EAClBhkB,KAAK8kB,wCACIvU,GAAc,GAAKC,GAAa,IACzCxQ,KAAKokB,mBAAmB,CACtB7T,WAAYA,EACZC,UAAWA,IAKfxQ,KAAK+kB,iCAEL,IAAIC,EAAyBnB,EAAkB/e,eAC3C2f,EAAcO,EAAuBhoB,OACrC0nB,EAAaM,EAAuBrb,MAGxC3J,KAAKiS,wBAAwB,CAC3B1B,WAAYA,GAAc,EAC1BC,UAAWA,GAAa,EACxBiU,YAAaA,EACbC,WAAYA,GAEhB,GACC,CACDthB,IAAK,qBACL3D,MAAO,SAA4BkB,EAAWJ,GAC5C,IAAIiT,EAAexT,KAAK7D,MACpBa,EAASwW,EAAaxW,OACtB8L,EAAoB0K,EAAa1K,kBACjCkb,EAAexQ,EAAawQ,aAC5Bra,EAAQ6J,EAAa7J,MACrBwK,EAAenU,KAAKD,MACpBwQ,EAAa4D,EAAa5D,WAC1BE,EAA6B0D,EAAa1D,2BAC1CD,EAAY2D,EAAa3D,UAMzBC,IAA+BvD,KAC7BqD,GAAc,GAAKA,IAAehQ,EAAUgQ,YAAcA,IAAevQ,KAAK8O,oBAAoByB,aACpGvQ,KAAK8O,oBAAoByB,WAAaA,GAGpCC,GAAa,GAAKA,IAAcjQ,EAAUiQ,WAAaA,IAAcxQ,KAAK8O,oBAAoB0B,YAChGxQ,KAAK8O,oBAAoB0B,UAAYA,IAKrCxT,IAAW2D,EAAU3D,QAAU8L,IAAsBnI,EAAUmI,mBAAqBkb,IAAiBrjB,EAAUqjB,cAAgBra,IAAUhJ,EAAUgJ,OACrJ3J,KAAK8kB,uCAIP9kB,KAAK+kB,gCACP,GACC,CACD3hB,IAAK,uBACL3D,MAAO,WACDO,KAAKyN,gCACPtC,aAAanL,KAAKyN,+BAEtB,GACC,CACDrK,IAAK,SACL3D,MAAO,WACL,IAAIkU,EAAe3T,KAAK7D,MACpByV,EAAa+B,EAAa/B,WAC1BzP,EAAYwR,EAAaxR,UACzB0hB,EAAoBlQ,EAAakQ,kBACjCvlB,EAAYqV,EAAarV,UACzBtB,EAAS2W,EAAa3W,OACtBioB,EAAyBtR,EAAasR,uBACtC/Z,EAAKyI,EAAazI,GAClB8I,EAAoBL,EAAaK,kBACjCvK,EAAQkK,EAAalK,MACrByb,EAAuBvR,EAAauR,qBACpCvb,EAAQgK,EAAahK,MACrBwb,EAAenlB,KAAKD,MACpB2N,EAAcyX,EAAazX,YAC3B6C,EAAa4U,EAAa5U,WAC1BC,EAAY2U,EAAa3U,WAEzBxQ,KAAKolB,yBAA2BjjB,GAAanC,KAAKqlB,iCAAmCxB,GAAqB7jB,KAAK6kB,6CACjH7kB,KAAKolB,uBAAyBjjB,EAC9BnC,KAAKqlB,+BAAiCxB,EACtC7jB,KAAK6kB,2CAA4C,EACjDhB,EAAkByB,gCAGpB,IAAIC,EAAyB1B,EAAkB/e,eAC3C2f,EAAcc,EAAuBvoB,OACrC0nB,EAAaa,EAAuB5b,MAGpC2P,EAAO5U,KAAKC,IAAI,EAAG4L,EAAa0U,GAChCvb,EAAMhF,KAAKC,IAAI,EAAG6L,EAAY0U,GAC9BM,EAAQ9gB,KAAKE,IAAI8f,EAAYnU,EAAa5G,EAAQsb,GAClDQ,EAAS/gB,KAAKE,IAAI6f,EAAajU,EAAYxT,EAASkoB,GACpD/P,EAAoBnY,EAAS,GAAK2M,EAAQ,EAAIka,EAAkB6B,cAAc,CAChF1oB,OAAQyoB,EAAS/b,EACjBgE,YAAaA,EACb/D,MAAO6b,EAAQlM,EACfqM,EAAGrM,EACHsM,EAAGlc,IACA,GACDmc,EAAkB,CACpBvR,UAAW,aACXC,UAAW,MACXvX,OAAQ4U,EAAa,OAAS5U,EAC9BP,SAAU,WACV+X,wBAAyB,QACzB7K,MAAOA,EACP8K,WAAY,aAKVG,EAAwB6P,EAAcznB,EAASgD,KAAKukB,eAAiB,EACrE1P,EAA0B6P,EAAa/a,EAAQ3J,KAAKukB,eAAiB,EAQzE,OAFAsB,EAAgB5Q,UAAYyP,EAAa9P,GAAyBjL,EAAQ,SAAW,OACrFkc,EAAgB3Q,UAAYuP,EAAc5P,GAA2B7X,EAAS,SAAW,OAClFiB,EAAAA,cAAoB,MAAO,CAChCE,IAAK6B,KAAKsV,0BACV,aAActV,KAAK7D,MAAM,cACzBmC,WAAWqB,EAAAA,EAAAA,GAAK,+BAAgCrB,GAChD4M,GAAIA,EACJqK,SAAUvV,KAAKwV,UACfvB,KAAM,OACNxK,MAAOkD,GAAc,CAAC,EAAGkZ,EAAiB,CAAC,EAAGpc,GAC9CyK,SAAU,GACT/R,EAAY,GAAKlE,EAAAA,cAAoB,MAAO,CAC7CK,UAAW,qDACXmL,MAAO,CACLzM,OAAQynB,EACRxnB,UAAWwnB,EACXhP,SAAUiP,EACV9a,SAAU,SACV5L,cAAe0P,EAAc,OAAS,GACtC/D,MAAO+a,IAERvP,GAAkC,IAAdhT,GAAmB6R,IAC5C,GASC,CACD5Q,IAAK,iCACL3D,MAAO,WACL,IAAI8T,EAASvT,KAETA,KAAKyN,gCACPtC,aAAanL,KAAKyN,gCAGpBzN,KAAKyN,+BAAiC9C,YAAW,YAE/C2Z,EADwB/Q,EAAOpX,MAAMmoB,oBACnB,GAClB/Q,EAAO9F,+BAAiC,KAExC8F,EAAOnT,SAAS,CACdsN,aAAa,GAEjB,GAxXqB,IAyXvB,GACC,CACDtK,IAAK,0BACL3D,MAAO,SAAiC7C,GACtC,IAAI2a,EAASvX,KAETuQ,EAAa3T,EAAK2T,WAClBC,EAAY5T,EAAK4T,UACjBiU,EAAc7nB,EAAK6nB,YACnBC,EAAa9nB,EAAK8nB,WAEtB1kB,KAAKwX,kBAAkB,CACrB9P,SAAU,SAAkBrE,GAC1B,IAAIkN,EAAalN,EAAMkN,WACnBC,EAAYnN,EAAMmN,UAClBiH,EAAeF,EAAOpb,MACtBa,EAASya,EAAaza,QAG1BuY,EAFekC,EAAalC,UAEnB,CACPmC,aAAc1a,EACdgN,YAHUyN,EAAa9N,MAIvBgO,aAAc8M,EACdlU,WAAYA,EACZC,UAAWA,EACXoH,YAAa8M,GAEjB,EACA/c,QAAS,CACP4I,WAAYA,EACZC,UAAWA,IAGjB,GACC,CACDpN,IAAK,qBACL3D,MAAO,SAA4BsE,GACjC,IAAIwM,EAAaxM,EAAMwM,WACnBC,EAAYzM,EAAMyM,UAClBwB,EAAW,CACbvB,2BAA4BvD,IAG1BqD,GAAc,IAChByB,EAASzB,WAAaA,GAGpBC,GAAa,IACfwB,EAASxB,UAAYA,IAGnBD,GAAc,GAAKA,IAAevQ,KAAKD,MAAMwQ,YAAcC,GAAa,GAAKA,IAAcxQ,KAAKD,MAAMyQ,YACxGxQ,KAAKI,SAAS4R,EAElB,IACE,CAAC,CACH5O,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,OAA4B,IAAxBD,EAAU6B,WAA6C,IAAzB5B,EAAUgQ,YAA4C,IAAxBhQ,EAAUiQ,UAM/DlQ,EAAUiQ,aAAehQ,EAAUgQ,YAAcjQ,EAAUkQ,YAAcjQ,EAAUiQ,UACrF,CACLD,WAAoC,MAAxBjQ,EAAUiQ,WAAqBjQ,EAAUiQ,WAAahQ,EAAUgQ,WAC5EC,UAAkC,MAAvBlQ,EAAUkQ,UAAoBlQ,EAAUkQ,UAAYjQ,EAAUiQ,UACzEC,2BAA4BvD,IAIzB,KAbE,CACLqD,WAAY,EACZC,UAAW,EACXC,2BAA4BvD,GAWlC,KAGK0W,CACT,CArbA,CAqbE3lB,EAAAA,gBAEFR,EAAAA,EAAAA,GAAgBmmB,GAAgB,eAAgB,CAC9C,aAAc,OACdqB,uBAAwB,EACxBjR,kBAAmB,WACjB,OAAO,IACT,EACAuB,SAAU,WACR,OAAO,IACT,EACA3H,kBAAmB,WACjB,OAAO,IACT,EACA9E,kBAAmB,OACnBkb,cAAe,EACfva,MAAO,CAAC,EACRyb,qBAAsB,IAGxBtB,GAAekC,UAgGX,CAAC,GACL/kB,EAAAA,EAAAA,UAAS6iB,IACT,UC3kBImC,GAEJ,WACE,SAASA,EAAQnpB,GACf,IAAII,EAASJ,EAAKI,OACd2M,EAAQ/M,EAAK+M,MACbgc,EAAI/oB,EAAK+oB,EACTC,EAAIhpB,EAAKgpB,GAEb7iB,EAAAA,EAAAA,GAAgB/C,KAAM+lB,GAEtB/lB,KAAKhD,OAASA,EACdgD,KAAK2J,MAAQA,EACb3J,KAAK2lB,EAAIA,EACT3lB,KAAK4lB,EAAIA,EACT5lB,KAAKgmB,UAAY,CAAC,EAClBhmB,KAAKimB,SAAW,EAClB,CA+BA,OA3BA9iB,EAAAA,EAAAA,GAAa4iB,EAAS,CAAC,CACrB3iB,IAAK,eACL3D,MAAO,SAAsB4D,GAC3B,IAAIE,EAAQF,EAAME,MAEbvD,KAAKgmB,UAAUziB,KAClBvD,KAAKgmB,UAAUziB,IAAS,EAExBvD,KAAKimB,SAASxZ,KAAKlJ,GAEvB,GAGC,CACDH,IAAK,iBACL3D,MAAO,WACL,OAAOO,KAAKimB,QACd,GAGC,CACD7iB,IAAK,WACL3D,MAAO,WACL,MAAO,GAAGlD,OAAOyD,KAAK2lB,EAAG,KAAKppB,OAAOyD,KAAK4lB,EAAG,KAAKrpB,OAAOyD,KAAK2J,MAAO,KAAKpN,OAAOyD,KAAKhD,OACxF,KAGK+oB,CACT,CA/CA,GCKIG,GAEJ,WACE,SAASA,IACP,IAAIC,EAAc5e,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAXlE,KAafxE,EAAAA,EAAAA,GAAgB/C,KAAMkmB,GAEtBlmB,KAAKomB,aAAeD,EACpBnmB,KAAKqmB,cAAgB,GACrBrmB,KAAKsmB,UAAY,CAAC,CACpB,CA0GA,OAnGAnjB,EAAAA,EAAAA,GAAa+iB,EAAgB,CAAC,CAC5B9iB,IAAK,iBACL3D,MAAO,SAAwB7C,GAC7B,IAAII,EAASJ,EAAKI,OACd2M,EAAQ/M,EAAK+M,MACbgc,EAAI/oB,EAAK+oB,EACTC,EAAIhpB,EAAKgpB,EACTje,EAAU,CAAC,EAYf,OAXA3H,KAAKumB,YAAY,CACfvpB,OAAQA,EACR2M,MAAOA,EACPgc,EAAGA,EACHC,EAAGA,IACF9Y,SAAQ,SAAU0Z,GACnB,OAAOA,EAAQC,iBAAiB3Z,SAAQ,SAAUvJ,GAChDoE,EAAQpE,GAASA,CACnB,GACF,IAEOsE,OAAOD,KAAKD,GAAS+e,KAAI,SAAUnjB,GACxC,OAAOoE,EAAQpE,EACjB,GACF,GAGC,CACDH,IAAK,kBACL3D,MAAO,SAAyB4D,GAC9B,IAAIE,EAAQF,EAAME,MAClB,OAAOvD,KAAKqmB,cAAc9iB,EAC5B,GAGC,CACDH,IAAK,cACL3D,MAAO,SAAqBsE,GAW1B,IAVA,IAAI/G,EAAS+G,EAAM/G,OACf2M,EAAQ5F,EAAM4F,MACdgc,EAAI5hB,EAAM4hB,EACVC,EAAI7hB,EAAM6hB,EACVe,EAAgBjiB,KAAKY,MAAMqgB,EAAI3lB,KAAKomB,cACpCQ,EAAeliB,KAAKY,OAAOqgB,EAAIhc,EAAQ,GAAK3J,KAAKomB,cACjDS,EAAgBniB,KAAKY,MAAMsgB,EAAI5lB,KAAKomB,cACpCU,EAAepiB,KAAKY,OAAOsgB,EAAI5oB,EAAS,GAAKgD,KAAKomB,cAClDW,EAAW,GAENC,EAAWL,EAAeK,GAAYJ,EAAcI,IAC3D,IAAK,IAAIC,EAAWJ,EAAeI,GAAYH,EAAcG,IAAY,CACvE,IAAI7jB,EAAM,GAAG7G,OAAOyqB,EAAU,KAAKzqB,OAAO0qB,GAErCjnB,KAAKsmB,UAAUljB,KAClBpD,KAAKsmB,UAAUljB,GAAO,IAAI2iB,GAAQ,CAChC/oB,OAAQgD,KAAKomB,aACbzc,MAAO3J,KAAKomB,aACZT,EAAGqB,EAAWhnB,KAAKomB,aACnBR,EAAGqB,EAAWjnB,KAAKomB,gBAIvBW,EAASta,KAAKzM,KAAKsmB,UAAUljB,GAC/B,CAGF,OAAO2jB,CACT,GAGC,CACD3jB,IAAK,uBACL3D,MAAO,WACL,OAAOoI,OAAOD,KAAK5H,KAAKsmB,WAAW9e,MACrC,GAGC,CACDpE,IAAK,WACL3D,MAAO,WACL,IAAI4N,EAAQrN,KAEZ,OAAO6H,OAAOD,KAAK5H,KAAKsmB,WAAWI,KAAI,SAAUnjB,GAC/C,OAAO8J,EAAMiZ,UAAU/iB,GAAO2jB,UAChC,GACF,GAGC,CACD9jB,IAAK,eACL3D,MAAO,SAAsBsH,GAC3B,IAAIogB,EAAgBpgB,EAAMogB,cACtB5jB,EAAQwD,EAAMxD,MAClBvD,KAAKqmB,cAAc9iB,GAAS4jB,EAC5BnnB,KAAKumB,YAAYY,GAAera,SAAQ,SAAU0Z,GAChD,OAAOA,EAAQY,aAAa,CAC1B7jB,MAAOA,GAEX,GACF,KAGK2iB,CACT,CApHA,GCNe,SAASrf,GAAyBjK,GAC/C,IAAIyqB,EAAazqB,EAAKqH,MAClBA,OAAuB,IAAfojB,EAAwB,OAASA,EACzCC,EAAa1qB,EAAK0qB,WAClBllB,EAAWxF,EAAKwF,SAChB8B,EAAgBtH,EAAKsH,cACrBC,EAAgBvH,EAAKuH,cACrBK,EAAY8iB,EACZ7iB,EAAYD,EAAYN,EAAgB9B,EAE5C,OAAQ6B,GACN,IAAK,QACH,OAAOO,EAET,IAAK,MACH,OAAOC,EAET,IAAK,SACH,OAAOD,GAAaN,EAAgB9B,GAAY,EAElD,QACE,OAAOsC,KAAKC,IAAIF,EAAWC,KAAKE,IAAIJ,EAAWL,IAErD,CCjBA,IAAIojB,GAEJ,SAAUna,GAGR,SAASma,EAAWprB,EAAOqrB,GACzB,IAAIna,EAWJ,OATAtK,EAAAA,EAAAA,GAAgB/C,KAAMunB,IAEtBla,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBga,GAAYvlB,KAAKhC,KAAM7D,EAAOqrB,KACjFnB,cAAgB,GACtBhZ,EAAMoa,yBAA2B,GAEjCpa,EAAMsF,WAAa,GACnBtF,EAAMqa,mBAAqBra,EAAMqa,mBAAmBlnB,MAAKgN,EAAAA,EAAAA,GAAuBH,IAChFA,EAAMsa,sBAAwBta,EAAMsa,sBAAsBnnB,MAAKgN,EAAAA,EAAAA,GAAuBH,IAC/EA,CACT,CA4JA,OA3KAyD,EAAAA,EAAAA,GAAUyW,EAAYna,IAiBtBjK,EAAAA,EAAAA,GAAaokB,EAAY,CAAC,CACxBnkB,IAAK,cACL3D,MAAO,gBACwBU,IAAzBH,KAAK4nB,iBACP5nB,KAAK4nB,gBAAgBhV,aAEzB,GAGC,CACDxP,IAAK,iCACL3D,MAAO,WACLO,KAAK2S,WAAa,GAElB3S,KAAK4nB,gBAAgBC,gCACvB,GAGC,CACDzkB,IAAK,SACL3D,MAAO,WACL,IAAItD,GAAQW,EAAAA,EAAAA,GAAS,CAAC,EAAGkD,KAAK7D,OAE9B,OAAO8B,EAAAA,cAAoB2lB,IAAgB9mB,EAAAA,EAAAA,GAAS,CAClD+mB,kBAAmB7jB,KACnBskB,kBAAmBtkB,KAAK0nB,mBACxBvpB,IAAK6B,KAAK2nB,uBACTxrB,GACL,GAGC,CACDiH,IAAK,+BACL3D,MAAO,WACL,IAAIkS,EAAc3R,KAAK7D,MAKnB2rB,EC5EK,SAAsClrB,GASnD,IARA,IAAIuF,EAAYvF,EAAKuF,UACjB4lB,EAA4BnrB,EAAKmrB,0BACjC5B,EAAcvpB,EAAKupB,YACnB6B,EAAe,GACfC,EAAiB,IAAI/B,GAAeC,GACpCnpB,EAAS,EACT2M,EAAQ,EAEHpG,EAAQ,EAAGA,EAAQpB,EAAWoB,IAAS,CAC9C,IAAI4jB,EAAgBY,EAA0B,CAC5CxkB,MAAOA,IAGT,GAA4B,MAAxB4jB,EAAcnqB,QAAkB4G,MAAMujB,EAAcnqB,SAAkC,MAAvBmqB,EAAcxd,OAAiB/F,MAAMujB,EAAcxd,QAA6B,MAAnBwd,EAAcxB,GAAa/hB,MAAMujB,EAAcxB,IAAyB,MAAnBwB,EAAcvB,GAAahiB,MAAMujB,EAAcvB,GAClO,MAAMzkB,MAAM,sCAAsC5E,OAAOgH,EAAO,iBAAiBhH,OAAO4qB,EAAcxB,EAAG,QAAQppB,OAAO4qB,EAAcvB,EAAG,YAAYrpB,OAAO4qB,EAAcxd,MAAO,aAAapN,OAAO4qB,EAAcnqB,SAGrNA,EAAS0H,KAAKC,IAAI3H,EAAQmqB,EAAcvB,EAAIuB,EAAcnqB,QAC1D2M,EAAQjF,KAAKC,IAAIgF,EAAOwd,EAAcxB,EAAIwB,EAAcxd,OACxDqe,EAAazkB,GAAS4jB,EACtBc,EAAeC,aAAa,CAC1Bf,cAAeA,EACf5jB,MAAOA,GAEX,CAEA,MAAO,CACLykB,aAAcA,EACdhrB,OAAQA,EACRirB,eAAgBA,EAChBte,MAAOA,EAEX,CD2CiBwe,CAA8B,CACvChmB,UALcwP,EAAYxP,UAM1B4lB,0BAL8BpW,EAAYoW,0BAM1C5B,YALgBxU,EAAYwU,cAQ9BnmB,KAAKqmB,cAAgByB,EAAKE,aAC1BhoB,KAAKooB,gBAAkBN,EAAKG,eAC5BjoB,KAAKqoB,QAAUP,EAAK9qB,OACpBgD,KAAKsoB,OAASR,EAAKne,KACrB,GAKC,CACDvG,IAAK,yBACL3D,MAAO,WACL,OAAOO,KAAKynB,wBACd,GAKC,CACDrkB,IAAK,2BACL3D,MAAO,SAAkC7C,GACvC,IAAIqH,EAAQrH,EAAKqH,MACbkgB,EAAYvnB,EAAKunB,UACjBnnB,EAASJ,EAAKI,OACduT,EAAa3T,EAAK2T,WAClBC,EAAY5T,EAAK4T,UACjB7G,EAAQ/M,EAAK+M,MACbxH,EAAYnC,KAAK7D,MAAMgG,UAE3B,GAAIgiB,GAAa,GAAKA,EAAYhiB,EAAW,CAC3C,IAAI6lB,EAAehoB,KAAKqmB,cAAclC,GACtC5T,EAAa1J,GAAyB,CACpC5C,MAAOA,EACPqjB,WAAYU,EAAarC,EACzBvjB,SAAU4lB,EAAare,MACvBzF,cAAeyF,EACfxF,cAAeoM,EACfnM,YAAa+f,IAEf3T,EAAY3J,GAAyB,CACnC5C,MAAOA,EACPqjB,WAAYU,EAAapC,EACzBxjB,SAAU4lB,EAAahrB,OACvBkH,cAAelH,EACfmH,cAAeqM,EACfpM,YAAa+f,GAEjB,CAEA,MAAO,CACL5T,WAAYA,EACZC,UAAWA,EAEf,GACC,CACDpN,IAAK,eACL3D,MAAO,WACL,MAAO,CACLzC,OAAQgD,KAAKqoB,QACb1e,MAAO3J,KAAKsoB,OAEhB,GACC,CACDllB,IAAK,gBACL3D,MAAO,SAAuB4D,GAC5B,IAAIkQ,EAASvT,KAEThD,EAASqG,EAAMrG,OACf0Q,EAAcrK,EAAMqK,YACpB/D,EAAQtG,EAAMsG,MACdgc,EAAItiB,EAAMsiB,EACVC,EAAIviB,EAAMuiB,EACVxT,EAAepS,KAAK7D,MACpBosB,EAAoBnW,EAAamW,kBACjC7S,EAAetD,EAAasD,aAQhC,OANA1V,KAAKynB,yBAA2BznB,KAAKooB,gBAAgB3B,eAAe,CAClEzpB,OAAQA,EACR2M,MAAOA,EACPgc,EAAGA,EACHC,EAAGA,IAEE2C,EAAkB,CACvBtR,UAAWjX,KAAK2S,WAChB+C,aAAcA,EACdqS,0BAA2B,SAAmChkB,GAC5D,IAAIR,EAAQQ,EAAMR,MAClB,OAAOgQ,EAAO6U,gBAAgBI,gBAAgB,CAC5CjlB,MAAOA,GAEX,EACAoE,QAAS3H,KAAKynB,yBACd/Z,YAAaA,GAEjB,GACC,CACDtK,IAAK,qBACL3D,MAAO,SAA4BiO,GAC5BA,IACH1N,KAAK2S,WAAa,GAEtB,GACC,CACDvP,IAAK,wBACL3D,MAAO,SAA+BtB,GACpC6B,KAAK4nB,gBAAkBzpB,CACzB,KAGKopB,CACT,CA7KA,CA6KEtpB,EAAAA,gBAEFR,EAAAA,EAAAA,GAAgB8pB,GAAY,eAAgB,CAC1C,aAAc,OACdgB,kBAwCF,SAAkCxhB,GAChC,IAAIkQ,EAAYlQ,EAAMkQ,UAClBvB,EAAe3O,EAAM2O,aACrBqS,EAA4BhhB,EAAMghB,0BAClCpgB,EAAUZ,EAAMY,QAChB+F,EAAc3G,EAAM2G,YACxB,OAAO/F,EAAQ+e,KAAI,SAAUnjB,GAC3B,IAAIykB,EAAeD,EAA0B,CAC3CxkB,MAAOA,IAELklB,EAAoB,CACtBllB,MAAOA,EACPmK,YAAaA,EACbtK,IAAKG,EACLkG,MAAO,CACLzM,OAAQgrB,EAAahrB,OACrBsc,KAAM0O,EAAarC,EACnBlpB,SAAU,WACViN,IAAKse,EAAapC,EAClBjc,MAAOqe,EAAare,QAOxB,OAAI+D,GACInK,KAAS0T,IACbA,EAAU1T,GAASmS,EAAa+S,IAG3BxR,EAAU1T,IAEVmS,EAAa+S,EAExB,IAAGpc,QAAO,SAAUmN,GAClB,QAASA,CACX,GACF,IA1EA+N,GAAWzB,UAkCP,CAAC,GE7NL,SAAU1Y,GAGR,SAASsb,EAAYvsB,EAAOqrB,GAC1B,IAAIna,EAMJ,OAJAtK,EAAAA,EAAAA,GAAgB/C,KAAM0oB,IAEtBrb,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBmb,GAAa1mB,KAAKhC,KAAM7D,EAAOqrB,KAClFhG,eAAiBnU,EAAMmU,eAAehhB,MAAKgN,EAAAA,EAAAA,GAAuBH,IACjEA,CACT,CAyDA,OAnEAyD,EAAAA,EAAAA,GAAU4X,EAAatb,IAYvBjK,EAAAA,EAAAA,GAAaulB,EAAa,CAAC,CACzBtlB,IAAK,qBACL3D,MAAO,SAA4BkB,GACjC,IAAIgR,EAAc3R,KAAK7D,MACnBwsB,EAAiBhX,EAAYgX,eAC7BC,EAAiBjX,EAAYiX,eAC7B1Z,EAAcyC,EAAYzC,YAC1BvF,EAAQgI,EAAYhI,MAEpBgf,IAAmBhoB,EAAUgoB,gBAAkBC,IAAmBjoB,EAAUioB,gBAAkB1Z,IAAgBvO,EAAUuO,aAAevF,IAAUhJ,EAAUgJ,OACzJ3J,KAAK6oB,kBACP7oB,KAAK6oB,iBAAiBvR,mBAG5B,GACC,CACDlU,IAAK,SACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpBkC,EAAW+T,EAAa/T,SACxBsqB,EAAiBvW,EAAauW,eAC9BC,EAAiBxW,EAAawW,eAC9B1Z,EAAckD,EAAalD,YAC3BvF,EAAQyI,EAAazI,MACrBmf,EAAqBF,GAAkB,EACvCG,EAAqBJ,EAAiBjkB,KAAKE,IAAI+jB,EAAgBhf,GAASA,EACxEyF,EAAczF,EAAQuF,EAK1B,OAJAE,EAAc1K,KAAKC,IAAImkB,EAAoB1Z,GAC3CA,EAAc1K,KAAKE,IAAImkB,EAAoB3Z,GAC3CA,EAAc1K,KAAKY,MAAM8J,GAElB/Q,EAAS,CACd2qB,cAFkBtkB,KAAKE,IAAI+E,EAAOyF,EAAcF,GAGhDE,YAAaA,EACb6Z,eAAgB,WACd,OAAO7Z,CACT,EACAmS,cAAevhB,KAAKwhB,gBAExB,GACC,CACDpe,IAAK,iBACL3D,MAAO,SAAwBypB,GAC7B,GAAIA,GAA4C,oBAA5BA,EAAM5R,kBACxB,MAAMnW,MAAM,iFAGdnB,KAAK6oB,iBAAmBK,EAEpBlpB,KAAK6oB,kBACP7oB,KAAK6oB,iBAAiBvR,mBAE1B,KAGKoR,CACT,CArEA,CAqEEzqB,EAAAA,gBAGU6nB,UAuBR,CAAC,EC5GL,I,YCgBIqD,GAEJ,SAAU/b,GAGR,SAAS+b,EAAehtB,EAAOqrB,GAC7B,IAAIna,EAQJ,OANAtK,EAAAA,EAAAA,GAAgB/C,KAAMmpB,IAEtB9b,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgB4b,GAAgBnnB,KAAKhC,KAAM7D,EAAOqrB,KACrF4B,sBAAwB/hB,IAC9BgG,EAAMgc,gBAAkBhc,EAAMgc,gBAAgB7oB,MAAKgN,EAAAA,EAAAA,GAAuBH,IAC1EA,EAAMmU,eAAiBnU,EAAMmU,eAAehhB,MAAKgN,EAAAA,EAAAA,GAAuBH,IACjEA,CACT,CAkGA,OA9GAyD,EAAAA,EAAAA,GAAUqY,EAAgB/b,IAc1BjK,EAAAA,EAAAA,GAAagmB,EAAgB,CAAC,CAC5B/lB,IAAK,yBACL3D,MAAO,SAAgC6pB,GACrCtpB,KAAKopB,sBAAwB/hB,IAEzBiiB,GACFtpB,KAAKupB,SAASvpB,KAAKwpB,wBAAyBxpB,KAAKypB,uBAErD,GACC,CACDrmB,IAAK,SACL3D,MAAO,WAEL,OAAOpB,EADQ2B,KAAK7D,MAAMkC,UACV,CACdqrB,eAAgB1pB,KAAKqpB,gBACrB9H,cAAevhB,KAAKwhB,gBAExB,GACC,CACDpe,IAAK,sBACL3D,MAAO,SAA6BkqB,GAClC,IAAIpW,EAASvT,KAET4pB,EAAe5pB,KAAK7D,MAAMytB,aAC9BD,EAAe7c,SAAQ,SAAU+c,GAC/B,IAAIC,EAAUF,EAAaC,GAEvBC,GACFA,EAAQle,MAAK,YA8HhB,SAAwB7E,GAC7B,IAAIgjB,EAAyBhjB,EAAMgjB,uBAC/BC,EAAwBjjB,EAAMijB,sBAC9BvT,EAAa1P,EAAM0P,WACnBC,EAAY3P,EAAM2P,UACtB,QAASD,EAAauT,GAAyBtT,EAAYqT,EAC7D,EAjIgBE,CAAe,CACjBF,uBAAwBxW,EAAOiW,wBAC/BQ,sBAAuBzW,EAAOkW,uBAC9BhT,WAAYoT,EAAcpT,WAC1BC,UAAWmT,EAAcnT,aAErBnD,EAAOsV,kBAmNlB,SAA8CrqB,GACnD,IAAI0rB,EAAe3iB,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EACnF4iB,EAAuD,oBAAhC3rB,EAAU8Y,kBAAmC9Y,EAAU8Y,kBAAoB9Y,EAAU4rB,oBAE5GD,EACFA,EAAcnoB,KAAKxD,EAAW0rB,GAE9B1rB,EAAUoU,aAEd,CA3NgByX,CAAqC9W,EAAOsV,iBAAkBtV,EAAOiW,wBAG3E,GAEJ,GACF,GACC,CACDpmB,IAAK,kBACL3D,MAAO,SAAyB7C,GAC9B,IAAI6Z,EAAa7Z,EAAK6Z,WAClBC,EAAY9Z,EAAK8Z,UACrB1W,KAAKwpB,wBAA0B/S,EAC/BzW,KAAKypB,uBAAyB/S,EAE9B1W,KAAKupB,SAAS9S,EAAYC,EAC5B,GACC,CACDtT,IAAK,WACL3D,MAAO,SAAkBgX,EAAYC,GACnC,IAAIrT,EACAkU,EAASvX,KAET2R,EAAc3R,KAAK7D,MACnBmuB,EAAc3Y,EAAY2Y,YAC1BC,EAAmB5Y,EAAY4Y,iBAC/Bhb,EAAWoC,EAAYpC,SACvBib,EAAY7Y,EAAY6Y,UACxBb,EAmGH,SAA+BziB,GAUpC,IATA,IAAIojB,EAAcpjB,EAAMojB,YACpBC,EAAmBrjB,EAAMqjB,iBACzBhb,EAAWrI,EAAMqI,SACjBkH,EAAavP,EAAMuP,WACnBC,EAAYxP,EAAMwP,UAClBiT,EAAiB,GACjBc,EAAkB,KAClBC,EAAiB,KAEZnnB,EAAQkT,EAAYlT,GAASmT,EAAWnT,IAAS,CAC3C+mB,EAAY,CACvB/mB,MAAOA,IASqB,OAAnBmnB,IACTf,EAAeld,KAAK,CAClBgK,WAAYgU,EACZ/T,UAAWgU,IAEbD,EAAkBC,EAAiB,OAVnCA,EAAiBnnB,EAEO,OAApBknB,IACFA,EAAkBlnB,GASxB,CAIA,GAAuB,OAAnBmnB,EAAyB,CAG3B,IAFA,IAAIC,EAAqBjmB,KAAKE,IAAIF,KAAKC,IAAI+lB,EAAgBD,EAAkBF,EAAmB,GAAIhb,EAAW,GAEtGqb,EAASF,EAAiB,EAAGE,GAAUD,IACzCL,EAAY,CACf/mB,MAAOqnB,IAFyDA,IAIhEF,EAAiBE,EAMrBjB,EAAeld,KAAK,CAClBgK,WAAYgU,EACZ/T,UAAWgU,GAEf,CAIA,GAAIf,EAAeniB,OAGjB,IAFA,IAAIqjB,EAAqBlB,EAAe,GAEjCkB,EAAmBnU,UAAYmU,EAAmBpU,WAAa,EAAI8T,GAAoBM,EAAmBpU,WAAa,GAAG,CAC/H,IAAIqU,EAAUD,EAAmBpU,WAAa,EAE9C,GAAK6T,EAAY,CACf/mB,MAAOunB,IAIP,MAFAD,EAAmBpU,WAAaqU,CAIpC,CAGF,OAAOnB,CACT,CAzK2BoB,CAAsB,CACzCT,YAAaA,EACbC,iBAAkBA,EAClBhb,SAAUA,EACVkH,WAAY/R,KAAKC,IAAI,EAAG8R,EAAa+T,GACrC9T,UAAWhS,KAAKE,IAAI2K,EAAW,EAAGmH,EAAY8T,KAG5CQ,GAA0B3nB,EAAQ,IAAI9G,OAAOmQ,MAAMrJ,GAAO4nB,EAAAA,GAAAA,GAAmBtB,EAAejD,KAAI,SAAU3iB,GAG5G,MAAO,CAFUA,EAAM0S,WACP1S,EAAM2S,UAExB,MAEA1W,KAAKopB,sBAAsB,CACzB1hB,SAAU,WACR6P,EAAO2T,oBAAoBvB,EAC7B,EACAhiB,QAAS,CACPqjB,uBAAwBA,IAG9B,GACC,CACD5nB,IAAK,iBACL3D,MAAO,SAAwB0rB,GAC7BnrB,KAAK6oB,iBAAmBsC,CAC1B,KAGKhC,CACT,CAhHA,CAgHElrB,EAAAA,gBAMFR,EAAAA,EAAAA,GAAgB0rB,GAAgB,eAAgB,CAC9CoB,iBAAkB,GAClBhb,SAAU,EACVib,UAAW,KAIbrB,GAAerD,UA2CX,CAAC,EC1LL,ICQI5b,GAAQC,GAcRihB,IAAQjhB,GAAQD,GAEpB,SAAUkD,GAGR,SAASge,IACP,IAAIzR,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAMorB,GAEtB,IAAK,IAAIxR,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAoEzB,OAjEAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgB6d,IAAOppB,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAE/Hpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,YAAQ,IAEvD5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iBAAiB,SAAUzQ,GACxE,IAAIsa,EAASta,EAAKsa,OACd9F,EAAWxU,EAAKwU,SAChB3H,EAAQ7M,EAAK6M,MACbiE,EAAc9Q,EAAK8Q,YACnB2L,EAAYzc,EAAKyc,UACjBjW,EAAMxG,EAAKwG,IACXioB,EAAche,EAAMlR,MAAMkvB,YAM1BC,EAAkBzjB,OAAO0E,yBAAyB9C,EAAO,SAQ7D,OANI6hB,GAAmBA,EAAgBC,WAGrC9hB,EAAME,MAAQ,QAGT0hB,EAAY,CACjB9nB,MAAO6N,EACP3H,MAAOA,EACPiE,YAAaA,EACb2L,UAAWA,EACXjW,IAAKA,EACL8T,OAAQA,GAEZ,KAEAzZ,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,WAAW,SAAUlP,GAClEkP,EAAMF,KAAOhP,CACf,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,SAAUhK,GACpE,IAAIqU,EAAerU,EAAMqU,aACrBC,EAAetU,EAAMsU,aACrBnH,EAAYnN,EAAMmN,WAEtB+E,EADelI,EAAMlR,MAAMoZ,UAClB,CACPmC,aAAcA,EACdC,aAAcA,EACdnH,UAAWA,GAEf,KAEA/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAsB,SAAUtJ,GAC7E,IAAIuK,EAAwBvK,EAAMuK,sBAC9BE,EAAuBzK,EAAMyK,qBAC7BE,EAAgB3K,EAAM2K,cACtBE,EAAe7K,EAAM6K,cAEzB8a,EADqBrc,EAAMlR,MAAMutB,gBAClB,CACb9S,mBAAoBtI,EACpBuI,kBAAmBrI,EACnBiI,WAAY/H,EACZgI,UAAW9H,GAEf,IAEOvB,CACT,CAyIA,OAxNAyD,EAAAA,EAAAA,GAAUsa,EAAMhe,IAiFhBjK,EAAAA,EAAAA,GAAaioB,EAAM,CAAC,CAClBhoB,IAAK,kBACL3D,MAAO,WACDO,KAAKmN,MACPnN,KAAKmN,KAAKyF,aAEd,GAGC,CACDxP,IAAK,kBACL3D,MAAO,SAAyBsH,GAC9B,IAAIiK,EAAYjK,EAAMiK,UAClBzN,EAAQwD,EAAMxD,MAElB,OAAIvD,KAAKmN,KACqBnN,KAAKmN,KAAKqe,iBAAiB,CACrDxa,UAAWA,EACXI,SAAU7N,EACV2N,YAAa,IAEuBV,UAKjC,CACT,GAGC,CACDpN,IAAK,gCACL3D,MAAO,SAAuCyH,GAC5C,IAAIgK,EAAchK,EAAMgK,YACpBE,EAAWlK,EAAMkK,SAEjBpR,KAAKmN,MACPnN,KAAKmN,KAAK8U,8BAA8B,CACtC7Q,SAAUA,EACVF,YAAaA,GAGnB,GAGC,CACD9N,IAAK,iBACL3D,MAAO,WACDO,KAAKmN,MACPnN,KAAKmN,KAAKse,iBAEd,GAGC,CACDroB,IAAK,oBACL3D,MAAO,WACL,IAAI0H,EAAQI,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC7EmkB,EAAoBvkB,EAAM+J,YAC1BA,OAAoC,IAAtBwa,EAA+B,EAAIA,EACjDC,EAAiBxkB,EAAMiK,SACvBA,OAA8B,IAAnBua,EAA4B,EAAIA,EAE3C3rB,KAAKmN,MACPnN,KAAKmN,KAAKmK,kBAAkB,CAC1BlG,SAAUA,EACVF,YAAaA,GAGnB,GAGC,CACD9N,IAAK,sBACL3D,MAAO,WACL,IAAI8D,EAAQgE,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAE5EvH,KAAKmN,MACPnN,KAAKmN,KAAKmK,kBAAkB,CAC1BlG,SAAU7N,EACV2N,YAAa,GAGnB,GAGC,CACD9N,IAAK,mBACL3D,MAAO,WACL,IAAI+Q,EAAYjJ,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAEhFvH,KAAKmN,MACPnN,KAAKmN,KAAKye,iBAAiB,CACzBpb,UAAWA,GAGjB,GAGC,CACDpN,IAAK,cACL3D,MAAO,WACL,IAAI8D,EAAQgE,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAE5EvH,KAAKmN,MACPnN,KAAKmN,KAAK6W,aAAa,CACrB9S,YAAa,EACbE,SAAU7N,GAGhB,GACC,CACDH,IAAK,SACL3D,MAAO,WACL,IAAIkS,EAAc3R,KAAK7D,MACnBmC,EAAYqT,EAAYrT,UACxButB,EAAiBla,EAAYka,eAC7BnpB,EAAgBiP,EAAYjP,cAC5BiH,EAAQgI,EAAYhI,MACpBmiB,GAAansB,EAAAA,EAAAA,GAAK,yBAA0BrB,GAChD,OAAOL,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGkD,KAAK7D,MAAO,CACxDyX,oBAAoB,EACpB8B,aAAc1V,KAAK+rB,cACnBztB,UAAWwtB,EACX1c,YAAazF,EACbuF,YAAa,EACb8E,kBAAmB6X,EACnBtW,SAAUvV,KAAKwV,UACf5H,kBAAmB5N,KAAK2a,mBACxBxc,IAAK6B,KAAKsgB,QACVnQ,YAAazN,IAEjB,KAGK0oB,CACT,CA1NA,CA0NEntB,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,GAAQ,YAAqD,MA8EjGC,KAEJ1M,EAAAA,EAAAA,GAAgB2tB,GAAM,eAAgB,CACpCxZ,YAAY,EACZ6G,iBAAkB,GAClBlD,SAAU,WAAqB,EAC/BsW,eAAgB,WACd,OAAO,IACT,EACAnC,eAAgB,WAA2B,EAC3C5T,sBAAuBkW,EACvBjW,iBAAkB,GAClBjN,kBAAmB,OACnBpG,eAAgB,EAChB+G,MAAO,CAAC,I,gBCxGV,QACEwiB,GA5LF,SAA2BC,EAAGtG,EAAGuG,EAAGC,EAAGC,GACrC,MAAiB,oBAANF,EAnBb,SAAcD,EAAGE,EAAGC,EAAGzG,EAAGuG,GAGxB,IAFA,IAAIxoB,EAAI0oB,EAAI,EAELD,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EAGdF,EAFID,EAAEI,GAED1G,IAAM,GACbjiB,EAAI2oB,EACJD,EAAIC,EAAI,GAERF,EAAIE,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAIW4oB,CAAKL,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeH,EAAE1kB,OAAS,EAAQ,EAAJ6kB,EAAOzG,EAAGuG,GAtCrF,SAAcD,EAAGE,EAAGC,EAAGzG,GAGrB,IAFA,IAAIjiB,EAAI0oB,EAAI,EAELD,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EACVH,EAAEI,IAED1G,GACPjiB,EAAI2oB,EACJD,EAAIC,EAAI,GAERF,EAAIE,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAwBW6oB,CAAKN,OAAS,IAANC,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeF,EAAE1kB,OAAS,EAAQ,EAAJ4kB,EAAOxG,EAElF,EAuLE6G,GAjJF,SAA2BP,EAAGtG,EAAGuG,EAAGC,EAAGC,GACrC,MAAiB,oBAANF,EAnBb,SAAcD,EAAGE,EAAGC,EAAGzG,EAAGuG,GAGxB,IAFA,IAAIxoB,EAAI0oB,EAAI,EAELD,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EAGdF,EAFID,EAAEI,GAED1G,GAAK,GACZjiB,EAAI2oB,EACJD,EAAIC,EAAI,GAERF,EAAIE,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAIW+oB,CAAKR,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeH,EAAE1kB,OAAS,EAAQ,EAAJ6kB,EAAOzG,EAAGuG,GAtCrF,SAAcD,EAAGE,EAAGC,EAAGzG,GAGrB,IAFA,IAAIjiB,EAAI0oB,EAAI,EAELD,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EACVH,EAAEI,GAEF1G,GACNjiB,EAAI2oB,EACJD,EAAIC,EAAI,GAERF,EAAIE,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAwBWgpB,CAAKT,OAAS,IAANC,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeF,EAAE1kB,OAAS,EAAQ,EAAJ4kB,EAAOxG,EAElF,EA4IEgH,GAtGF,SAA2BV,EAAGtG,EAAGuG,EAAGC,EAAGC,GACrC,MAAiB,oBAANF,EAnBb,SAAcD,EAAGE,EAAGC,EAAGzG,EAAGuG,GAGxB,IAFA,IAAIxoB,EAAIyoB,EAAI,EAELA,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EAGdF,EAFID,EAAEI,GAED1G,GAAK,GACZjiB,EAAI2oB,EACJF,EAAIE,EAAI,GAERD,EAAIC,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAIWkpB,CAAKX,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeH,EAAE1kB,OAAS,EAAQ,EAAJ6kB,EAAOzG,EAAGuG,GAtCrF,SAAcD,EAAGE,EAAGC,EAAGzG,GAGrB,IAFA,IAAIjiB,EAAIyoB,EAAI,EAELA,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EACVH,EAAEI,GAEF1G,GACNjiB,EAAI2oB,EACJF,EAAIE,EAAI,GAERD,EAAIC,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAwBWmpB,CAAKZ,OAAS,IAANC,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeF,EAAE1kB,OAAS,EAAQ,EAAJ4kB,EAAOxG,EAElF,EAiGEmH,GA3DF,SAA2Bb,EAAGtG,EAAGuG,EAAGC,EAAGC,GACrC,MAAiB,oBAANF,EAnBb,SAAcD,EAAGE,EAAGC,EAAGzG,EAAGuG,GAGxB,IAFA,IAAIxoB,EAAIyoB,EAAI,EAELA,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EAGdF,EAFID,EAAEI,GAED1G,IAAM,GACbjiB,EAAI2oB,EACJF,EAAIE,EAAI,GAERD,EAAIC,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAIWqpB,CAAKd,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeH,EAAE1kB,OAAS,EAAQ,EAAJ6kB,EAAOzG,EAAGuG,GAtCrF,SAAcD,EAAGE,EAAGC,EAAGzG,GAGrB,IAFA,IAAIjiB,EAAIyoB,EAAI,EAELA,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EACVH,EAAEI,IAED1G,GACPjiB,EAAI2oB,EACJF,EAAIE,EAAI,GAERD,EAAIC,EAAI,CAEZ,CAEA,OAAO3oB,CACT,CAwBWspB,CAAKf,OAAS,IAANC,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeF,EAAE1kB,OAAS,EAAQ,EAAJ4kB,EAAOxG,EAElF,EAsDEsH,GAbF,SAA2BhB,EAAGtG,EAAGuG,EAAGC,EAAGC,GACrC,MAAiB,oBAANF,EArBb,SAAcD,EAAGE,EAAGC,EAAGzG,EAAGuG,GAGxB,KAAOC,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EAEdc,EAAIhB,EADAD,EAAEI,GACG1G,GAEb,GAAU,IAANuH,EACF,OAAOb,EACEa,GAAK,EACdf,EAAIE,EAAI,EAERD,EAAIC,EAAI,CAEZ,CAEA,OAAQ,CACV,CAIWc,CAAKlB,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeH,EAAE1kB,OAAS,EAAQ,EAAJ6kB,EAAOzG,EAAGuG,GAzCrF,SAAcD,EAAGE,EAAGC,EAAGzG,GAGrB,KAAOwG,GAAKC,GAAG,CACb,IAAIC,EAAIF,EAAIC,IAAM,EACd1G,EAAIuG,EAAEI,GAEV,GAAI3G,IAAMC,EACR,OAAO0G,EACE3G,GAAKC,EACdwG,EAAIE,EAAI,EAERD,EAAIC,EAAI,CAEZ,CAEA,OAAQ,CACV,CA0BWe,CAAKnB,OAAS,IAANC,EAAe,EAAQ,EAAJA,OAAa,IAANC,EAAeF,EAAE1kB,OAAS,EAAQ,EAAJ4kB,EAAOxG,EAElF,GCxNA,SAAS0H,GAAiBC,EAAKjU,EAAMkM,EAAOgI,EAAYC,GACtDztB,KAAKutB,IAAMA,EACXvtB,KAAKsZ,KAAOA,EACZtZ,KAAKwlB,MAAQA,EACbxlB,KAAKwtB,WAAaA,EAClBxtB,KAAKytB,YAAcA,EACnBztB,KAAK0tB,OAASpU,EAAOA,EAAKoU,MAAQ,IAAMlI,EAAQA,EAAMkI,MAAQ,GAAKF,EAAWhmB,MAChF,CAEA,IAAImmB,GAAQL,GAAiBrsB,UAE7B,SAAS2sB,GAAK1B,EAAG2B,GACf3B,EAAEqB,IAAMM,EAAEN,IACVrB,EAAE5S,KAAOuU,EAAEvU,KACX4S,EAAE1G,MAAQqI,EAAErI,MACZ0G,EAAEsB,WAAaK,EAAEL,WACjBtB,EAAEuB,YAAcI,EAAEJ,YAClBvB,EAAEwB,MAAQG,EAAEH,KACd,CAEA,SAASI,GAAQrM,EAAMsM,GACrB,IAAIC,EAAQC,GAAmBF,GAC/BtM,EAAK8L,IAAMS,EAAMT,IACjB9L,EAAKnI,KAAO0U,EAAM1U,KAClBmI,EAAK+D,MAAQwI,EAAMxI,MACnB/D,EAAK+L,WAAaQ,EAAMR,WACxB/L,EAAKgM,YAAcO,EAAMP,YACzBhM,EAAKiM,MAAQM,EAAMN,KACrB,CAEA,SAASQ,GAAoBzM,EAAMlc,GACjC,IAAIwoB,EAAYtM,EAAKsM,UAAU,IAC/BA,EAAUthB,KAAKlH,GACfuoB,GAAQrM,EAAMsM,EAChB,CAEA,SAASI,GAAuB1M,EAAMlc,GACpC,IAAIwoB,EAAYtM,EAAKsM,UAAU,IAC3BK,EAAML,EAAU5R,QAAQ5W,GAE5B,OAAI6oB,EAAM,EA5CI,GAgDdL,EAAUnP,OAAOwP,EAAK,GACtBN,GAAQrM,EAAMsM,GAhDF,EAkDd,CAgKA,SAASM,GAAgBC,EAAKC,EAAIC,GAChC,IAAK,IAAI7qB,EAAI,EAAGA,EAAI2qB,EAAI9mB,QAAU8mB,EAAI3qB,GAAG,IAAM4qB,IAAM5qB,EAAG,CACtD,IAAI8qB,EAAID,EAAGF,EAAI3qB,IAEf,GAAI8qB,EACF,OAAOA,CAEX,CACF,CAEA,SAASC,GAAiBJ,EAAKK,EAAIH,GACjC,IAAK,IAAI7qB,EAAI2qB,EAAI9mB,OAAS,EAAG7D,GAAK,GAAK2qB,EAAI3qB,GAAG,IAAMgrB,IAAMhrB,EAAG,CAC3D,IAAI8qB,EAAID,EAAGF,EAAI3qB,IAEf,GAAI8qB,EACF,OAAOA,CAEX,CACF,CAEA,SAASG,GAAYN,EAAKE,GACxB,IAAK,IAAI7qB,EAAI,EAAGA,EAAI2qB,EAAI9mB,SAAU7D,EAAG,CACnC,IAAI8qB,EAAID,EAAGF,EAAI3qB,IAEf,GAAI8qB,EACF,OAAOA,CAEX,CACF,CAsDA,SAASI,GAAe3C,EAAG2B,GACzB,OAAO3B,EAAI2B,CACb,CAEA,SAASiB,GAAa5C,EAAG2B,GACvB,IAAIkB,EAAI7C,EAAE,GAAK2B,EAAE,GAEjB,OAAIkB,GAIG7C,EAAE,GAAK2B,EAAE,EAClB,CAEA,SAASmB,GAAW9C,EAAG2B,GACrB,IAAIkB,EAAI7C,EAAE,GAAK2B,EAAE,GAEjB,OAAIkB,GAIG7C,EAAE,GAAK2B,EAAE,EAClB,CAEA,SAASI,GAAmBF,GAC1B,GAAyB,IAArBA,EAAUvmB,OACZ,OAAO,KAKT,IAFA,IAAIynB,EAAM,GAEDtrB,EAAI,EAAGA,EAAIoqB,EAAUvmB,SAAU7D,EACtCsrB,EAAIxiB,KAAKshB,EAAUpqB,GAAG,GAAIoqB,EAAUpqB,GAAG,IAGzCsrB,EAAIC,KAAKL,IACT,IAAItB,EAAM0B,EAAIA,EAAIznB,QAAU,GACxB2nB,EAAgB,GAChBC,EAAiB,GACjBC,EAAkB,GAEtB,IAAS1rB,EAAI,EAAGA,EAAIoqB,EAAUvmB,SAAU7D,EAAG,CACzC,IAAI2rB,EAAIvB,EAAUpqB,GAEd2rB,EAAE,GAAK/B,EACT4B,EAAc1iB,KAAK6iB,GACV/B,EAAM+B,EAAE,GACjBF,EAAe3iB,KAAK6iB,GAEpBD,EAAgB5iB,KAAK6iB,EAEzB,CAGA,IAAI9B,EAAa6B,EACb5B,EAAc4B,EAAgBE,QAGlC,OAFA/B,EAAW0B,KAAKJ,IAChBrB,EAAYyB,KAAKF,IACV,IAAI1B,GAAiBC,EAAKU,GAAmBkB,GAAgBlB,GAAmBmB,GAAiB5B,EAAYC,EACtH,CAGA,SAAS+B,GAAalzB,GACpB0D,KAAK1D,KAAOA,CACd,CAhTAqxB,GAAMI,UAAY,SAAU0B,GAW1B,OAVAA,EAAOhjB,KAAKC,MAAM+iB,EAAQzvB,KAAKwtB,YAE3BxtB,KAAKsZ,MACPtZ,KAAKsZ,KAAKyU,UAAU0B,GAGlBzvB,KAAKwlB,OACPxlB,KAAKwlB,MAAMuI,UAAU0B,GAGhBA,CACT,EAEA9B,GAAM+B,OAAS,SAAUnqB,GACvB,IAAIoqB,EAAS3vB,KAAK0tB,MAAQ1tB,KAAKwtB,WAAWhmB,OAG1C,GAFAxH,KAAK0tB,OAAS,EAEVnoB,EAAS,GAAKvF,KAAKutB,IACjBvtB,KAAKsZ,KACH,GAAKtZ,KAAKsZ,KAAKoU,MAAQ,GAAK,GAAKiC,EAAS,GAC5CzB,GAAoBluB,KAAMuF,GAE1BvF,KAAKsZ,KAAKoW,OAAOnqB,GAGnBvF,KAAKsZ,KAAO2U,GAAmB,CAAC1oB,SAE7B,GAAIA,EAAS,GAAKvF,KAAKutB,IACxBvtB,KAAKwlB,MACH,GAAKxlB,KAAKwlB,MAAMkI,MAAQ,GAAK,GAAKiC,EAAS,GAC7CzB,GAAoBluB,KAAMuF,GAE1BvF,KAAKwlB,MAAMkK,OAAOnqB,GAGpBvF,KAAKwlB,MAAQyI,GAAmB,CAAC1oB,QAE9B,CACL,IAAI6mB,EAAIwD,GAAO3D,GAAGjsB,KAAKwtB,WAAYjoB,EAAUupB,IACzCL,EAAImB,GAAO3D,GAAGjsB,KAAKytB,YAAaloB,EAAUypB,IAC9ChvB,KAAKwtB,WAAW5O,OAAOwN,EAAG,EAAG7mB,GAC7BvF,KAAKytB,YAAY7O,OAAO6P,EAAG,EAAGlpB,EAChC,CACF,EAEAooB,GAAMkC,OAAS,SAAUtqB,GACvB,IAAIoqB,EAAS3vB,KAAK0tB,MAAQ1tB,KAAKwtB,WAE/B,GAAIjoB,EAAS,GAAKvF,KAAKutB,IACrB,OAAKvtB,KAAKsZ,KAMN,GAFKtZ,KAAKwlB,MAAQxlB,KAAKwlB,MAAMkI,MAAQ,GAE5B,GAAKiC,EAAS,GAClBxB,GAAuBnuB,KAAMuF,GA5G9B,KA+GJkpB,EAAIzuB,KAAKsZ,KAAKuW,OAAOtqB,KAGvBvF,KAAKsZ,KAAO,KACZtZ,KAAK0tB,OAAS,EApHN,QAsHCe,IACTzuB,KAAK0tB,OAAS,GAGTe,GA3HK,EA4HP,GAAIlpB,EAAS,GAAKvF,KAAKutB,IAC5B,OAAKvtB,KAAKwlB,MAMN,GAFKxlB,KAAKsZ,KAAOtZ,KAAKsZ,KAAKoU,MAAQ,GAE1B,GAAKiC,EAAS,GAClBxB,GAAuBnuB,KAAMuF,GAlI9B,KAqIJkpB,EAAIzuB,KAAKwlB,MAAMqK,OAAOtqB,KAGxBvF,KAAKwlB,MAAQ,KACbxlB,KAAK0tB,OAAS,EA1IN,QA4ICe,IACTzuB,KAAK0tB,OAAS,GAGTe,GAjJK,EAmJZ,GAAmB,IAAfzuB,KAAK0tB,MACP,OAAI1tB,KAAKwtB,WAAW,KAAOjoB,EAlJrB,EAFI,EA2JZ,GAA+B,IAA3BvF,KAAKwtB,WAAWhmB,QAAgBxH,KAAKwtB,WAAW,KAAOjoB,EAAU,CACnE,GAAIvF,KAAKsZ,MAAQtZ,KAAKwlB,MAAO,CAI3B,IAHA,IAAI2H,EAAIntB,KACJ8vB,EAAI9vB,KAAKsZ,KAENwW,EAAEtK,OACP2H,EAAI2C,EACJA,EAAIA,EAAEtK,MAGR,GAAI2H,IAAMntB,KACR8vB,EAAEtK,MAAQxlB,KAAKwlB,UACV,CACL,IAAI4G,EAAIpsB,KAAKsZ,KACTmV,EAAIzuB,KAAKwlB,MACb2H,EAAEO,OAASoC,EAAEpC,MACbP,EAAE3H,MAAQsK,EAAExW,KACZwW,EAAExW,KAAO8S,EACT0D,EAAEtK,MAAQiJ,CACZ,CAEAb,GAAK5tB,KAAM8vB,GACX9vB,KAAK0tB,OAAS1tB,KAAKsZ,KAAOtZ,KAAKsZ,KAAKoU,MAAQ,IAAM1tB,KAAKwlB,MAAQxlB,KAAKwlB,MAAMkI,MAAQ,GAAK1tB,KAAKwtB,WAAWhmB,MACzG,MAAWxH,KAAKsZ,KACdsU,GAAK5tB,KAAMA,KAAKsZ,MAEhBsU,GAAK5tB,KAAMA,KAAKwlB,OAGlB,OAvLQ,CAwLV,CAEA,IAAS4G,EAAIwD,GAAO3D,GAAGjsB,KAAKwtB,WAAYjoB,EAAUupB,IAAe1C,EAAIpsB,KAAKwtB,WAAWhmB,QAC/ExH,KAAKwtB,WAAWpB,GAAG,KAAO7mB,EAAS,KADsD6mB,EAK7F,GAAIpsB,KAAKwtB,WAAWpB,KAAO7mB,EAAU,CACnCvF,KAAK0tB,OAAS,EACd1tB,KAAKwtB,WAAW5O,OAAOwN,EAAG,GAE1B,IAASqC,EAAImB,GAAO3D,GAAGjsB,KAAKytB,YAAaloB,EAAUypB,IAAaP,EAAIzuB,KAAKytB,YAAYjmB,QAC/ExH,KAAKytB,YAAYgB,GAAG,KAAOlpB,EAAS,KADqDkpB,EAGtF,GAAIzuB,KAAKytB,YAAYgB,KAAOlpB,EAEjC,OADAvF,KAAKytB,YAAY7O,OAAO6P,EAAG,GAvMzB,CA2MR,CAGF,OA/MY,CAiNhB,EAgCAd,GAAMoC,WAAa,SAAUpK,EAAG6I,GAC9B,GAAI7I,EAAI3lB,KAAKutB,IAAK,CAChB,GAAIvtB,KAAKsZ,KAGP,GAFImV,EAAIzuB,KAAKsZ,KAAKyW,WAAWpK,EAAG6I,GAG9B,OAAOC,EAIX,OAAOJ,GAAgBruB,KAAKwtB,WAAY7H,EAAG6I,EAC7C,CAAO,GAAI7I,EAAI3lB,KAAKutB,IAAK,CAErB,IAAIkB,EADN,GAAIzuB,KAAKwlB,MAGP,GAFIiJ,EAAIzuB,KAAKwlB,MAAMuK,WAAWpK,EAAG6I,GAG/B,OAAOC,EAIX,OAAOC,GAAiB1uB,KAAKytB,YAAa9H,EAAG6I,EAC/C,CACE,OAAOI,GAAY5uB,KAAKwtB,WAAYgB,EAExC,EAEAb,GAAMqC,cAAgB,SAAUrB,EAAIJ,EAAIC,GAEpC,IAQIC,EATN,GAAIE,EAAK3uB,KAAKutB,KAAOvtB,KAAKsZ,OACpBmV,EAAIzuB,KAAKsZ,KAAK0W,cAAcrB,EAAIJ,EAAIC,IAGtC,OAAOC,EAIX,GAAIF,EAAKvuB,KAAKutB,KAAOvtB,KAAKwlB,QACpBiJ,EAAIzuB,KAAKwlB,MAAMwK,cAAcrB,EAAIJ,EAAIC,IAGvC,OAAOC,EAIX,OAAIF,EAAKvuB,KAAKutB,IACLc,GAAgBruB,KAAKwtB,WAAYe,EAAIC,GACnCG,EAAK3uB,KAAKutB,IACZmB,GAAiB1uB,KAAKytB,YAAakB,EAAIH,GAEvCI,GAAY5uB,KAAKwtB,WAAYgB,EAExC,EAoEA,IAAIyB,GAAST,GAAavuB,UAE1BgvB,GAAOP,OAAS,SAAUnqB,GACpBvF,KAAK1D,KACP0D,KAAK1D,KAAKozB,OAAOnqB,GAEjBvF,KAAK1D,KAAO,IAAIgxB,GAAiB/nB,EAAS,GAAI,KAAM,KAAM,CAACA,GAAW,CAACA,GAE3E,EAEA0qB,GAAOJ,OAAS,SAAUtqB,GACxB,GAAIvF,KAAK1D,KAAM,CACb,IAAImyB,EAAIzuB,KAAK1D,KAAKuzB,OAAOtqB,GAMzB,OAvXQ,IAmXJkpB,IACFzuB,KAAK1D,KAAO,MAtXF,IAyXLmyB,CACT,CAEA,OAAO,CACT,EAEAwB,GAAOF,WAAa,SAAU5C,EAAGqB,GAC/B,GAAIxuB,KAAK1D,KACP,OAAO0D,KAAK1D,KAAKyzB,WAAW5C,EAAGqB,EAEnC,EAEAyB,GAAOD,cAAgB,SAAUrB,EAAIJ,EAAIC,GACvC,GAAIG,GAAMJ,GAAMvuB,KAAK1D,KACnB,OAAO0D,KAAK1D,KAAK0zB,cAAcrB,EAAIJ,EAAIC,EAE3C,EAEA3mB,OAAOoF,eAAegjB,GAAQ,QAAS,CACrCtM,IAAK,WACH,OAAI3jB,KAAK1D,KACA0D,KAAK1D,KAAKoxB,MAGZ,CACT,IAEF7lB,OAAOoF,eAAegjB,GAAQ,YAAa,CACzCtM,IAAK,WACH,OAAI3jB,KAAK1D,KACA0D,KAAK1D,KAAKyxB,UAAU,IAGtB,EACT,IC3ZF,ICDI7jB,GAAQC,GDCR+lB,GAEJ,WACE,SAASA,ID0ZI,IAAuBnC,GCzZlChrB,EAAAA,EAAAA,GAAgB/C,KAAMkwB,IAEtBzyB,EAAAA,EAAAA,GAAgBuC,KAAM,iBAAkB,CAAC,IAEzCvC,EAAAA,EAAAA,GAAgBuC,KAAM,gBDsZnB+tB,GAAkC,IAArBA,EAAUvmB,OAIrB,IAAIgoB,GAAavB,GAAmBF,IAHlC,IAAIyB,GAAa,QCrZxB/xB,EAAAA,EAAAA,GAAgBuC,KAAM,WAAY,CAAC,EACrC,CAuEA,OArEAmD,EAAAA,EAAAA,GAAa+sB,EAAe,CAAC,CAC3B9sB,IAAK,sBACL3D,MAAO,SAA6B0C,EAAW+M,EAAaihB,GAC1D,IAAIC,EAAsBjuB,EAAYnC,KAAK0tB,MAC3C,OAAO1tB,KAAKqwB,kBAAoB3rB,KAAKmd,KAAKuO,EAAsBlhB,GAAeihB,CACjF,GAEC,CACD/sB,IAAK,QACL3D,MAAO,SAAe+Q,EAAWkH,EAAc4Y,GAC7C,IAAIjjB,EAAQrN,KAEZA,KAAKuwB,cAAcP,cAAcxf,EAAWA,EAAYkH,GAAc,SAAU9a,GAC9E,IAAIyG,GAAQmtB,EAAAA,GAAAA,GAAe5zB,EAAM,GAC7B8M,EAAMrG,EAAM,GAEZE,GADIF,EAAM,GACFA,EAAM,IAElB,OAAOitB,EAAe/sB,EAAO8J,EAAMojB,SAASltB,GAAQmG,EACtD,GACF,GACC,CACDtG,IAAK,cACL3D,MAAO,SAAqB8D,EAAO+V,EAAM5P,EAAK1M,GAC5CgD,KAAKuwB,cAAcb,OAAO,CAAChmB,EAAKA,EAAM1M,EAAQuG,IAE9CvD,KAAKywB,SAASltB,GAAS+V,EACvB,IAAIoX,EAAgB1wB,KAAK2wB,eACrBC,EAAeF,EAAcpX,GAG/BoX,EAAcpX,QADKnZ,IAAjBywB,EACoBlnB,EAAM1M,EAEN0H,KAAKC,IAAIisB,EAAclnB,EAAM1M,EAEvD,GACC,CACDoG,IAAK,QACLugB,IAAK,WACH,OAAO3jB,KAAKuwB,cAAc7C,KAC5B,GACC,CACDtqB,IAAK,qBACLugB,IAAK,WACH,IAAI+M,EAAgB1wB,KAAK2wB,eACrB1xB,EAAO,EAEX,IAAK,IAAI0E,KAAK+sB,EAAe,CAC3B,IAAI1zB,EAAS0zB,EAAc/sB,GAC3B1E,EAAgB,IAATA,EAAajC,EAAS0H,KAAKE,IAAI3F,EAAMjC,EAC9C,CAEA,OAAOiC,CACT,GACC,CACDmE,IAAK,oBACLugB,IAAK,WACH,IAAI+M,EAAgB1wB,KAAK2wB,eACrB1xB,EAAO,EAEX,IAAK,IAAI0E,KAAK+sB,EAAe,CAC3B,IAAI1zB,EAAS0zB,EAAc/sB,GAC3B1E,EAAOyF,KAAKC,IAAI1F,EAAMjC,EACxB,CAEA,OAAOiC,CACT,KAGKixB,CACT,CAjFA,GCDA,SAASlkB,GAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,GAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,GAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,GAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAOrgB,IAoCIikB,IAAW1mB,GAAQD,GAEvB,SAAUkD,GAGR,SAASyjB,IACP,IAAIlX,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAM6wB,GAEtB,IAAK,IAAIjX,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAiEzB,OA9DAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBsjB,IAAU7uB,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAElIpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAAS,CACtDK,aAAa,EACb8C,UAAW,KAGb/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,mCAA+B,IAE9E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,gCAAiC,OAEhF5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,+BAAgC,OAE/E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iBAAkB,IAAI6iB,KAErEzyB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAe,OAE9D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAuB,OAEtE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAc,OAE7D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,qBAAsB,OAErE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,qCAAqC,WAClFA,EAAMjN,SAAS,CACbsN,aAAa,GAEjB,KAEAjQ,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,SAAUlP,GACpFkP,EAAMyB,oBAAsB3Q,CAC9B,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,SAAU0B,GACpE,IAAI/R,EAASqQ,EAAMlR,MAAMa,OACrB8zB,EAAiB/hB,EAAMgiB,cAAcvgB,UAKrCA,EAAY9L,KAAKE,IAAIF,KAAKC,IAAI,EAAG0I,EAAM2jB,2BAA6Bh0B,GAAS8zB,GAG7EA,IAAmBtgB,IAKvBnD,EAAM4jB,4BAMF5jB,EAAMtN,MAAMyQ,YAAcA,GAC5BnD,EAAMjN,SAAS,CACbsN,aAAa,EACb8C,UAAWA,IAGjB,IAEOnD,CACT,CAqQA,OAjVAyD,EAAAA,EAAAA,GAAU+f,EAASzjB,IA8EnBjK,EAAAA,EAAAA,GAAa0tB,EAAS,CAAC,CACrBztB,IAAK,qBACL3D,MAAO,WACLO,KAAKkxB,eAAiB,IAAIhB,GAC1BlwB,KAAK4S,aACP,GAEC,CACDxP,IAAK,gCACL3D,MAAO,SAAuC7C,GAC5C,IAAI2G,EAAQ3G,EAAKwU,SAE0B,OAAvCpR,KAAKmxB,+BACPnxB,KAAKmxB,8BAAgC5tB,EACrCvD,KAAKoxB,6BAA+B7tB,IAEpCvD,KAAKmxB,8BAAgCzsB,KAAKE,IAAI5E,KAAKmxB,8BAA+B5tB,GAClFvD,KAAKoxB,6BAA+B1sB,KAAKC,IAAI3E,KAAKoxB,6BAA8B7tB,GAEpF,GACC,CACDH,IAAK,yBACL3D,MAAO,WACL,IAAIiX,EAAY1W,KAAKkxB,eAAexD,MAAQ,EAC5C1tB,KAAKkxB,eAAiB,IAAIhB,GAE1BlwB,KAAKqxB,uBAAuB,EAAG3a,GAE/B1W,KAAK4S,aACP,GACC,CACDxP,IAAK,oBACL3D,MAAO,WACLO,KAAKsxB,2BAELtxB,KAAKuxB,0BAELvxB,KAAKwxB,gCACP,GACC,CACDpuB,IAAK,qBACL3D,MAAO,SAA4BkB,EAAWJ,GAC5CP,KAAKsxB,2BAELtxB,KAAKuxB,0BAELvxB,KAAKwxB,iCAEDxxB,KAAK7D,MAAMqU,YAAc7P,EAAU6P,WACrCxQ,KAAKixB,2BAET,GACC,CACD7tB,IAAK,uBACL3D,MAAO,WACDO,KAAKyxB,6BACPnmB,EAAuBtL,KAAKyxB,4BAEhC,GACC,CACDruB,IAAK,SACL3D,MAAO,WACL,IA2BIiX,EA3BAnD,EAASvT,KAET2R,EAAc3R,KAAK7D,MACnByV,EAAaD,EAAYC,WACzBzP,EAAYwP,EAAYxP,UACxBuvB,EAAoB/f,EAAY+f,kBAChChc,EAAe/D,EAAY+D,aAC3BpX,EAAYqT,EAAYrT,UACxBtB,EAAS2U,EAAY3U,OACrBkO,EAAKyG,EAAYzG,GACjBwX,EAAY/Q,EAAY+Q,UACxBiP,EAAmBhgB,EAAYggB,iBAC/B1d,EAAOtC,EAAYsC,KACnBxK,EAAQkI,EAAYlI,MACpByK,EAAWvC,EAAYuC,SACvBvK,EAAQgI,EAAYhI,MACpBioB,EAAejgB,EAAYigB,aAC3Bne,EAAczT,KAAKD,MACnB2N,EAAc+F,EAAY/F,YAC1B8C,EAAYiD,EAAYjD,UACxBnS,EAAW,GAEXwzB,EAAsB7xB,KAAKgxB,2BAE3Bc,EAAqB9xB,KAAKkxB,eAAeY,mBACzCC,EAAoB/xB,KAAKkxB,eAAexD,MACxCjX,EAAa,EA0BjB,GAvBAzW,KAAKkxB,eAAec,MAAMttB,KAAKC,IAAI,EAAG6L,EAAYmhB,GAAmB30B,EAA4B,EAAnB20B,GAAsB,SAAUpuB,EAAO+V,EAAM5P,GACzH,IAAIuoB,EAEqB,qBAAdvb,GACTD,EAAalT,EACbmT,EAAYnT,IAEZkT,EAAa/R,KAAKE,IAAI6R,EAAYlT,GAClCmT,EAAYhS,KAAKC,IAAI+R,EAAWnT,IAGlClF,EAASoO,KAAKiJ,EAAa,CACzBnS,MAAOA,EACPmK,YAAaA,EACbtK,IAAKsf,EAAUnf,GACf2T,OAAQ3D,EACR9J,OAAQwoB,EAAS,CACfj1B,OAAQ00B,EAAkB7Q,UAAUtd,KACnC9F,EAAAA,EAAAA,GAAgBw0B,EAAyB,QAAjBL,EAAyB,OAAS,QAAStY,IAAO7b,EAAAA,EAAAA,GAAgBw0B,EAAQ,WAAY,aAAax0B,EAAAA,EAAAA,GAAgBw0B,EAAQ,MAAOvoB,IAAMjM,EAAAA,EAAAA,GAAgBw0B,EAAQ,QAASP,EAAkB5Q,SAASvd,IAAS0uB,KAE5O,IAGIH,EAAqBthB,EAAYxT,EAAS20B,GAAoBI,EAAoB5vB,EAGpF,IAFA,IAAI+vB,EAAYxtB,KAAKE,IAAIzC,EAAY4vB,EAAmBrtB,KAAKmd,MAAMrR,EAAYxT,EAAS20B,EAAmBG,GAAsBJ,EAAkB1S,cAAgBrV,EAAQ+nB,EAAkBzS,eAEpL2L,EAASmH,EAAmBnH,EAASmH,EAAoBG,EAAWtH,IAC3ElU,EAAYkU,EACZvsB,EAASoO,KAAKiJ,EAAa,CACzBnS,MAAOqnB,EACPld,YAAaA,EACbtK,IAAKsf,EAAUkI,GACf1T,OAAQlX,KACRyJ,MAAO,CACLE,MAAO+nB,EAAkB5Q,SAAS8J,OAQ1C,OAFA5qB,KAAKmyB,YAAc1b,EACnBzW,KAAKoyB,WAAa1b,EACXzY,EAAAA,cAAoB,MAAO,CAChCE,IAAK6B,KAAKsV,0BACV,aAActV,KAAK7D,MAAM,cACzBmC,WAAWqB,EAAAA,EAAAA,GAAK,4BAA6BrB,GAC7C4M,GAAIA,EACJqK,SAAUvV,KAAKwV,UACfvB,KAAMA,EACNxK,MAAOkD,GAAc,CACnB2H,UAAW,aACXC,UAAW,MACXvX,OAAQ4U,EAAa,OAAS5U,EAC9BiY,UAAW,SACXC,UAAW2c,EAAsB70B,EAAS,SAAW,OACrDP,SAAU,WACVkN,MAAOA,EACP6K,wBAAyB,QACzBC,WAAY,aACXhL,GACHyK,SAAUA,GACTjW,EAAAA,cAAoB,MAAO,CAC5BK,UAAW,kDACXmL,MAAO,CACLE,MAAO,OACP3M,OAAQ60B,EACRpc,SAAU,OACVxY,UAAW40B,EACXjoB,SAAU,SACV5L,cAAe0P,EAAc,OAAS,GACtCjR,SAAU,aAEX4B,GACL,GACC,CACD+E,IAAK,2BACL3D,MAAO,WACL,GAAkD,kBAAvCO,KAAKmxB,8BAA4C,CAC1D,IAAI1a,EAAazW,KAAKmxB,8BAClBza,EAAY1W,KAAKoxB,6BACrBpxB,KAAKmxB,8BAAgC,KACrCnxB,KAAKoxB,6BAA+B,KAEpCpxB,KAAKqxB,uBAAuB5a,EAAYC,GAExC1W,KAAK4S,aACP,CACF,GACC,CACDxP,IAAK,4BACL3D,MAAO,WACL,IAAI2X,EAA6BpX,KAAK7D,MAAMib,2BAExCpX,KAAKyxB,6BACPnmB,EAAuBtL,KAAKyxB,6BAG9BzxB,KAAKyxB,4BAA8BjmB,EAAwBxL,KAAKqyB,kCAAmCjb,EACrG,GACC,CACDhU,IAAK,2BACL3D,MAAO,WACL,IAAI2S,EAAepS,KAAK7D,MACpBgG,EAAYiQ,EAAajQ,UACzBuvB,EAAoBtf,EAAasf,kBACjC/nB,EAAQyI,EAAazI,MACrB2oB,EAAuB5tB,KAAKC,IAAI,EAAGD,KAAKY,MAAMqE,EAAQ+nB,EAAkBzS,eAC5E,OAAOjf,KAAKkxB,eAAeW,oBAAoB1vB,EAAWmwB,EAAsBZ,EAAkB1S,cACpG,GACC,CACD5b,IAAK,0BACL3D,MAAO,WACL,IAAI8S,EAAevS,KAAK7D,MACpBa,EAASuV,EAAavV,OACtBuY,EAAWhD,EAAagD,SACxB/E,EAAYxQ,KAAKD,MAAMyQ,UAEvBxQ,KAAKuyB,oBAAsB/hB,IAC7B+E,EAAS,CACPmC,aAAc1a,EACd2a,aAAc3X,KAAKgxB,2BACnBxgB,UAAWA,IAEbxQ,KAAKuyB,kBAAoB/hB,EAE7B,GACC,CACDpN,IAAK,iCACL3D,MAAO,WACDO,KAAKwyB,sBAAwBxyB,KAAKmyB,aAAenyB,KAAKyyB,qBAAuBzyB,KAAKoyB,cAEpFM,EADsB1yB,KAAK7D,MAAMu2B,iBACjB,CACdjc,WAAYzW,KAAKmyB,YACjBzb,UAAW1W,KAAKoyB,aAElBpyB,KAAKwyB,oBAAsBxyB,KAAKmyB,YAChCnyB,KAAKyyB,mBAAqBzyB,KAAKoyB,WAEnC,GACC,CACDhvB,IAAK,yBACL3D,MAAO,SAAgCgX,EAAYC,GAKjD,IAJA,IAAI3D,EAAe/S,KAAK7D,MACpBu1B,EAAoB3e,EAAa2e,kBACjCiB,EAAiB5f,EAAa4f,eAEzB7H,EAAUrU,EAAYqU,GAAWpU,EAAWoU,IAAW,CAC9D,IAAI8H,EAAkBD,EAAe7H,GACjCxR,EAAOsZ,EAAgBtZ,KACvB5P,EAAMkpB,EAAgBlpB,IAE1B1J,KAAKkxB,eAAe2B,YAAY/H,EAASxR,EAAM5P,EAAKgoB,EAAkB7Q,UAAUiK,GAClF,CACF,IACE,CAAC,CACH1nB,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,YAA4BJ,IAAxBG,EAAUkQ,WAA2BjQ,EAAUiQ,YAAclQ,EAAUkQ,UAClE,CACL9C,aAAa,EACb8C,UAAWlQ,EAAUkQ,WAIlB,IACT,KAGKqgB,CACT,CAnVA,CAmVE5yB,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,GAAQ,YAAqD,MAoCjGC,IAmBJ,SAAS2oB,KAAQ,EAjBjBr1B,EAAAA,EAAAA,GAAgBozB,GAAS,eAAgB,CACvCjf,YAAY,EACZ8Q,UAWF,SAAkBjjB,GAChB,OAAOA,CACT,EAZEizB,gBAAiBI,GACjBvd,SAAUud,GACVnB,iBAAkB,GAClB1d,KAAM,OACNmD,2BAhaiD,IAiajD3N,MAvagB,CAAC,EAwajByK,SAAU,EACV0d,aAAc,SAehB7wB,EAAAA,EAAAA,UAAS8vB,ICzcT,ICMIkC,GAEJ,WACE,SAASA,IACP,IAAI1lB,EAAQrN,KAER+E,EAASwC,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAElFxE,EAAAA,EAAAA,GAAgB/C,KAAM+yB,IAEtBt1B,EAAAA,EAAAA,GAAgBuC,KAAM,0BAAsB,IAE5CvC,EAAAA,EAAAA,GAAgBuC,KAAM,0BAAsB,IAE5CvC,EAAAA,EAAAA,GAAgBuC,KAAM,uBAAmB,IAEzCvC,EAAAA,EAAAA,GAAgBuC,KAAM,eAAe,SAAUpD,GAC7C,IAAI2G,EAAQ3G,EAAK2G,MAEjB8J,EAAM2lB,mBAAmB5jB,YAAY,CACnC7L,MAAOA,EAAQ8J,EAAM4lB,oBAEzB,KAEAx1B,EAAAA,EAAAA,GAAgBuC,KAAM,aAAa,SAAUqD,GAC3C,IAAIE,EAAQF,EAAME,MAElB8J,EAAM2lB,mBAAmBxjB,UAAU,CACjCjM,MAAOA,EAAQ8J,EAAM6lB,iBAEzB,IAEA,IAAIxB,EAAoB3sB,EAAO2sB,kBAC3ByB,EAAwBpuB,EAAOquB,kBAC/BA,OAA8C,IAA1BD,EAAmC,EAAIA,EAC3DE,EAAwBtuB,EAAOuuB,eAC/BA,OAA2C,IAA1BD,EAAmC,EAAIA,EAC5DrzB,KAAKgzB,mBAAqBtB,EAC1B1xB,KAAKizB,mBAAqBG,EAC1BpzB,KAAKkzB,gBAAkBI,CACzB,CAyDA,OAvDAnwB,EAAAA,EAAAA,GAAa4vB,EAA4B,CAAC,CACxC3vB,IAAK,QACL3D,MAAO,SAAe2R,EAAUF,GAC9BlR,KAAKgzB,mBAAmBO,MAAMniB,EAAWpR,KAAKkzB,gBAAiBhiB,EAAclR,KAAKizB,mBACpF,GACC,CACD7vB,IAAK,WACL3D,MAAO,WACLO,KAAKgzB,mBAAmBQ,UAC1B,GACC,CACDpwB,IAAK,iBACL3D,MAAO,WACL,OAAOO,KAAKgzB,mBAAmBlc,gBACjC,GACC,CACD1T,IAAK,gBACL3D,MAAO,WACL,OAAOO,KAAKgzB,mBAAmBhc,eACjC,GACC,CACD5T,IAAK,YACL3D,MAAO,SAAmB2R,GACxB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EACtF,OAAOvH,KAAKgzB,mBAAmBnS,UAAUzP,EAAWpR,KAAKkzB,gBAAiBhiB,EAAclR,KAAKizB,mBAC/F,GACC,CACD7vB,IAAK,WACL3D,MAAO,SAAkB2R,GACvB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EACtF,OAAOvH,KAAKgzB,mBAAmBlS,SAAS1P,EAAWpR,KAAKkzB,gBAAiBhiB,EAAclR,KAAKizB,mBAC9F,GACC,CACD7vB,IAAK,MACL3D,MAAO,SAAa2R,GAClB,IAAIF,EAAc3J,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EACtF,OAAOvH,KAAKgzB,mBAAmBjc,IAAI3F,EAAWpR,KAAKkzB,gBAAiBhiB,EAAclR,KAAKizB,mBACzF,GACC,CACD7vB,IAAK,MACL3D,MAAO,SAAa2R,EAAUF,EAAavH,EAAO3M,GAChDgD,KAAKgzB,mBAAmBjS,IAAI3P,EAAWpR,KAAKkzB,gBAAiBhiB,EAAclR,KAAKizB,mBAAoBtpB,EAAO3M,EAC7G,GACC,CACDoG,IAAK,gBACLugB,IAAK,WACH,OAAO3jB,KAAKgzB,mBAAmBhU,aACjC,GACC,CACD5b,IAAK,eACLugB,IAAK,WACH,OAAO3jB,KAAKgzB,mBAAmB/T,YACjC,KAGK8T,CACT,CAhGA,GCAA,SAAS/mB,GAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,GAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,GAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,GAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAOrgB,IASI6mB,GAEJ,SAAUrmB,GAGR,SAASqmB,EAAUt3B,EAAOqrB,GACxB,IAAIna,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAMyzB,GAEtBpmB,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBkmB,GAAWzxB,KAAKhC,KAAM7D,EAAOqrB,KAEtF/pB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAAS,CACtDkD,WAAY,EACZC,UAAW,EACXnH,cAAe,EACfqqB,yBAAyB,EACzBC,uBAAuB,KAGzBl2B,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iCAAkC,OAEjF5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,8BAA+B,OAE9E5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAsB,SAAUlP,GAC7EkP,EAAMumB,gBAAkBz1B,CAC1B,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,uBAAuB,SAAUlP,GAC9EkP,EAAMwmB,iBAAmB11B,CAC3B,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,+BAA+B,SAAUzQ,GACtF,IAAIwU,EAAWxU,EAAKwU,SAChB0iB,GAAO7tB,EAAAA,EAAAA,GAAyBrJ,EAAM,CAAC,aAEvC+U,EAActE,EAAMlR,MACpBuZ,EAAe/D,EAAY+D,aAC3Bqe,EAAgBpiB,EAAYoiB,cAGhC,OAAI3iB,IAFWO,EAAYpC,SAECwkB,EACnB91B,EAAAA,cAAoB,MAAO,CAChCmF,IAAK0wB,EAAK1wB,IACVqG,MAAOkD,GAAc,CAAC,EAAGmnB,EAAKrqB,MAAO,CACnCzM,OAtDgB,OA0Db0Y,EAAa/I,GAAc,CAAC,EAAGmnB,EAAM,CAC1C5c,QAAQ1J,EAAAA,EAAAA,GAAuBH,GAC/B+D,SAAUA,EAAW2iB,IAG3B,KAEAt2B,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,gCAAgC,SAAUhK,GACvF,IAAI6N,EAAc7N,EAAM6N,YACpBE,EAAW/N,EAAM+N,SACjB0iB,GAAO7tB,EAAAA,EAAAA,GAAyB5C,EAAO,CAAC,cAAe,aAEvD+O,EAAe/E,EAAMlR,MACrBuZ,EAAetD,EAAasD,aAC5Bse,EAAmB5hB,EAAa4hB,iBAChCD,EAAgB3hB,EAAa2hB,cACjC,OAAOre,EAAa/I,GAAc,CAAC,EAAGmnB,EAAM,CAC1C5iB,YAAaA,EAAc8iB,EAC3B9c,QAAQ1J,EAAAA,EAAAA,GAAuBH,GAC/B+D,SAAUA,EAAW2iB,IAEzB,KAEAt2B,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,SAAUtJ,GACpF,IAAImN,EAAcnN,EAAMmN,YACpB4iB,GAAO7tB,EAAAA,EAAAA,GAAyBlC,EAAO,CAAC,gBAExCwO,EAAelF,EAAMlR,MACrBuZ,EAAenD,EAAamD,aAC5BxG,EAAcqD,EAAarD,YAC3B8kB,EAAmBzhB,EAAayhB,iBAEpC,OAAI9iB,IAAgBhC,EAAc8kB,EACzB/1B,EAAAA,cAAoB,MAAO,CAChCmF,IAAK0wB,EAAK1wB,IACVqG,MAAOkD,GAAc,CAAC,EAAGmnB,EAAKrqB,MAAO,CACnCE,MA9FgB,OAkGb+L,EAAa/I,GAAc,CAAC,EAAGmnB,EAAM,CAC1C5iB,YAAaA,EAAc8iB,EAC3B9c,QAAQ1J,EAAAA,EAAAA,GAAuBH,KAGrC,KAEA5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,yBAAyB,SAAUtG,GAChF,IAAIxD,EAAQwD,EAAMxD,MACdwP,EAAe1F,EAAMlR,MACrB+S,EAAc6D,EAAa7D,YAC3B8kB,EAAmBjhB,EAAaihB,iBAChC5kB,EAAc2D,EAAa3D,YAC3BqE,EAAcpG,EAAMtN,MACpBsJ,EAAgBoK,EAAYpK,cAMhC,OAL8BoK,EAAYigB,yBAKXnwB,IAAU2L,EAAc8kB,EAC9C3qB,EAGqB,oBAAhB+F,EAA6BA,EAAY,CACrD7L,MAAOA,EAAQywB,IACZ5kB,CACP,KAEA3R,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,SAAU4mB,GACpE,IAAI1jB,EAAa0jB,EAAW1jB,WACxBC,EAAYyjB,EAAWzjB,UAE3BnD,EAAMjN,SAAS,CACbmQ,WAAYA,EACZC,UAAWA,IAGb,IAAI+E,EAAWlI,EAAMlR,MAAMoZ,SAEvBA,GACFA,EAAS0e,EAEb,KAEAx2B,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,8BAA8B,SAAUnG,GACrF,IAAI8Q,EAAa9Q,EAAM8Q,WACnB/Y,EAAOiI,EAAMjI,KACbgZ,EAAW/Q,EAAM+Q,SACjB9D,EAAe9G,EAAMtN,MACrB2zB,EAA0Bvf,EAAauf,wBACvCC,EAAwBxf,EAAawf,sBAEzC,GAAI3b,IAAe0b,GAA2Bzb,IAAa0b,EAAuB,CAChFtmB,EAAMjN,SAAS,CACbiJ,cAAepK,EACfy0B,wBAAyB1b,EACzB2b,sBAAuB1b,IAGzB,IAAIF,EAA4B1K,EAAMlR,MAAM4b,0BAEH,oBAA9BA,GACTA,EAA0B,CACxBC,WAAYA,EACZ/Y,KAAMA,EACNgZ,SAAUA,GAGhB,CACF,KAEAxa,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,iBAAiB,SAAU4mB,GACxE,IAAI1jB,EAAa0jB,EAAW1jB,WAE5BlD,EAAMmI,UAAU,CACdjF,WAAYA,EACZC,UAAWnD,EAAMtN,MAAMyQ,WAE3B,KAEA/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,gBAAgB,SAAU4mB,GACvE,IAAIzjB,EAAYyjB,EAAWzjB,UAE3BnD,EAAMmI,UAAU,CACdhF,UAAWA,EACXD,WAAYlD,EAAMtN,MAAMwQ,YAE5B,KAEA9S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,wBAAwB,SAAUlG,GAC/E,IAAI5D,EAAQ4D,EAAM5D,MACdiQ,EAAenG,EAAMlR,MACrB43B,EAAgBvgB,EAAaugB,cAC7BxkB,EAAWiE,EAAajE,SACxBC,EAAYgE,EAAahE,UACzB2V,EAAe9X,EAAMtN,MACrBsJ,EAAgB8b,EAAa9b,cAMjC,OAL4B8b,EAAawO,uBAKZpwB,IAAUgM,EAAWwkB,EACzC1qB,EAGmB,oBAAdmG,EAA2BA,EAAU,CACjDjM,MAAOA,EAAQwwB,IACZvkB,CACP,KAEA/R,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,mBAAmB,SAAUlP,GAC1EkP,EAAM6mB,aAAe/1B,CACvB,KAEAV,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,oBAAoB,SAAUlP,GAC3EkP,EAAM8mB,cAAgBh2B,CACxB,IAEA,IAAIyX,EAA2BzZ,EAAMyZ,yBACjCwe,EAAoBj4B,EAAM63B,iBAC1BK,EAAiBl4B,EAAM43B,cAsB3B,OApBA1mB,EAAMinB,6BAA4B,GAE9B1e,IACFvI,EAAMknB,wCAA0CF,EAAiB,EAAI,IAAItB,GAA2B,CAClGrB,kBAAmB9b,EACnBwd,kBAAmB,EACnBE,eAAgBe,IACbze,EACLvI,EAAMmnB,yCAA2CJ,EAAoB,GAAKC,EAAiB,EAAI,IAAItB,GAA2B,CAC5HrB,kBAAmB9b,EACnBwd,kBAAmBgB,EACnBd,eAAgBe,IACbze,EACLvI,EAAMonB,sCAAwCL,EAAoB,EAAI,IAAIrB,GAA2B,CACnGrB,kBAAmB9b,EACnBwd,kBAAmBgB,EACnBd,eAAgB,IACb1d,GAGAvI,CACT,CAkgBA,OAzuBAyD,EAAAA,EAAAA,GAAU2iB,EAAWrmB,IAyOrBjK,EAAAA,EAAAA,GAAaswB,EAAW,CAAC,CACvBrwB,IAAK,mBACL3D,MAAO,WACLO,KAAK4zB,iBAAmB5zB,KAAK4zB,gBAAgBhhB,cAC7C5S,KAAK6zB,kBAAoB7zB,KAAK6zB,iBAAiBjhB,cAC/C5S,KAAKk0B,cAAgBl0B,KAAKk0B,aAAathB,cACvC5S,KAAKm0B,eAAiBn0B,KAAKm0B,cAAcvhB,aAC3C,GAGC,CACDxP,IAAK,gCACL3D,MAAO,WACL,IAAI2H,EAAQG,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC7EmtB,EAAoBttB,EAAM8J,YAC1BA,OAAoC,IAAtBwjB,EAA+B,EAAIA,EACjDC,EAAiBvtB,EAAMgK,SACvBA,OAA8B,IAAnBujB,EAA4B,EAAIA,EAE/C30B,KAAKkS,+BAAgF,kBAAxClS,KAAKkS,+BAA8CxN,KAAKE,IAAI5E,KAAKkS,+BAAgChB,GAAeA,EAC7JlR,KAAKmS,4BAA0E,kBAArCnS,KAAKmS,4BAA2CzN,KAAKE,IAAI5E,KAAKmS,4BAA6Bf,GAAYA,CACnJ,GAGC,CACDhO,IAAK,kBACL3D,MAAO,WACLO,KAAK4zB,iBAAmB5zB,KAAK4zB,gBAAgBnI,kBAC7CzrB,KAAK6zB,kBAAoB7zB,KAAK6zB,iBAAiBpI,kBAC/CzrB,KAAKk0B,cAAgBl0B,KAAKk0B,aAAazI,kBACvCzrB,KAAKm0B,eAAiBn0B,KAAKm0B,cAAc1I,iBAC3C,GAGC,CACDroB,IAAK,oBACL3D,MAAO,WACL,IAAIyY,EAAQ3Q,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC7EqtB,EAAoB1c,EAAMhH,YAC1BA,OAAoC,IAAtB0jB,EAA+B,EAAIA,EACjDC,EAAiB3c,EAAM9G,SACvBA,OAA8B,IAAnByjB,EAA4B,EAAIA,EAE3ClhB,EAAe3T,KAAK7D,MACpB63B,EAAmBrgB,EAAaqgB,iBAChCD,EAAgBpgB,EAAaogB,cAC7Be,EAAsBpwB,KAAKC,IAAI,EAAGuM,EAAc8iB,GAChDe,EAAmBrwB,KAAKC,IAAI,EAAGyM,EAAW2iB,GAC9C/zB,KAAK4zB,iBAAmB5zB,KAAK4zB,gBAAgBtc,kBAAkB,CAC7DpG,YAAaA,EACbE,SAAU2jB,IAEZ/0B,KAAK6zB,kBAAoB7zB,KAAK6zB,iBAAiBvc,kBAAkB,CAC/DpG,YAAa4jB,EACb1jB,SAAU2jB,IAEZ/0B,KAAKk0B,cAAgBl0B,KAAKk0B,aAAa5c,kBAAkB,CACvDpG,YAAaA,EACbE,SAAUA,IAEZpR,KAAKm0B,eAAiBn0B,KAAKm0B,cAAc7c,kBAAkB,CACzDpG,YAAa4jB,EACb1jB,SAAUA,IAEZpR,KAAKg1B,eAAiB,KACtBh1B,KAAKi1B,eAAiB,KAEtBj1B,KAAKs0B,6BAA4B,EACnC,GACC,CACDlxB,IAAK,oBACL3D,MAAO,WACL,IAAIy1B,EAAel1B,KAAK7D,MACpBoU,EAAa2kB,EAAa3kB,WAC1BC,EAAY0kB,EAAa1kB,UAE7B,GAAID,EAAa,GAAKC,EAAY,EAAG,CACnC,IAAIwB,EAAW,CAAC,EAEZzB,EAAa,IACfyB,EAASzB,WAAaA,GAGpBC,EAAY,IACdwB,EAASxB,UAAYA,GAGvBxQ,KAAKI,SAAS4R,EAChB,CAEAhS,KAAKiT,4BACP,GACC,CACD7P,IAAK,qBACL3D,MAAO,WACLO,KAAKiT,4BACP,GACC,CACD7P,IAAK,SACL3D,MAAO,WACL,IAAI01B,EAAen1B,KAAK7D,MACpBoZ,EAAW4f,EAAa5f,SACxB3H,EAAoBunB,EAAavnB,kBAGjCqC,GAF4BklB,EAAapd,0BACxBod,EAAa5kB,WACb4kB,EAAallB,gBAE9BE,GADgBglB,EAAa3kB,UACf2kB,EAAahlB,aAC3B2jB,GAAO7tB,EAAAA,EAAAA,GAAyBkvB,EAAc,CAAC,WAAY,oBAAqB,4BAA6B,aAAc,iBAAkB,YAAa,gBAO9J,GALAn1B,KAAKo1B,oBAKoB,IAArBp1B,KAAK7D,MAAMwN,OAAqC,IAAtB3J,KAAK7D,MAAMa,OACvC,OAAO,KAIT,IAAIq4B,EAAer1B,KAAKD,MACpBwQ,EAAa8kB,EAAa9kB,WAC1BC,EAAY6kB,EAAa7kB,UAC7B,OAAOvS,EAAAA,cAAoB,MAAO,CAChCwL,MAAOzJ,KAAKs1B,sBACXr3B,EAAAA,cAAoB,MAAO,CAC5BwL,MAAOzJ,KAAKu1B,oBACXv1B,KAAKw1B,mBAAmB1B,GAAO9zB,KAAKy1B,oBAAoB9oB,GAAc,CAAC,EAAGmnB,EAAM,CACjFve,SAAUA,EACVhF,WAAYA,MACRtS,EAAAA,cAAoB,MAAO,CAC/BwL,MAAOzJ,KAAK01B,uBACX11B,KAAK21B,sBAAsBhpB,GAAc,CAAC,EAAGmnB,EAAM,CACpDve,SAAUA,EACV/E,UAAWA,KACRxQ,KAAK41B,uBAAuBjpB,GAAc,CAAC,EAAGmnB,EAAM,CACvDve,SAAUA,EACV3H,kBAAmBA,EACnB2C,WAAYA,EACZN,eAAgBA,EAChBE,YAAaA,EACbK,UAAWA,MAEf,GACC,CACDpN,IAAK,uBACL3D,MAAO,SAA8BtD,GAKnC,OAJaA,EAAMa,OAECgD,KAAK61B,kBAAkB15B,EAG7C,GACC,CACDiH,IAAK,oBACL3D,MAAO,SAA2BtD,GAChC,IAAI63B,EAAmB73B,EAAM63B,iBACzB5kB,EAAcjT,EAAMiT,YAExB,GAA2B,MAAvBpP,KAAKg1B,eACP,GAA2B,oBAAhB5lB,EAA4B,CAGrC,IAFA,IAAI0mB,EAAgB,EAEXvyB,EAAQ,EAAGA,EAAQywB,EAAkBzwB,IAC5CuyB,GAAiB1mB,EAAY,CAC3B7L,MAAOA,IAIXvD,KAAKg1B,eAAiBc,CACxB,MACE91B,KAAKg1B,eAAiB5lB,EAAc4kB,EAIxC,OAAOh0B,KAAKg1B,cACd,GACC,CACD5xB,IAAK,qBACL3D,MAAO,SAA4BtD,GAKjC,OAJYA,EAAMwN,MAEE3J,KAAK+1B,kBAAkB55B,EAG7C,GACC,CACDiH,IAAK,oBACL3D,MAAO,SAA2BtD,GAChC,IAAI43B,EAAgB53B,EAAM43B,cACtBvkB,EAAYrT,EAAMqT,UAEtB,GAA2B,MAAvBxP,KAAKi1B,eACP,GAAyB,oBAAdzlB,EAA0B,CAGnC,IAFA,IAAIwmB,EAAgB,EAEXzyB,EAAQ,EAAGA,EAAQwwB,EAAexwB,IACzCyyB,GAAiBxmB,EAAU,CACzBjM,MAAOA,IAIXvD,KAAKi1B,eAAiBe,CACxB,MACEh2B,KAAKi1B,eAAiBzlB,EAAYukB,EAItC,OAAO/zB,KAAKi1B,cACd,GACC,CACD7xB,IAAK,6BACL3D,MAAO,WACL,GAAmD,kBAAxCO,KAAKkS,+BAA6C,CAC3D,IAAIhB,EAAclR,KAAKkS,+BACnBd,EAAWpR,KAAKmS,4BACpBnS,KAAKkS,+BAAiC,KACtClS,KAAKmS,4BAA8B,KACnCnS,KAAKsX,kBAAkB,CACrBpG,YAAaA,EACbE,SAAUA,IAEZpR,KAAK4S,aACP,CACF,GAMC,CACDxP,IAAK,8BACL3D,MAAO,SAAqCw2B,GAC1C,IAAIC,EAAel2B,KAAK7D,MACpBiT,EAAc8mB,EAAa9mB,YAC3B+mB,EAA0BD,EAAaC,wBACvCC,EAAuBF,EAAaE,qBACpCp5B,EAASk5B,EAAal5B,OACtBg3B,EAAmBkC,EAAalC,iBAChCD,EAAgBmC,EAAanC,cAC7BvkB,EAAY0mB,EAAa1mB,UACzB/F,EAAQysB,EAAazsB,MACrB4sB,EAAsBH,EAAaG,oBACnCC,EAAuBJ,EAAaI,qBACpCC,EAAmBL,EAAaK,iBAChCC,EAAoBN,EAAaM,kBACjC7sB,EAAQusB,EAAavsB,MACrB8sB,EAAaR,GAAYj5B,IAAWgD,KAAK02B,qBAAuB/sB,IAAU3J,KAAK22B,mBAC/EC,EAAiBX,GAAY7mB,IAAgBpP,KAAK62B,0BAA4B7C,IAAqBh0B,KAAK82B,8BACxGC,EAAgBd,GAAYlC,IAAkB/zB,KAAKg3B,4BAA8BxnB,IAAcxP,KAAKi3B,wBAEpGhB,GAAYQ,GAAchtB,IAAUzJ,KAAKk3B,sBAC3Cl3B,KAAKs1B,qBAAuB3oB,GAAc,CACxC3P,OAAQA,EACR4M,SAAU,UAEVD,MAAOA,GACNF,KAGDwsB,GAAYQ,GAAcM,KAC5B/2B,KAAKu1B,mBAAqB,CACxBv4B,OAAQgD,KAAK61B,kBAAkB71B,KAAK7D,OACpCM,SAAU,WACVkN,MAAOA,GAET3J,KAAK01B,sBAAwB,CAC3B14B,OAAQA,EAASgD,KAAK61B,kBAAkB71B,KAAK7D,OAC7CyN,SAAU,UAEVnN,SAAU,WACVkN,MAAOA,KAIPssB,GAAYI,IAAwBr2B,KAAKm3B,oCAC3Cn3B,KAAKo3B,qBAAuBzqB,GAAc,CACxC2M,KAAM,EACNrE,UAAW,SACXC,UAAWihB,EAA0B,OAAS,SAC9C15B,SAAU,YACT45B,KAGDJ,GAAYW,GAAkBN,IAAyBt2B,KAAKq3B,qCAC9Dr3B,KAAKs3B,sBAAwB3qB,GAAc,CACzC2M,KAAMtZ,KAAK+1B,kBAAkB/1B,KAAK7D,OAClCM,SAAU,YACT65B,KAGDL,GAAYM,IAAqBv2B,KAAKu3B,iCACxCv3B,KAAKw3B,kBAAoB7qB,GAAc,CACrC2M,KAAM,EACNrE,UAAW,SACXC,UAAW,SACXzY,SAAU,WACViN,IAAK,GACJ6sB,KAGDN,GAAYW,GAAkBJ,IAAsBx2B,KAAKy3B,kCAC3Dz3B,KAAK03B,mBAAqB/qB,GAAc,CACtC2M,KAAMtZ,KAAK+1B,kBAAkB/1B,KAAK7D,OAClC8Y,UAAWmhB,EAAuB,OAAS,SAC3ClhB,UAAW,SACXzY,SAAU,WACViN,IAAK,GACJ8sB,IAGLx2B,KAAK62B,yBAA2BznB,EAChCpP,KAAK82B,8BAAgC9C,EACrCh0B,KAAKg3B,2BAA6BjD,EAClC/zB,KAAK02B,oBAAsB15B,EAC3BgD,KAAKi3B,uBAAyBznB,EAC9BxP,KAAKk3B,mBAAqBztB,EAC1BzJ,KAAKm3B,iCAAmCd,EACxCr2B,KAAKq3B,kCAAoCf,EACzCt2B,KAAKu3B,8BAAgChB,EACrCv2B,KAAKy3B,+BAAiCjB,EACtCx2B,KAAK22B,mBAAqBhtB,CAC5B,GACC,CACDvG,IAAK,oBACL3D,MAAO,WACDO,KAAK62B,2BAA6B72B,KAAK7D,MAAMiT,aAAepP,KAAK82B,gCAAkC92B,KAAK7D,MAAM63B,mBAChHh0B,KAAKg1B,eAAiB,MAGpBh1B,KAAKg3B,6BAA+Bh3B,KAAK7D,MAAM43B,eAAiB/zB,KAAKi3B,yBAA2Bj3B,KAAK7D,MAAMqT,YAC7GxP,KAAKi1B,eAAiB,MAGxBj1B,KAAKs0B,8BAELt0B,KAAK62B,yBAA2B72B,KAAK7D,MAAMiT,YAC3CpP,KAAK82B,8BAAgC92B,KAAK7D,MAAM63B,iBAChDh0B,KAAKg3B,2BAA6Bh3B,KAAK7D,MAAM43B,cAC7C/zB,KAAKi3B,uBAAyBj3B,KAAK7D,MAAMqT,SAC3C,GACC,CACDpM,IAAK,wBACL3D,MAAO,SAA+BtD,GACpC,IAAIg6B,EAA0Bh6B,EAAMg6B,wBAChCnC,EAAmB73B,EAAM63B,iBACzBD,EAAgB53B,EAAM43B,cACtBxkB,EAAWpT,EAAMoT,SACjBooB,EAA8Bx7B,EAAMw7B,4BACpChE,EAAwB3zB,KAAKD,MAAM4zB,sBAEvC,IAAKK,EACH,OAAO,KAGT,IAAI4D,EAAqBjE,EAAwB,EAAI,EACjD32B,EAASgD,KAAK63B,qBAAqB17B,GACnCwN,EAAQ3J,KAAK+1B,kBAAkB55B,GAC/BkN,EAAgBrJ,KAAKD,MAAM4zB,sBAAwB3zB,KAAKD,MAAMsJ,cAAgB,EAC9EyuB,EAAYH,EAA8BhuB,EAAQN,EAAgBM,EAElEouB,EAAiB95B,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGX,EAAO,CACjEuZ,aAAc1V,KAAKg4B,4BACnB15B,UAAW0B,KAAK7D,MAAM87B,wBACtB/oB,YAAa8kB,EACbpe,yBAA0B5V,KAAKu0B,wCAC/Bv3B,OAAQA,EACRuY,SAAU4gB,EAA0Bn2B,KAAKk4B,kBAAe/3B,EACxDhC,IAAK6B,KAAKm4B,mBACV5oB,SAAU7K,KAAKC,IAAI,EAAG4K,EAAWwkB,GAAiB6D,EAClDpoB,UAAWxP,KAAKo4B,qBAChB3uB,MAAOzJ,KAAKo3B,qBACZljB,SAAU,KACVvK,MAAOmuB,KAGT,OAAIH,EACK15B,EAAAA,cAAoB,MAAO,CAChCK,UAAW,+BACXmL,MAAOkD,GAAc,CAAC,EAAG3M,KAAKo3B,qBAAsB,CAClDp6B,OAAQA,EACR2M,MAAOA,EACPuL,UAAW,YAEZ6iB,GAGEA,CACT,GACC,CACD30B,IAAK,yBACL3D,MAAO,SAAgCtD,GACrC,IAAI+S,EAAc/S,EAAM+S,YACpB8kB,EAAmB73B,EAAM63B,iBACzBD,EAAgB53B,EAAM43B,cACtBxkB,EAAWpT,EAAMoT,SACjBU,EAAiB9T,EAAM8T,eACvBE,EAAchU,EAAMgU,YACxB,OAAOlS,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGX,EAAO,CACnDuZ,aAAc1V,KAAKq4B,6BACnB/5B,UAAW0B,KAAK7D,MAAMm8B,yBACtBppB,YAAaxK,KAAKC,IAAI,EAAGuK,EAAc8kB,GACvC5kB,YAAapP,KAAKu4B,sBAClB3iB,yBAA0B5V,KAAKw0B,yCAC/Bx3B,OAAQgD,KAAK63B,qBAAqB17B,GAClCoZ,SAAUvV,KAAKwV,UACfuC,0BAA2B/X,KAAKw4B,2BAChCr6B,IAAK6B,KAAKy4B,oBACVlpB,SAAU7K,KAAKC,IAAI,EAAG4K,EAAWwkB,GACjCvkB,UAAWxP,KAAKo4B,qBAChBnoB,eAAgBA,EAAiB+jB,EACjC7jB,YAAaA,EAAc4jB,EAC3BtqB,MAAOzJ,KAAKs3B,sBACZ3tB,MAAO3J,KAAK04B,mBAAmBv8B,KAEnC,GACC,CACDiH,IAAK,qBACL3D,MAAO,SAA4BtD,GACjC,IAAI63B,EAAmB73B,EAAM63B,iBACzBD,EAAgB53B,EAAM43B,cAE1B,OAAKC,GAAqBD,EAInB91B,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGX,EAAO,CACnDmC,UAAW0B,KAAK7D,MAAMw8B,qBACtBzpB,YAAa8kB,EACbh3B,OAAQgD,KAAK61B,kBAAkB15B,GAC/BgC,IAAK6B,KAAK44B,gBACVrpB,SAAUwkB,EACVtqB,MAAOzJ,KAAKw3B,kBACZtjB,SAAU,KACVvK,MAAO3J,KAAK+1B,kBAAkB55B,MAXvB,IAaX,GACC,CACDiH,IAAK,sBACL3D,MAAO,SAA6BtD,GAClC,IAAI+S,EAAc/S,EAAM+S,YACpBknB,EAAuBj6B,EAAMi6B,qBAC7BpC,EAAmB73B,EAAM63B,iBACzBD,EAAgB53B,EAAM43B,cACtBxjB,EAAapU,EAAMoU,WACnBsoB,EAA4B18B,EAAM08B,0BAClCC,EAAe94B,KAAKD,MACpB2zB,EAA0BoF,EAAapF,wBACvCrqB,EAAgByvB,EAAazvB,cAEjC,IAAK0qB,EACH,OAAO,KAGT,IAAIgF,EAAwBrF,EAA0B,EAAI,EACtD12B,EAASgD,KAAK61B,kBAAkB15B,GAChCwN,EAAQ3J,KAAK04B,mBAAmBv8B,GAChC68B,EAAmBtF,EAA0BrqB,EAAgB,EAE7D4vB,EAAaj8B,EACbyM,EAAQzJ,KAAK03B,mBAEbmB,IACFI,EAAaj8B,EAASg8B,EACtBvvB,EAAQkD,GAAc,CAAC,EAAG3M,KAAK03B,mBAAoB,CACjDpe,KAAM,KAIV,IAAI4f,EAAej7B,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGX,EAAO,CAC/DuZ,aAAc1V,KAAKm5B,0BACnB76B,UAAW0B,KAAK7D,MAAMi9B,sBACtBlqB,YAAaxK,KAAKC,IAAI,EAAGuK,EAAc8kB,GAAoB+E,EAC3D3pB,YAAapP,KAAKu4B,sBAClB3iB,yBAA0B5V,KAAKy0B,sCAC/Bz3B,OAAQi8B,EACR1jB,SAAU6gB,EAAuBp2B,KAAKq5B,mBAAgBl5B,EACtDhC,IAAK6B,KAAKs5B,iBACV/pB,SAAUwkB,EACVxjB,WAAYA,EACZ9G,MAAOA,EACPyK,SAAU,KACVvK,MAAOA,KAGT,OAAIkvB,EACK56B,EAAAA,cAAoB,MAAO,CAChCK,UAAW,6BACXmL,MAAOkD,GAAc,CAAC,EAAG3M,KAAK03B,mBAAoB,CAChD16B,OAAQA,EACR2M,MAAOA,EACPsL,UAAW,YAEZikB,GAGEA,CACT,IACE,CAAC,CACH91B,IAAK,2BACL3D,MAAO,SAAkCa,EAAWC,GAClD,OAAID,EAAUiQ,aAAehQ,EAAUgQ,YAAcjQ,EAAUkQ,YAAcjQ,EAAUiQ,UAC9E,CACLD,WAAoC,MAAxBjQ,EAAUiQ,YAAsBjQ,EAAUiQ,YAAc,EAAIjQ,EAAUiQ,WAAahQ,EAAUgQ,WACzGC,UAAkC,MAAvBlQ,EAAUkQ,WAAqBlQ,EAAUkQ,WAAa,EAAIlQ,EAAUkQ,UAAYjQ,EAAUiQ,WAIlG,IACT,KAGKijB,CACT,CA3uBA,CA2uBEx1B,EAAAA,gBAEFR,EAAAA,EAAAA,GAAgBg2B,GAAW,eAAgB,CACzCwE,wBAAyB,GACzBK,yBAA0B,GAC1BK,qBAAsB,GACtBS,sBAAuB,GACvBjD,yBAAyB,EACzBC,sBAAsB,EACtBpC,iBAAkB,EAClBD,cAAe,EACf9jB,gBAAiB,EACjBE,aAAc,EACd1G,MAAO,CAAC,EACR4sB,oBAAqB,CAAC,EACtBC,qBAAsB,CAAC,EACvBC,iBAAkB,CAAC,EACnBC,kBAAmB,CAAC,EACpBqC,2BAA2B,EAC3BlB,6BAA6B,IAG/BlE,GAAU3N,UAiBN,CAAC,GACL/kB,EAAAA,EAAAA,UAAS0yB,KCnyBT,SAAUrmB,GAGR,SAASmsB,EAAWp9B,EAAOqrB,GACzB,IAAIna,EAcJ,OAZAtK,EAAAA,EAAAA,GAAgB/C,KAAMu5B,IAEtBlsB,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBgsB,GAAYv3B,KAAKhC,KAAM7D,EAAOqrB,KACjFznB,MAAQ,CACZ2X,aAAc,EACd1N,YAAa,EACb2N,aAAc,EACdpH,WAAY,EACZC,UAAW,EACXoH,YAAa,GAEfvK,EAAMmI,UAAYnI,EAAMmI,UAAUhV,MAAKgN,EAAAA,EAAAA,GAAuBH,IACvDA,CACT,CA2CA,OA7DAyD,EAAAA,EAAAA,GAAUyoB,EAAYnsB,IAoBtBjK,EAAAA,EAAAA,GAAao2B,EAAY,CAAC,CACxBn2B,IAAK,SACL3D,MAAO,WACL,IAAIpB,EAAW2B,KAAK7D,MAAMkC,SACtBoV,EAAczT,KAAKD,MACnB2X,EAAejE,EAAYiE,aAC3B1N,EAAcyJ,EAAYzJ,YAC1B2N,EAAelE,EAAYkE,aAC3BpH,EAAakD,EAAYlD,WACzBC,EAAYiD,EAAYjD,UACxBoH,EAAcnE,EAAYmE,YAC9B,OAAOvZ,EAAS,CACdqZ,aAAcA,EACd1N,YAAaA,EACbuL,SAAUvV,KAAKwV,UACfmC,aAAcA,EACdpH,WAAYA,EACZC,UAAWA,EACXoH,YAAaA,GAEjB,GACC,CACDxU,IAAK,YACL3D,MAAO,SAAmB7C,GACxB,IAAI8a,EAAe9a,EAAK8a,aACpB1N,EAAcpN,EAAKoN,YACnB2N,EAAe/a,EAAK+a,aACpBpH,EAAa3T,EAAK2T,WAClBC,EAAY5T,EAAK4T,UACjBoH,EAAchb,EAAKgb,YACvB5X,KAAKI,SAAS,CACZsX,aAAcA,EACd1N,YAAaA,EACb2N,aAAcA,EACdpH,WAAYA,EACZC,UAAWA,EACXoH,YAAaA,GAEjB,KAGK2hB,CACT,CA/DA,CA+DEt7B,EAAAA,gBAGS6nB,UAOP,CAAC,ECtFU,SAAS0T,GAAyB58B,GAC/C,IAAI0B,EAAY1B,EAAK0B,UACjBm7B,EAAU78B,EAAK68B,QACfhwB,EAAQ7M,EAAK6M,MACjB,OAAOxL,EAAAA,cAAoB,MAAO,CAChCK,UAAWA,EACX2V,KAAM,MACNxK,MAAOA,GACNgwB,EACL,CACAD,GAAyB1T,UAAoD,KCX7E,IAaA,GAboB,CAKlB4T,IAAK,MAMLC,KAAM,QCHO,SAASC,GAAch9B,GACpC,IAAIi9B,EAAgBj9B,EAAKi9B,cACrB/N,GAAansB,EAAAA,EAAAA,GAAK,8CAA+C,CACnE,mDAAoDk6B,IAAkBC,GAAcJ,IACpF,oDAAqDG,IAAkBC,GAAcH,OAEvF,OAAO17B,EAAAA,cAAoB,MAAO,CAChCK,UAAWwtB,EACXniB,MAAO,GACP3M,OAAQ,GACR+8B,QAAS,aACRF,IAAkBC,GAAcJ,IAAMz7B,EAAAA,cAAoB,OAAQ,CACnE8wB,EAAG,mBACA9wB,EAAAA,cAAoB,OAAQ,CAC/B8wB,EAAG,mBACD9wB,EAAAA,cAAoB,OAAQ,CAC9B8wB,EAAG,gBACHiL,KAAM,SAEV,CCrBe,SAASC,GAAsBr9B,GAC5C,IAAIs9B,EAAUt9B,EAAKs9B,QACfC,EAAQv9B,EAAKu9B,MACbC,EAASx9B,EAAKw9B,OACdP,EAAgBj9B,EAAKi9B,cACrBQ,EAAoBD,IAAWF,EAC/B77B,EAAW,CAACJ,EAAAA,cAAoB,OAAQ,CAC1CK,UAAW,+CACX8E,IAAK,QACLk3B,MAAwB,kBAAVH,EAAqBA,EAAQ,MAC1CA,IASH,OAPIE,GACFh8B,EAASoO,KAAKxO,EAAAA,cAAoB27B,GAAe,CAC/Cx2B,IAAK,gBACLy2B,cAAeA,KAIZx7B,CACT,CCpBe,SAASk8B,GAAmB39B,GACzC,IAAI0B,EAAY1B,EAAK0B,UACjBm7B,EAAU78B,EAAK68B,QACfl2B,EAAQ3G,EAAK2G,MACbH,EAAMxG,EAAKwG,IACXo3B,EAAa59B,EAAK49B,WAClBC,EAAmB79B,EAAK69B,iBACxBC,EAAgB99B,EAAK89B,cACrBC,EAAiB/9B,EAAK+9B,eACtBC,EAAkBh+B,EAAKg+B,gBACvBC,EAAUj+B,EAAKi+B,QACfpxB,EAAQ7M,EAAK6M,MACbqxB,EAAY,CACd,gBAAiBv3B,EAAQ,GA0D3B,OAvDIi3B,GAAcC,GAAoBC,GAAiBC,GAAkBC,KACvEE,EAAU,cAAgB,MAC1BA,EAAU5mB,SAAW,EAEjBsmB,IACFM,EAAUC,QAAU,SAAUhsB,GAC5B,OAAOyrB,EAAW,CAChBzrB,MAAOA,EACPxL,MAAOA,EACPs3B,QAASA,GAEb,GAGEJ,IACFK,EAAUE,cAAgB,SAAUjsB,GAClC,OAAO0rB,EAAiB,CACtB1rB,MAAOA,EACPxL,MAAOA,EACPs3B,QAASA,GAEb,GAGEH,IACFI,EAAUG,WAAa,SAAUlsB,GAC/B,OAAO2rB,EAAc,CACnB3rB,MAAOA,EACPxL,MAAOA,EACPs3B,QAASA,GAEb,GAGEF,IACFG,EAAUI,YAAc,SAAUnsB,GAChC,OAAO4rB,EAAe,CACpB5rB,MAAOA,EACPxL,MAAOA,EACPs3B,QAASA,GAEb,GAGED,IACFE,EAAUK,cAAgB,SAAUpsB,GAClC,OAAO6rB,EAAgB,CACrB7rB,MAAOA,EACPxL,MAAOA,EACPs3B,QAASA,GAEb,IAIG58B,EAAAA,cAAoB,OAAOnB,EAAAA,EAAAA,GAAS,CAAC,EAAGg+B,EAAW,CACxDx8B,UAAWA,EACX8E,IAAKA,EACL6Q,KAAM,MACNxK,MAAOA,IACLgwB,EACN,CFvDAG,GAAc9T,UAEV,CAAC,ECHLmU,GAAsBnU,UAAoD,KCyD1EyU,GAAmBzU,UAAoD,KCrEvE,IAAIsV,GAEJ,SAAUrc,GAGR,SAASqc,IAGP,OAFAr4B,EAAAA,EAAAA,GAAgB/C,KAAMo7B,IAEf9tB,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgB6tB,GAAQ1uB,MAAM1M,KAAMuH,WAC9E,CAEA,OARAuJ,EAAAA,EAAAA,GAAUsqB,EAAQrc,GAQXqc,CACT,CAVA,CAUEn9B,EAAAA,WClBF,SAAS+N,GAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAEpV,SAAS+E,GAAcC,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,GAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,GAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,EDkBrgBnP,EAAAA,EAAAA,GAAgB29B,GAAQ,eAAgB,CACtCC,eEzBa,SAA+Bz+B,GAC5C,IAAIs9B,EAAUt9B,EAAKs9B,QACfW,EAAUj+B,EAAKi+B,QAEnB,MAA2B,oBAAhBA,EAAQlX,IACVkX,EAAQlX,IAAIuW,GAEZW,EAAQX,EAEnB,EFiBExkB,aG3Ba,SAA6B9Y,GAC1C,IAAI0+B,EAAW1+B,EAAK0+B,SAEpB,OAAgB,MAAZA,EACK,GAEAC,OAAOD,EAElB,EHoBEE,qBAAsB1B,GAAcJ,IACpC+B,SAAU,EACVC,WAAY,EACZC,eAAgB1B,GAChBxwB,MAAO,CAAC,IAIV2xB,GAAOtV,UAkEH,CAAC,EC/EL,IAAI8V,GAEJ,SAAUxuB,GAGR,SAASwuB,EAAMz/B,GACb,IAAIkR,EAaJ,OAXAtK,EAAAA,EAAAA,GAAgB/C,KAAM47B,IAEtBvuB,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAMuN,EAAAA,EAAAA,GAAgBquB,GAAO55B,KAAKhC,KAAM7D,KACrE4D,MAAQ,CACZ87B,eAAgB,GAElBxuB,EAAMyuB,cAAgBzuB,EAAMyuB,cAAct7B,MAAKgN,EAAAA,EAAAA,GAAuBH,IACtEA,EAAM0uB,WAAa1uB,EAAM0uB,WAAWv7B,MAAKgN,EAAAA,EAAAA,GAAuBH,IAChEA,EAAMmI,UAAYnI,EAAMmI,UAAUhV,MAAKgN,EAAAA,EAAAA,GAAuBH,IAC9DA,EAAMsN,mBAAqBtN,EAAMsN,mBAAmBna,MAAKgN,EAAAA,EAAAA,GAAuBH,IAChFA,EAAMiT,QAAUjT,EAAMiT,QAAQ9f,MAAKgN,EAAAA,EAAAA,GAAuBH,IACnDA,CACT,CAwgBA,OAzhBAyD,EAAAA,EAAAA,GAAU8qB,EAAOxuB,IAmBjBjK,EAAAA,EAAAA,GAAay4B,EAAO,CAAC,CACnBx4B,IAAK,kBACL3D,MAAO,WACDO,KAAKmN,MACPnN,KAAKmN,KAAKyF,aAEd,GAGC,CACDxP,IAAK,kBACL3D,MAAO,SAAyB7C,GAC9B,IAAIoU,EAAYpU,EAAKoU,UACjBzN,EAAQ3G,EAAK2G,MAEjB,OAAIvD,KAAKmN,KACqBnN,KAAKmN,KAAKqe,iBAAiB,CACrDxa,UAAWA,EACXI,SAAU7N,IAE0BiN,UAKjC,CACT,GAGC,CACDpN,IAAK,gCACL3D,MAAO,SAAuC4D,GAC5C,IAAI6N,EAAc7N,EAAM6N,YACpBE,EAAW/N,EAAM+N,SAEjBpR,KAAKmN,MACPnN,KAAKmN,KAAK8U,8BAA8B,CACtC7Q,SAAUA,EACVF,YAAaA,GAGnB,GAGC,CACD9N,IAAK,iBACL3D,MAAO,WACDO,KAAKmN,MACPnN,KAAKmN,KAAKse,iBAEd,GAGC,CACDroB,IAAK,oBACL3D,MAAO,WACL,IAAIsE,EAAQwD,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC7Ey0B,EAAoBj4B,EAAMmN,YAC1BA,OAAoC,IAAtB8qB,EAA+B,EAAIA,EACjDC,EAAiBl4B,EAAMqN,SACvBA,OAA8B,IAAnB6qB,EAA4B,EAAIA,EAE3Cj8B,KAAKmN,MACPnN,KAAKmN,KAAKmK,kBAAkB,CAC1BlG,SAAUA,EACVF,YAAaA,GAGnB,GAGC,CACD9N,IAAK,sBACL3D,MAAO,WACL,IAAI8D,EAAQgE,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAE5EvH,KAAKmN,MACPnN,KAAKmN,KAAKmK,kBAAkB,CAC1BlG,SAAU7N,GAGhB,GAGC,CACDH,IAAK,mBACL3D,MAAO,WACL,IAAI+Q,EAAYjJ,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAEhFvH,KAAKmN,MACPnN,KAAKmN,KAAKye,iBAAiB,CACzBpb,UAAWA,GAGjB,GAGC,CACDpN,IAAK,cACL3D,MAAO,WACL,IAAI8D,EAAQgE,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,EAE5EvH,KAAKmN,MACPnN,KAAKmN,KAAK6W,aAAa,CACrB9S,YAAa,EACbE,SAAU7N,GAGhB,GACC,CACDH,IAAK,oBACL3D,MAAO,WACL,GAAIO,KAAKmN,KAAM,CACb,IAAI+uB,GAAQxa,EAAAA,EAAAA,aAAY1hB,KAAKmN,MAEzBnD,EAAckyB,EAAMlyB,aAAe,EAEvC,OADkBkyB,EAAMnyB,aAAe,GAClBC,CACvB,CAEA,OAAO,CACT,GACC,CACD5G,IAAK,oBACL3D,MAAO,WACLO,KAAKm8B,oBACP,GACC,CACD/4B,IAAK,qBACL3D,MAAO,WACLO,KAAKm8B,oBACP,GACC,CACD/4B,IAAK,SACL3D,MAAO,WACL,IAAI8T,EAASvT,KAET2R,EAAc3R,KAAK7D,MACnBkC,EAAWsT,EAAYtT,SACvBC,EAAYqT,EAAYrT,UACxB89B,EAAgBzqB,EAAYyqB,cAC5BC,EAAgB1qB,EAAY0qB,cAC5BhoB,EAAY1C,EAAY0C,UACxBioB,EAAe3qB,EAAY2qB,aAC3BC,EAAoB5qB,EAAY4qB,kBAChCv/B,EAAS2U,EAAY3U,OACrBkO,EAAKyG,EAAYzG,GACjB2gB,EAAiBla,EAAYka,eAC7B2Q,EAAe7qB,EAAY6qB,aAC3BC,EAAW9qB,EAAY8qB,SACvB/5B,EAAgBiP,EAAYjP,cAC5B+G,EAAQkI,EAAYlI,MACpBE,EAAQgI,EAAYhI,MACpBkyB,EAAiB77B,KAAKD,MAAM87B,eAC5Ba,EAAsBN,EAAgBp/B,EAASA,EAASs/B,EACxDK,EAAmC,oBAAjBH,EAA8BA,EAAa,CAC/Dj5B,OAAQ,IACLi5B,EACDI,EAAqC,oBAAbH,EAA0BA,EAAS,CAC7Dl5B,OAAQ,IACLk5B,EAaL,OAXAz8B,KAAK68B,oBAAsB,GAC3B5+B,EAAAA,SAAe6+B,QAAQz+B,GAAUyO,SAAQ,SAAUiwB,EAAQx5B,GACzD,IAAIy5B,EAAazpB,EAAO0pB,uBAAuBF,EAAQA,EAAO5gC,MAAMsN,OAEpE8J,EAAOspB,oBAAoBt5B,GAASoJ,GAAc,CAChD/C,SAAU,UACTozB,EACL,IAIO/+B,EAAAA,cAAoB,MAAO,CAChC,aAAc+B,KAAK7D,MAAM,cACzB,kBAAmB6D,KAAK7D,MAAM,mBAC9B,gBAAiB8B,EAAAA,SAAe6+B,QAAQz+B,GAAUmJ,OAClD,gBAAiBxH,KAAK7D,MAAMoT,SAC5BjR,WAAWqB,EAAAA,EAAAA,GAAK,0BAA2BrB,GAC3C4M,GAAIA,EACJ+I,KAAM,OACNxK,MAAOA,IACL2yB,GAAiBG,EAAkB,CACrCj+B,WAAWqB,EAAAA,EAAAA,GAAK,qCAAsCg9B,GACtDlD,QAASz5B,KAAKk9B,oBACdzzB,MAAOkD,GAAc,CACnB3P,OAAQs/B,EACR1yB,SAAU,SACV4V,aAAcqc,EACdlyB,MAAOA,GACNizB,KACD3+B,EAAAA,cAAoBkP,GAAMrQ,EAAAA,EAAAA,GAAS,CAAC,EAAGkD,KAAK7D,MAAO,CACrD,gBAAiB,KACjByX,oBAAoB,EACpBtV,WAAWqB,EAAAA,EAAAA,GAAK,gCAAiC08B,GACjD3mB,aAAc1V,KAAK+7B,WACnB3sB,YAAazF,EACbuF,YAAa,EACblS,OAAQ0/B,EACRxxB,QAAI/K,EACJ6T,kBAAmB6X,EACnBtW,SAAUvV,KAAKwV,UACf5H,kBAAmB5N,KAAK2a,mBACxBxc,IAAK6B,KAAKsgB,QACVrM,KAAM,WACN4nB,eAAgBA,EAChB1rB,YAAazN,EACb+G,MAAOkD,GAAc,CAAC,EAAG0H,EAAW,CAClCY,UAAW,cAGjB,GACC,CACD7R,IAAK,gBACL3D,MAAO,SAAuBsH,GAC5B,IAAIg2B,EAASh2B,EAAMg2B,OACf7rB,EAAcnK,EAAMmK,YACpBxD,EAAc3G,EAAM2G,YACpBwJ,EAASnQ,EAAMmQ,OACf2jB,EAAU9zB,EAAM8zB,QAChBzpB,EAAWrK,EAAMqK,SACjB+rB,EAAgBn9B,KAAK7D,MAAMghC,cAC3BC,EAAgBL,EAAO5gC,MACvBk/B,EAAiB+B,EAAc/B,eAC/B3lB,EAAe0nB,EAAc1nB,aAC7BpX,EAAY8+B,EAAc9+B,UAC1B++B,EAAaD,EAAcC,WAC3BnD,EAAUkD,EAAclD,QACxBhvB,EAAKkyB,EAAclyB,GAMnBsO,EAAe9D,EAAa,CAC9B4lB,SANaD,EAAe,CAC5BgC,WAAYA,EACZnD,QAASA,EACTW,QAASA,IAITwC,WAAYA,EACZnsB,YAAaA,EACbgpB,QAASA,EACTxsB,YAAaA,EACbwJ,OAAQA,EACR2jB,QAASA,EACTzpB,SAAUA,IAWR3H,EAAQzJ,KAAK68B,oBAAoB3rB,GACjCopB,EAAgC,kBAAjB9gB,EAA4BA,EAAe,KAI9D,OAAOvb,EAAAA,cAAoB,MAAO,CAChC,gBAAiBiT,EAAc,EAC/B,mBAAoBhG,EACpB5M,WAAWqB,EAAAA,EAAAA,GAAK,qCAAsCrB,GACtD8E,IAAK,MAAQgO,EAAR,OAAiCF,EACtC6pB,QAlBY,SAAiBhsB,GAC7BouB,GAAiBA,EAAc,CAC7BE,WAAYA,EACZnD,QAASA,EACTnrB,MAAOA,GAEX,EAaEkF,KAAM,WACNxK,MAAOA,EACP6wB,MAAOA,GACN9gB,EACL,GACC,CACDpW,IAAK,gBACL3D,MAAO,SAAuByH,GAC5B,IAgCIo2B,EAAeC,EAAiBC,EAAgBC,EAAgBC,EAhChEX,EAAS71B,EAAM61B,OACfx5B,EAAQ2D,EAAM3D,MACd6O,EAAepS,KAAK7D,MACpBwhC,EAAkBvrB,EAAaurB,gBAC/BC,EAAcxrB,EAAawrB,YAC3BC,EAAgBzrB,EAAayrB,cAC7B3O,EAAO9c,EAAa8c,KACpBkL,EAAShoB,EAAagoB,OACtBP,EAAgBznB,EAAaynB,cAC7BiE,EAAiBf,EAAO5gC,MACxBkhC,EAAaS,EAAeT,WAC5BnD,EAAU4D,EAAe5D,QACzBsB,EAAuBsC,EAAetC,qBACtCuC,EAAcD,EAAeC,YAC7BpC,EAAiBmC,EAAenC,eAChCzwB,EAAK4yB,EAAe5yB,GACpBivB,EAAQ2D,EAAe3D,MACvB6D,GAAeD,GAAe7O,EAC9BpD,GAAansB,EAAAA,EAAAA,GAAK,wCAAyCg+B,EAAiBZ,EAAO5gC,MAAMwhC,gBAAiB,CAC5GM,8CAA+CD,IAG7Cv0B,EAAQzJ,KAAKi9B,uBAAuBF,EAAQpwB,GAAc,CAAC,EAAGixB,EAAa,CAAC,EAAGb,EAAO5gC,MAAMyhC,cAE5FM,EAAiBvC,EAAe,CAClC0B,WAAYA,EACZnD,QAASA,EACT6D,YAAaA,EACb5D,MAAOA,EACPC,OAAQA,EACRP,cAAeA,IAIjB,GAAImE,GAAeH,EAAe,CAEhC,IAGIM,EAHkB/D,IAAWF,EAGQsB,EAAuB3B,IAAkBC,GAAcH,KAAOG,GAAcJ,IAAMI,GAAcH,KAErIoB,EAAU,SAAiBhsB,GAC7BivB,GAAe9O,EAAK,CAClBsM,qBAAsBA,EACtBzsB,MAAOA,EACPqrB,OAAQF,EACRL,cAAesE,IAEjBN,GAAiBA,EAAc,CAC7BR,WAAYA,EACZnD,QAASA,EACTnrB,MAAOA,GAEX,EAQA2uB,EAAkBX,EAAO5gC,MAAM,eAAiBg+B,GAASD,EACzDuD,EAAiB,OACjBD,EAAiB,EACjBF,EAAgBvC,EAChBwC,EAVgB,SAAmBxuB,GACf,UAAdA,EAAM3L,KAAiC,MAAd2L,EAAM3L,KACjC23B,EAAQhsB,EAEZ,CAOF,CASA,OAPIqrB,IAAWF,IACbuD,EAAiB5D,IAAkBC,GAAcJ,IAAM,YAAc,cAMhEz7B,EAAAA,cAAoB,MAAO,CAChC,aAAcy/B,EACd,YAAaD,EACbn/B,UAAWwtB,EACX5gB,GAAIA,EACJ9H,IAAK,aAAeG,EACpBw3B,QAASuC,EACT7iB,UAAW8iB,EACXtpB,KAAM,eACNxK,MAAOA,EACPyK,SAAUspB,GACTU,EACL,GACC,CACD96B,IAAK,aACL3D,MAAO,SAAoB0H,GACzB,IAAIoQ,EAASvX,KAETuD,EAAQ4D,EAAMiK,SACd1D,EAAcvG,EAAMuG,YACpBtK,EAAM+D,EAAM/D,IACZ8T,EAAS/P,EAAM+P,OACfzN,EAAQtC,EAAMsC,MACd8I,EAAevS,KAAK7D,MACpBkC,EAAWkU,EAAalU,SACxBm8B,EAAajoB,EAAaioB,WAC1BC,EAAmBloB,EAAakoB,iBAChCG,EAAkBroB,EAAaqoB,gBAC/BD,EAAiBpoB,EAAaooB,eAC9BD,EAAgBnoB,EAAamoB,cAC7B8B,EAAejqB,EAAaiqB,aAC5B4B,EAAY7rB,EAAa6rB,UACzB/S,EAAc9Y,EAAa8Y,YAC3BoR,EAAWlqB,EAAakqB,SACxBZ,EAAiB77B,KAAKD,MAAM87B,eAC5Bc,EAAmC,oBAAjBH,EAA8BA,EAAa,CAC/Dj5B,MAAOA,IACJi5B,EACDI,EAAqC,oBAAbH,EAA0BA,EAAS,CAC7Dl5B,MAAOA,IACJk5B,EACD5B,EAAUuD,EAAU,CACtB76B,MAAOA,IAELk2B,EAAUx7B,EAAAA,SAAe6+B,QAAQz+B,GAAUqoB,KAAI,SAAUqW,EAAQ7rB,GACnE,OAAOqG,EAAOukB,cAAc,CAC1BiB,OAAQA,EACR7rB,YAAaA,EACbxD,YAAaA,EACbwJ,OAAQA,EACR2jB,QAASA,EACTzpB,SAAU7N,EACVs4B,eAAgBA,GAEpB,IACIv9B,GAAYqB,EAAAA,EAAAA,GAAK,+BAAgCg9B,GAEjD0B,EAAiB1xB,GAAc,CAAC,EAAGlD,EAAO,CAC5CzM,OAAQgD,KAAKs+B,cAAc/6B,GAC3BqG,SAAU,SACV4V,aAAcqc,GACbe,GAEH,OAAOvR,EAAY,CACjB/sB,UAAWA,EACXm7B,QAASA,EACTl2B,MAAOA,EACPmK,YAAaA,EACbtK,IAAKA,EACLo3B,WAAYA,EACZC,iBAAkBA,EAClBG,gBAAiBA,EACjBD,eAAgBA,EAChBD,cAAeA,EACfG,QAASA,EACTpxB,MAAO40B,GAEX,GAKC,CACDj7B,IAAK,yBACL3D,MAAO,SAAgCs9B,GACrC,IAAIwB,EAAch3B,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFi3B,EAAY,GAAGjiC,OAAOwgC,EAAO5gC,MAAMs/B,SAAU,KAAKl/B,OAAOwgC,EAAO5gC,MAAMu/B,WAAY,KAAKn/B,OAAOwgC,EAAO5gC,MAAMwN,MAAO,MAElHF,EAAQkD,GAAc,CAAC,EAAG4xB,EAAa,CACzCE,KAAMD,EACNE,OAAQF,EACRG,WAAYH,IAWd,OARIzB,EAAO5gC,MAAMsZ,WACfhM,EAAMgM,SAAWsnB,EAAO5gC,MAAMsZ,UAG5BsnB,EAAO5gC,MAAMymB,WACfnZ,EAAMmZ,SAAWma,EAAO5gC,MAAMymB,UAGzBnZ,CACT,GACC,CACDrG,IAAK,oBACL3D,MAAO,WACL,IAAIm/B,EAAS5+B,KAET+S,EAAe/S,KAAK7D,MACpBkC,EAAW0U,EAAa1U,SAG5B,OAFoB0U,EAAaqpB,cACL,GAAKn+B,EAAAA,SAAe6+B,QAAQz+B,IAC3CqoB,KAAI,SAAUqW,EAAQx5B,GACjC,OAAOq7B,EAAOC,cAAc,CAC1B9B,OAAQA,EACRx5B,MAAOA,GAEX,GACF,GACC,CACDH,IAAK,gBACL3D,MAAO,SAAuB2R,GAC5B,IAAI5B,EAAYxP,KAAK7D,MAAMqT,UAC3B,MAA4B,oBAAdA,EAA2BA,EAAU,CACjDjM,MAAO6N,IACJ5B,CACP,GACC,CACDpM,IAAK,YACL3D,MAAO,SAAmB2H,GACxB,IAAIsQ,EAAetQ,EAAMsQ,aACrBC,EAAevQ,EAAMuQ,aACrBnH,EAAYpJ,EAAMoJ,WAEtB+E,EADevV,KAAK7D,MAAMoZ,UACjB,CACPmC,aAAcA,EACdC,aAAcA,EACdnH,UAAWA,GAEf,GACC,CACDpN,IAAK,qBACL3D,MAAO,SAA4ByY,GACjC,IAAI5J,EAAwB4J,EAAM5J,sBAC9BE,EAAuB0J,EAAM1J,qBAC7BE,EAAgBwJ,EAAMxJ,cACtBE,EAAesJ,EAAMtJ,cAEzB8a,EADqB1pB,KAAK7D,MAAMutB,gBACjB,CACb9S,mBAAoBtI,EACpBuI,kBAAmBrI,EACnBiI,WAAY/H,EACZgI,UAAW9H,GAEf,GACC,CACDxL,IAAK,UACL3D,MAAO,SAAiBtB,GACtB6B,KAAKmN,KAAOhP,CACd,GACC,CACDiF,IAAK,qBACL3D,MAAO,WACL,IAAIo8B,EAAiB77B,KAAK8+B,oBAC1B9+B,KAAKI,SAAS,CACZy7B,eAAgBA,GAEpB,KAGKD,CACT,CA3hBA,CA2hBE39B,EAAAA,gBAEFR,EAAAA,EAAAA,GAAgBm+B,GAAO,eAAgB,CACrCQ,eAAe,EACf3jB,iBAAkB,GAClB6jB,aAAc,EACdsB,YAAa,CAAC,EACd/R,eAAgB,WACd,OAAO,IACT,EACAnC,eAAgB,WACd,OAAO,IACT,EACAnU,SAAU,WACR,OAAO,IACT,EACAO,sBAAuBkW,EACvBjW,iBAAkB,GAClBsV,YAAakP,GACbgC,kBAAmB/C,GACnBiD,SAAU,CAAC,EACX3zB,kBAAmB,OACnBpG,eAAgB,EAChB+G,MAAO,CAAC,IAIVmyB,GAAM9V,UAoNF,CAAC,EG7xBL,ICTIiZ,GAAmB,GACnBC,GAA4B,KAC5BC,GAAgC,KAEpC,SAASC,KACHD,KACFA,GAAgC,KAE5B91B,SAASU,MAAqC,MAA7Bm1B,KACnB71B,SAASU,KAAKJ,MAAMzL,cAAgBghC,IAGtCA,GAA4B,KAEhC,CAEA,SAASG,KACPD,KACAH,GAAiBjyB,SAAQ,SAAUsyB,GACjC,OAAOA,EAASC,oBAClB,GACF,CAcA,SAASC,GAAevwB,GAClBA,EAAMgiB,gBAAkBnrB,QAAuC,MAA7Bo5B,IAAqC71B,SAASU,OAClFm1B,GAA4B71B,SAASU,KAAKJ,MAAMzL,cAChDmL,SAASU,KAAKJ,MAAMzL,cAAgB,QAfxC,WACMihC,IACF3zB,EAAuB2zB,IAGzB,IAAIM,EAAiB,EACrBR,GAAiBjyB,SAAQ,SAAUsyB,GACjCG,EAAiB76B,KAAKC,IAAI46B,EAAgBH,EAASjjC,MAAMib,2BAC3D,IACA6nB,GAAgCzzB,EAAwB2zB,GAAuCI,EACjG,CAQEC,GACAT,GAAiBjyB,SAAQ,SAAUsyB,GAC7BA,EAASjjC,MAAMsjC,gBAAkB1wB,EAAMgiB,eACzCqO,EAASM,2BAEb,GACF,CAEO,SAASC,GAAuBnhC,EAAWgd,GAC3CujB,GAAiB52B,MAAK,SAAUi3B,GACnC,OAAOA,EAASjjC,MAAMsjC,gBAAkBjkB,CAC1C,KACEA,EAAQgD,iBAAiB,SAAU8gB,IAGrCP,GAAiBtyB,KAAKjO,EACxB,CACO,SAASohC,GAAyBphC,EAAWgd,IAClDujB,GAAmBA,GAAiB1yB,QAAO,SAAU+yB,GACnD,OAAOA,IAAa5gC,CACtB,KAEsBgJ,SACpBgU,EAAQqD,oBAAoB,SAAUygB,IAElCL,KACF3zB,EAAuB2zB,IACvBC,MAGN,CCnEA,ICGIh1B,GAAQC,GDHR01B,GAAW,SAAkBrkB,GAC/B,OAAOA,IAAY5V,MACrB,EAEIk6B,GAAiB,SAAwBtkB,GAC3C,OAAOA,EAAQukB,uBACjB,EAEO,SAASC,GAAcP,EAAetjC,GAC3C,GAAKsjC,EAKE,IAAII,GAASJ,GAAgB,CAClC,IAAIxkB,EAAUrV,OACVq6B,EAAchlB,EAAQglB,YACtBC,EAAajlB,EAAQilB,WACzB,MAAO,CACLljC,OAA+B,kBAAhBijC,EAA2BA,EAAc,EACxDt2B,MAA6B,kBAAfu2B,EAA0BA,EAAa,EAEzD,CACE,OAAOJ,GAAeL,EACxB,CAdE,MAAO,CACLziC,OAAQb,EAAMgkC,aACdx2B,MAAOxN,EAAMikC,YAanB,CAmCO,SAASC,GAAgB7kB,GAC9B,OAAIqkB,GAASrkB,IAAYrS,SAASm3B,gBACzB,CACL52B,IAAK,YAAa9D,OAASA,OAAO26B,QAAUp3B,SAASm3B,gBAAgB9vB,UACrE8I,KAAM,YAAa1T,OAASA,OAAO46B,QAAUr3B,SAASm3B,gBAAgB/vB,YAGjE,CACL7G,IAAK8R,EAAQhL,UACb8I,KAAMkC,EAAQjL,WAGpB,CCnEA,SAASvE,GAAQC,EAAQC,GAAkB,IAAItE,EAAOC,OAAOD,KAAKqE,GAAS,GAAIpE,OAAOsE,sBAAuB,CAAE,IAAIC,EAAUvE,OAAOsE,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOzE,OAAO0E,yBAAyBN,EAAQK,GAAKE,UAAY,KAAI5E,EAAK6E,KAAKC,MAAM9E,EAAMwE,EAAU,CAAE,OAAOxE,CAAM,CAc7U,IAEH64B,GAAY,WACd,MAAyB,qBAAX76B,OAAyBA,YAASzF,CAClD,EAEIugC,IAAkBv2B,GAAQD,GAE9B,SAAUkD,GAGR,SAASszB,IACP,IAAI/mB,EAEAtM,GAEJtK,EAAAA,EAAAA,GAAgB/C,KAAM0gC,GAEtB,IAAK,IAAI9mB,EAAOrS,UAAUC,OAAQqS,EAAO,IAAI7R,MAAM4R,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvS,UAAUuS,GAuGzB,OApGAzM,GAAQC,EAAAA,EAAAA,GAA2BtN,MAAO2Z,GAAmBpM,EAAAA,EAAAA,GAAgBmzB,IAAiB1+B,KAAK0K,MAAMiN,EAAkB,CAAC3Z,MAAMzD,OAAOsd,MAEzIpc,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,UAAWozB,OAE1DhjC,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAc,IAE7D5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,mBAAoB,IAEnE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,oBAAqB,IAEpE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,4BAAwB,IAEvE5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,cAAU,IAEzD5P,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,QAhDnD,SAAuBT,GAAU,IAAK,IAAIjJ,EAAI,EAAGA,EAAI4D,UAAUC,OAAQ7D,IAAK,CAAE,IAAIkJ,EAAyB,MAAhBtF,UAAU5D,GAAa4D,UAAU5D,GAAK,CAAC,EAAOA,EAAI,EAAKqI,GAAQa,GAAQ,GAAMC,SAAQ,SAAU1J,IAAO3F,EAAAA,EAAAA,GAAgBmP,EAAQxJ,EAAKyJ,EAAOzJ,GAAO,IAAeyE,OAAOkF,0BAA6BlF,OAAOmF,iBAAiBJ,EAAQ/E,OAAOkF,0BAA0BF,IAAmBb,GAAQa,GAAQC,SAAQ,SAAU1J,GAAOyE,OAAOoF,eAAeL,EAAQxJ,EAAKyE,OAAO0E,yBAAyBM,EAAQzJ,GAAO,GAAM,CAAE,OAAOwJ,CAAQ,CAgDzcD,CAAc,CAAC,EAAGqzB,GAAc3yB,EAAMlR,MAAMsjC,cAAepyB,EAAMlR,OAAQ,CAC/HuR,aAAa,EACb6C,WAAY,EACZC,UAAW,MAGb/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,kBAAkB,SAAUmO,IACrEA,GAAaA,aAAmBwF,SAClCC,QAAQC,KAAK,qEAGf7T,EAAM8T,OAAS3F,EAEfnO,EAAMszB,gBACR,KAEAljC,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,kBAAkB,SAAUzQ,GACzE,IAAI4T,EAAY5T,EAAK4T,UAErB,GAAInD,EAAMtN,MAAMyQ,YAAcA,EAA9B,CAIA,IAAIivB,EAAgBpyB,EAAMlR,MAAMsjC,cAE5BA,IACoC,oBAA3BA,EAAcmB,SACvBnB,EAAcmB,SAAS,EAAGpwB,EAAYnD,EAAMwzB,kBAE5CpB,EAAcjvB,UAAYA,EAAYnD,EAAMwzB,iBARhD,CAWF,KAEApjC,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,2BAA2B,SAAUmO,GAC9EA,IAAY5V,OACdA,OAAO4Y,iBAAiB,SAAUnR,EAAM8S,WAAW,GAEnD9S,EAAM6S,qBAAqB/C,kBAAkB3B,EAASnO,EAAM8S,UAEhE,KAEA1iB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,SAAUmO,GAChFA,IAAY5V,OACdA,OAAOiZ,oBAAoB,SAAUxR,EAAM8S,WAAW,GAC7C3E,GACTnO,EAAM6S,qBAAqBxB,qBAAqBlD,EAASnO,EAAM8S,UAEnE,KAEA1iB,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,aAAa,WAC1DA,EAAMszB,gBACR,KAEAljC,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,6BAA6B,WAC1E,GAAKA,EAAMyzB,WAAX,CAIA,IAAIvrB,EAAWlI,EAAMlR,MAAMoZ,SACvBkqB,EAAgBpyB,EAAMlR,MAAMsjC,cAEhC,GAAIA,EAAe,CACjB,IAAI52B,EAAew3B,GAAgBZ,GAC/BlvB,EAAa7L,KAAKC,IAAI,EAAGkE,EAAayQ,KAAOjM,EAAM0zB,mBACnDvwB,EAAY9L,KAAKC,IAAI,EAAGkE,EAAaa,IAAM2D,EAAMwzB,kBAErDxzB,EAAMjN,SAAS,CACbsN,aAAa,EACb6C,WAAYA,EACZC,UAAWA,IAGb+E,EAAS,CACPhF,WAAYA,EACZC,UAAWA,GAEf,CApBA,CAqBF,KAEA/S,EAAAA,EAAAA,IAAgB+P,EAAAA,EAAAA,GAAuBH,GAAQ,sBAAsB,WACnEA,EAAMjN,SAAS,CACbsN,aAAa,GAEjB,IAEOL,CACT,CAiGA,OAnNAyD,EAAAA,EAAAA,GAAU4vB,EAAgBtzB,IAoH1BjK,EAAAA,EAAAA,GAAau9B,EAAgB,CAAC,CAC5Bt9B,IAAK,iBACL3D,MAAO,WACL,IAAIggC,EAAgBl4B,UAAUC,OAAS,QAAsBrH,IAAjBoH,UAAU,GAAmBA,UAAU,GAAKvH,KAAK7D,MAAMsjC,cAC/FrgB,EAAWpf,KAAK7D,MAAMijB,SACtB3L,EAAczT,KAAKD,MACnB/C,EAASyW,EAAYzW,OACrB2M,EAAQ8J,EAAY9J,MACpBq3B,EAAWhhC,KAAKmhB,QAAU8f,EAAAA,YAAqBjhC,MAEnD,GAAIghC,aAAoBhgB,SAAWye,EAAe,CAChD,IAAI/7B,ED1HL,SAA2B8X,EAAS0lB,GACzC,GAAIrB,GAASqB,IAAc/3B,SAASm3B,gBAAiB,CACnD,IAAIa,EAAmBh4B,SAASm3B,gBAC5Bc,EAActB,GAAetkB,GAC7B6lB,EAAgBvB,GAAeqB,GACnC,MAAO,CACLz3B,IAAK03B,EAAY13B,IAAM23B,EAAc33B,IACrC4P,KAAM8nB,EAAY9nB,KAAO+nB,EAAc/nB,KAE3C,CACE,IAAIzQ,EAAew3B,GAAgBa,GAE/BI,EAAexB,GAAetkB,GAE9B+lB,EAAiBzB,GAAeoB,GAEpC,MAAO,CACLx3B,IAAK43B,EAAa53B,IAAMb,EAAaa,IAAM63B,EAAe73B,IAC1D4P,KAAMgoB,EAAahoB,KAAOzQ,EAAayQ,KAAOioB,EAAejoB,KAGnE,CCqGqBkoB,CAAkBR,EAAUvB,GACzCz/B,KAAK6gC,iBAAmBn9B,EAAOgG,IAC/B1J,KAAK+gC,kBAAoBr9B,EAAO4V,IAClC,CAEA,IAAImoB,EAAazB,GAAcP,EAAez/B,KAAK7D,OAE/Ca,IAAWykC,EAAWzkC,QAAU2M,IAAU83B,EAAW93B,QACvD3J,KAAKI,SAAS,CACZpD,OAAQykC,EAAWzkC,OACnB2M,MAAO83B,EAAW93B,QAEpByV,EAAS,CACPpiB,OAAQykC,EAAWzkC,OACnB2M,MAAO83B,EAAW93B,QAGxB,GACC,CACDvG,IAAK,oBACL3D,MAAO,WACL,IAAIggC,EAAgBz/B,KAAK7D,MAAMsjC,cAC/Bz/B,KAAKkgB,qBAAuBpF,IAC5B9a,KAAK2gC,eAAelB,GAEhBA,IACFE,GAAuB3/B,KAAMy/B,GAE7Bz/B,KAAK0hC,wBAAwBjC,IAG/Bz/B,KAAK8gC,YAAa,CACpB,GACC,CACD19B,IAAK,qBACL3D,MAAO,SAA4BkB,EAAWJ,GAC5C,IAAIk/B,EAAgBz/B,KAAK7D,MAAMsjC,cAC3BkC,EAAoBhhC,EAAU8+B,cAE9BkC,IAAsBlC,GAAsC,MAArBkC,GAA8C,MAAjBlC,IACtEz/B,KAAK2gC,eAAelB,GACpBG,GAAyB5/B,KAAM2hC,GAC/BhC,GAAuB3/B,KAAMy/B,GAE7Bz/B,KAAK4hC,0BAA0BD,GAE/B3hC,KAAK0hC,wBAAwBjC,GAEjC,GACC,CACDr8B,IAAK,uBACL3D,MAAO,WACL,IAAIggC,EAAgBz/B,KAAK7D,MAAMsjC,cAE3BA,IACFG,GAAyB5/B,KAAMy/B,GAE/Bz/B,KAAK4hC,0BAA0BnC,IAGjCz/B,KAAK8gC,YAAa,CACpB,GACC,CACD19B,IAAK,SACL3D,MAAO,WACL,IAAIpB,EAAW2B,KAAK7D,MAAMkC,SACtB8V,EAAenU,KAAKD,MACpB2N,EAAcyG,EAAazG,YAC3B8C,EAAY2D,EAAa3D,UACzBD,EAAa4D,EAAa5D,WAC1BvT,EAASmX,EAAanX,OACtB2M,EAAQwK,EAAaxK,MACzB,OAAOtL,EAAS,CACdwjC,cAAe7hC,KAAK8hC,eACpBvgB,cAAevhB,KAAKwhB,eACpBxkB,OAAQA,EACR0Q,YAAaA,EACb6C,WAAYA,EACZC,UAAWA,EACX7G,MAAOA,GAEX,KAGK+2B,CACT,CArNA,CAqNEziC,EAAAA,gBAAsBR,EAAAA,EAAAA,GAAgByM,GAAQ,YAAqD,MA6BjGC,KAEJ1M,EAAAA,EAAAA,GAAgBijC,GAAgB,eAAgB,CAC9CthB,SAAU,WAAqB,EAC/B7J,SAAU,WAAqB,EAC/B6B,2BA/PgC,IAgQhCqoB,cAAegB,KACfN,aAAc,EACdC,YAAa,G","sources":["../node_modules/@mui/material/InputAdornment/inputAdornmentClasses.js","../node_modules/@mui/material/InputAdornment/InputAdornment.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/react-virtualized/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js","../node_modules/react-virtualized/dist/es/Grid/utils/CellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/Grid/utils/maxElementSize.js","../node_modules/react-virtualized/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/utils/createCallbackMemoizer.js","../node_modules/react-virtualized/dist/es/Grid/utils/updateScrollIndexHelper.js","../node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/dom-helpers/esm/scrollbarSize.js","../node_modules/react-virtualized/dist/es/utils/animationFrame.js","../node_modules/react-virtualized/dist/es/Grid/Grid.js","../node_modules/react-virtualized/dist/es/utils/requestAnimationTimeout.js","../node_modules/react-virtualized/dist/es/Grid/defaultOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/Grid/defaultCellRangeRenderer.js","../node_modules/react-virtualized/dist/es/Grid/accessibilityOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/types.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/ArrowKeyStepper.js","../node_modules/react-virtualized/dist/es/AutoSizer/AutoSizer.js","../node_modules/react-virtualized/dist/es/vendor/detectElementResize.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurerCache.js","../node_modules/react-virtualized/dist/es/Collection/CollectionView.js","../node_modules/react-virtualized/dist/es/Collection/Section.js","../node_modules/react-virtualized/dist/es/Collection/SectionManager.js","../node_modules/react-virtualized/dist/es/utils/getUpdatedOffsetForIndex.js","../node_modules/react-virtualized/dist/es/Collection/Collection.js","../node_modules/react-virtualized/dist/es/Collection/utils/calculateSizeAndPositionData.js","../node_modules/react-virtualized/dist/es/ColumnSizer/ColumnSizer.js","../node_modules/react-virtualized/dist/es/ColumnSizer/index.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/InfiniteLoader.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/index.js","../node_modules/react-virtualized/dist/es/List/List.js","../node_modules/react-virtualized/dist/es/vendor/binarySearchBounds.js","../node_modules/react-virtualized/dist/es/vendor/intervalTree.js","../node_modules/react-virtualized/dist/es/Masonry/PositionCache.js","../node_modules/react-virtualized/dist/es/Masonry/Masonry.js","../node_modules/react-virtualized/dist/es/Masonry/index.js","../node_modules/react-virtualized/dist/es/MultiGrid/CellMeasurerCacheDecorator.js","../node_modules/react-virtualized/dist/es/MultiGrid/MultiGrid.js","../node_modules/react-virtualized/dist/es/ScrollSync/ScrollSync.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/SortDirection.js","../node_modules/react-virtualized/dist/es/Table/SortIndicator.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRenderer.js","../node_modules/react-virtualized/dist/es/Table/defaultRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/Column.js","../node_modules/react-virtualized/dist/es/Table/Table.js","../node_modules/react-virtualized/dist/es/Table/defaultCellDataGetter.js","../node_modules/react-virtualized/dist/es/Table/defaultCellRenderer.js","../node_modules/react-virtualized/dist/es/Table/index.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/onScroll.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/dimensions.js","../node_modules/react-virtualized/dist/es/WindowScroller/WindowScroller.js"],"sourcesContent":["import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getInputAdornmentUtilityClass(slot) {\n return generateUtilityClass('MuiInputAdornment', slot);\n}\nconst inputAdornmentClasses = generateUtilityClasses('MuiInputAdornment', ['root', 'filled', 'standard', 'outlined', 'positionStart', 'positionEnd', 'disablePointerEvents', 'hiddenLabel', 'sizeSmall']);\nexport default inputAdornmentClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nvar _span;\nconst _excluded = [\"children\", \"className\", \"component\", \"disablePointerEvents\", \"disableTypography\", \"position\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport capitalize from '../utils/capitalize';\nimport Typography from '../Typography';\nimport FormControlContext from '../FormControl/FormControlContext';\nimport useFormControl from '../FormControl/useFormControl';\nimport styled from '../styles/styled';\nimport inputAdornmentClasses, { getInputAdornmentUtilityClass } from './inputAdornmentClasses';\nimport useThemeProps from '../styles/useThemeProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst overridesResolver = (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`position${capitalize(ownerState.position)}`], ownerState.disablePointerEvents === true && styles.disablePointerEvents, styles[ownerState.variant]];\n};\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disablePointerEvents,\n hiddenLabel,\n position,\n size,\n variant\n } = ownerState;\n const slots = {\n root: ['root', disablePointerEvents && 'disablePointerEvents', position && `position${capitalize(position)}`, variant, hiddenLabel && 'hiddenLabel', size && `size${capitalize(size)}`]\n };\n return composeClasses(slots, getInputAdornmentUtilityClass, classes);\n};\nconst InputAdornmentRoot = styled('div', {\n name: 'MuiInputAdornment',\n slot: 'Root',\n overridesResolver\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'flex',\n height: '0.01em',\n // Fix IE11 flexbox alignment. To remove at some point.\n maxHeight: '2em',\n alignItems: 'center',\n whiteSpace: 'nowrap',\n color: (theme.vars || theme).palette.action.active\n}, ownerState.variant === 'filled' && {\n // Styles applied to the root element if `variant=\"filled\"`.\n [`&.${inputAdornmentClasses.positionStart}&:not(.${inputAdornmentClasses.hiddenLabel})`]: {\n marginTop: 16\n }\n}, ownerState.position === 'start' && {\n // Styles applied to the root element if `position=\"start\"`.\n marginRight: 8\n}, ownerState.position === 'end' && {\n // Styles applied to the root element if `position=\"end\"`.\n marginLeft: 8\n}, ownerState.disablePointerEvents === true && {\n // Styles applied to the root element if `disablePointerEvents={true}`.\n pointerEvents: 'none'\n}));\nconst InputAdornment = /*#__PURE__*/React.forwardRef(function InputAdornment(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiInputAdornment'\n });\n const {\n children,\n className,\n component = 'div',\n disablePointerEvents = false,\n disableTypography = false,\n position,\n variant: variantProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl() || {};\n let variant = variantProp;\n if (variantProp && muiFormControl.variant) {\n if (process.env.NODE_ENV !== 'production') {\n if (variantProp === muiFormControl.variant) {\n console.error('MUI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');\n }\n }\n }\n if (muiFormControl && !variant) {\n variant = muiFormControl.variant;\n }\n const ownerState = _extends({}, props, {\n hiddenLabel: muiFormControl.hiddenLabel,\n size: muiFormControl.size,\n disablePointerEvents,\n position,\n variant\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(FormControlContext.Provider, {\n value: null,\n children: /*#__PURE__*/_jsx(InputAdornmentRoot, _extends({\n as: component,\n ownerState: ownerState,\n className: clsx(classes.root, className),\n ref: ref\n }, other, {\n children: typeof children === 'string' && !disableTypography ? /*#__PURE__*/_jsx(Typography, {\n color: \"text.secondary\",\n children: children\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [position === 'start' ? /* notranslate needed while Google Translate will not fix zero-width space issue */_span || (_span = /*#__PURE__*/_jsx(\"span\", {\n className: \"notranslate\",\n children: \"\\u200B\"\n })) : null, children]\n })\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputAdornment.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component, normally an `IconButton` or string.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Disable pointer events on the root.\n * This allows for the content of the adornment to focus the `input` on click.\n * @default false\n */\n disablePointerEvents: PropTypes.bool,\n /**\n * If children is a string then disable wrapping in a Typography component.\n * @default false\n */\n disableTypography: PropTypes.bool,\n /**\n * The position this adornment should appear relative to the `Input`.\n */\n position: PropTypes.oneOf(['end', 'start']).isRequired,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The variant to use.\n * Note: If you are using the `TextField` component or the `FormControl` component\n * you do not have to set this manually.\n */\n variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputAdornment;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","/**\n * Helper method that determines when to recalculate row or column metadata.\n */\nexport default function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref) {\n var cellCount = _ref.cellCount,\n cellSize = _ref.cellSize,\n computeMetadataCallback = _ref.computeMetadataCallback,\n computeMetadataCallbackProps = _ref.computeMetadataCallbackProps,\n nextCellsCount = _ref.nextCellsCount,\n nextCellSize = _ref.nextCellSize,\n nextScrollToIndex = _ref.nextScrollToIndex,\n scrollToIndex = _ref.scrollToIndex,\n updateScrollOffsetForScrollToIndex = _ref.updateScrollOffsetForScrollToIndex;\n\n // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.\n // In that event users should use the manual recompute methods to inform of changes.\n if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {\n computeMetadataCallback(computeMetadataCallbackProps); // Updated cell metadata may have hidden the previous scrolled-to item.\n // In this case we should also update the scrollTop to ensure it stays visible.\n\n if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {\n updateScrollOffsetForScrollToIndex();\n }\n }\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\n/**\n * Just-in-time calculates and caches size and position information for a collection of cells.\n */\nvar CellSizeAndPositionManager =\n/*#__PURE__*/\nfunction () {\n // Cache of size and position data for cells, mapped by cell index.\n // Note that invalid values may exist in this map so only rely on cells up to this._lastMeasuredIndex\n // Measurements for cells up to this index can be trusted; cells afterward should be estimated.\n // Used in deferred mode to track which cells have been queued for measurement.\n function CellSizeAndPositionManager(_ref) {\n var cellCount = _ref.cellCount,\n cellSizeGetter = _ref.cellSizeGetter,\n estimatedCellSize = _ref.estimatedCellSize;\n\n _classCallCheck(this, CellSizeAndPositionManager);\n\n _defineProperty(this, \"_cellSizeAndPositionData\", {});\n\n _defineProperty(this, \"_lastMeasuredIndex\", -1);\n\n _defineProperty(this, \"_lastBatchedIndex\", -1);\n\n _defineProperty(this, \"_cellCount\", void 0);\n\n _defineProperty(this, \"_cellSizeGetter\", void 0);\n\n _defineProperty(this, \"_estimatedCellSize\", void 0);\n\n this._cellSizeGetter = cellSizeGetter;\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n }\n\n _createClass(CellSizeAndPositionManager, [{\n key: \"areOffsetsAdjusted\",\n value: function areOffsetsAdjusted() {\n return false;\n }\n }, {\n key: \"configure\",\n value: function configure(_ref2) {\n var cellCount = _ref2.cellCount,\n estimatedCellSize = _ref2.estimatedCellSize,\n cellSizeGetter = _ref2.cellSizeGetter;\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n this._cellSizeGetter = cellSizeGetter;\n }\n }, {\n key: \"getCellCount\",\n value: function getCellCount() {\n return this._cellCount;\n }\n }, {\n key: \"getEstimatedCellSize\",\n value: function getEstimatedCellSize() {\n return this._estimatedCellSize;\n }\n }, {\n key: \"getLastMeasuredIndex\",\n value: function getLastMeasuredIndex() {\n return this._lastMeasuredIndex;\n }\n }, {\n key: \"getOffsetAdjustment\",\n value: function getOffsetAdjustment() {\n return 0;\n }\n /**\n * This method returns the size and position for the cell at the specified index.\n * It just-in-time calculates (or used cached values) for cells leading up to the index.\n */\n\n }, {\n key: \"getSizeAndPositionOfCell\",\n value: function getSizeAndPositionOfCell(index) {\n if (index < 0 || index >= this._cellCount) {\n throw Error(\"Requested index \".concat(index, \" is outside of range 0..\").concat(this._cellCount));\n }\n\n if (index > this._lastMeasuredIndex) {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var offset = lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size;\n\n for (var i = this._lastMeasuredIndex + 1; i <= index; i++) {\n var size = this._cellSizeGetter({\n index: i\n }); // undefined or NaN probably means a logic error in the size getter.\n // null means we're using CellMeasurer and haven't yet measured a given index.\n\n\n if (size === undefined || isNaN(size)) {\n throw Error(\"Invalid size returned for cell \".concat(i, \" of value \").concat(size));\n } else if (size === null) {\n this._cellSizeAndPositionData[i] = {\n offset: offset,\n size: 0\n };\n this._lastBatchedIndex = index;\n } else {\n this._cellSizeAndPositionData[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n this._lastMeasuredIndex = index;\n }\n }\n }\n\n return this._cellSizeAndPositionData[index];\n }\n }, {\n key: \"getSizeAndPositionOfLastMeasuredCell\",\n value: function getSizeAndPositionOfLastMeasuredCell() {\n return this._lastMeasuredIndex >= 0 ? this._cellSizeAndPositionData[this._lastMeasuredIndex] : {\n offset: 0,\n size: 0\n };\n }\n /**\n * Total size of all cells being measured.\n * This value will be completely estimated initially.\n * As cells are measured, the estimate will be updated.\n */\n\n }, {\n key: \"getTotalSize\",\n value: function getTotalSize() {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var totalSizeOfMeasuredCells = lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size;\n var numUnmeasuredCells = this._cellCount - this._lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredCells = numUnmeasuredCells * this._estimatedCellSize;\n return totalSizeOfMeasuredCells + totalSizeOfUnmeasuredCells;\n }\n /**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n * @param containerSize Size (width or height) of the container viewport\n * @param currentOffset Container's current (x or y) offset\n * @param totalSize Total size (width or height) of all cells\n * @return Offset to use to ensure the specified cell is visible\n */\n\n }, {\n key: \"getUpdatedOffsetForIndex\",\n value: function getUpdatedOffsetForIndex(_ref3) {\n var _ref3$align = _ref3.align,\n align = _ref3$align === void 0 ? 'auto' : _ref3$align,\n containerSize = _ref3.containerSize,\n currentOffset = _ref3.currentOffset,\n targetIndex = _ref3.targetIndex;\n\n if (containerSize <= 0) {\n return 0;\n }\n\n var datum = this.getSizeAndPositionOfCell(targetIndex);\n var maxOffset = datum.offset;\n var minOffset = maxOffset - containerSize + datum.size;\n var idealOffset;\n\n switch (align) {\n case 'start':\n idealOffset = maxOffset;\n break;\n\n case 'end':\n idealOffset = minOffset;\n break;\n\n case 'center':\n idealOffset = maxOffset - (containerSize - datum.size) / 2;\n break;\n\n default:\n idealOffset = Math.max(minOffset, Math.min(maxOffset, currentOffset));\n break;\n }\n\n var totalSize = this.getTotalSize();\n return Math.max(0, Math.min(totalSize - containerSize, idealOffset));\n }\n }, {\n key: \"getVisibleCellRange\",\n value: function getVisibleCellRange(params) {\n var containerSize = params.containerSize,\n offset = params.offset;\n var totalSize = this.getTotalSize();\n\n if (totalSize === 0) {\n return {};\n }\n\n var maxOffset = offset + containerSize;\n\n var start = this._findNearestCell(offset);\n\n var datum = this.getSizeAndPositionOfCell(start);\n offset = datum.offset + datum.size;\n var stop = start;\n\n while (offset < maxOffset && stop < this._cellCount - 1) {\n stop++;\n offset += this.getSizeAndPositionOfCell(stop).size;\n }\n\n return {\n start: start,\n stop: stop\n };\n }\n /**\n * Clear all cached values for cells after the specified index.\n * This method should be called for any cell that has changed its size.\n * It will not immediately perform any calculations; they'll be performed the next time getSizeAndPositionOfCell() is called.\n */\n\n }, {\n key: \"resetCell\",\n value: function resetCell(index) {\n this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1);\n }\n }, {\n key: \"_binarySearch\",\n value: function _binarySearch(high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = this.getSizeAndPositionOfCell(middle).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n }\n }, {\n key: \"_exponentialSearch\",\n value: function _exponentialSearch(index, offset) {\n var interval = 1;\n\n while (index < this._cellCount && this.getSizeAndPositionOfCell(index).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return this._binarySearch(Math.min(index, this._cellCount - 1), Math.floor(index / 2), offset);\n }\n /**\n * Searches for the cell (index) nearest the specified offset.\n *\n * If no exact match is found the next lowest cell index will be returned.\n * This allows partially visible cells (with offsets just before/above the fold) to be visible.\n */\n\n }, {\n key: \"_findNearestCell\",\n value: function _findNearestCell(offset) {\n if (isNaN(offset)) {\n throw Error(\"Invalid offset \".concat(offset, \" specified\"));\n } // Our search algorithms find the nearest match at or below the specified offset.\n // So make sure the offset is at least 0 or no match will be found.\n\n\n offset = Math.max(0, offset);\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var lastMeasuredIndex = Math.max(0, this._lastMeasuredIndex);\n\n if (lastMeasuredCellSizeAndPosition.offset >= offset) {\n // If we've already measured cells within this range just use a binary search as it's faster.\n return this._binarySearch(lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of cells as a binary search would.\n // The overall complexity for this approach is O(log n).\n return this._exponentialSearch(lastMeasuredIndex, offset);\n }\n }\n }]);\n\n return CellSizeAndPositionManager;\n}();\n\nexport { CellSizeAndPositionManager as default };\nimport { bpfrpt_proptype_Alignment } from \"../types\";\nimport { bpfrpt_proptype_CellSizeGetter } from \"../types\";\nimport { bpfrpt_proptype_VisibleCellRange } from \"../types\";","var DEFAULT_MAX_ELEMENT_SIZE = 1500000;\nvar CHROME_MAX_ELEMENT_SIZE = 1.67771e7;\n\nvar isBrowser = function isBrowser() {\n return typeof window !== 'undefined';\n};\n\nvar isChrome = function isChrome() {\n return !!window.chrome;\n};\n\nexport var getMaxElementSize = function getMaxElementSize() {\n if (isBrowser()) {\n if (isChrome()) {\n return CHROME_MAX_ELEMENT_SIZE;\n }\n }\n\n return DEFAULT_MAX_ELEMENT_SIZE;\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport CellSizeAndPositionManager from './CellSizeAndPositionManager';\nimport { getMaxElementSize } from './maxElementSize.js';\n\n/**\n * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.\n */\nvar ScalingCellSizeAndPositionManager =\n/*#__PURE__*/\nfunction () {\n function ScalingCellSizeAndPositionManager(_ref) {\n var _ref$maxScrollSize = _ref.maxScrollSize,\n maxScrollSize = _ref$maxScrollSize === void 0 ? getMaxElementSize() : _ref$maxScrollSize,\n params = _objectWithoutProperties(_ref, [\"maxScrollSize\"]);\n\n _classCallCheck(this, ScalingCellSizeAndPositionManager);\n\n _defineProperty(this, \"_cellSizeAndPositionManager\", void 0);\n\n _defineProperty(this, \"_maxScrollSize\", void 0);\n\n // Favor composition over inheritance to simplify IE10 support\n this._cellSizeAndPositionManager = new CellSizeAndPositionManager(params);\n this._maxScrollSize = maxScrollSize;\n }\n\n _createClass(ScalingCellSizeAndPositionManager, [{\n key: \"areOffsetsAdjusted\",\n value: function areOffsetsAdjusted() {\n return this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize;\n }\n }, {\n key: \"configure\",\n value: function configure(params) {\n this._cellSizeAndPositionManager.configure(params);\n }\n }, {\n key: \"getCellCount\",\n value: function getCellCount() {\n return this._cellSizeAndPositionManager.getCellCount();\n }\n }, {\n key: \"getEstimatedCellSize\",\n value: function getEstimatedCellSize() {\n return this._cellSizeAndPositionManager.getEstimatedCellSize();\n }\n }, {\n key: \"getLastMeasuredIndex\",\n value: function getLastMeasuredIndex() {\n return this._cellSizeAndPositionManager.getLastMeasuredIndex();\n }\n /**\n * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.\n * The offset passed to this function is scaled (safe) as well.\n */\n\n }, {\n key: \"getOffsetAdjustment\",\n value: function getOffsetAdjustment(_ref2) {\n var containerSize = _ref2.containerSize,\n offset = _ref2.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n\n var safeTotalSize = this.getTotalSize();\n\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: safeTotalSize\n });\n\n return Math.round(offsetPercentage * (safeTotalSize - totalSize));\n }\n }, {\n key: \"getSizeAndPositionOfCell\",\n value: function getSizeAndPositionOfCell(index) {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);\n }\n }, {\n key: \"getSizeAndPositionOfLastMeasuredCell\",\n value: function getSizeAndPositionOfLastMeasuredCell() {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();\n }\n /** See CellSizeAndPositionManager#getTotalSize */\n\n }, {\n key: \"getTotalSize\",\n value: function getTotalSize() {\n return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());\n }\n /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */\n\n }, {\n key: \"getUpdatedOffsetForIndex\",\n value: function getUpdatedOffsetForIndex(_ref3) {\n var _ref3$align = _ref3.align,\n align = _ref3$align === void 0 ? 'auto' : _ref3$align,\n containerSize = _ref3.containerSize,\n currentOffset = _ref3.currentOffset,\n targetIndex = _ref3.targetIndex;\n currentOffset = this._safeOffsetToOffset({\n containerSize: containerSize,\n offset: currentOffset\n });\n\n var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: align,\n containerSize: containerSize,\n currentOffset: currentOffset,\n targetIndex: targetIndex\n });\n\n return this._offsetToSafeOffset({\n containerSize: containerSize,\n offset: offset\n });\n }\n /** See CellSizeAndPositionManager#getVisibleCellRange */\n\n }, {\n key: \"getVisibleCellRange\",\n value: function getVisibleCellRange(_ref4) {\n var containerSize = _ref4.containerSize,\n offset = _ref4.offset;\n offset = this._safeOffsetToOffset({\n containerSize: containerSize,\n offset: offset\n });\n return this._cellSizeAndPositionManager.getVisibleCellRange({\n containerSize: containerSize,\n offset: offset\n });\n }\n }, {\n key: \"resetCell\",\n value: function resetCell(index) {\n this._cellSizeAndPositionManager.resetCell(index);\n }\n }, {\n key: \"_getOffsetPercentage\",\n value: function _getOffsetPercentage(_ref5) {\n var containerSize = _ref5.containerSize,\n offset = _ref5.offset,\n totalSize = _ref5.totalSize;\n return totalSize <= containerSize ? 0 : offset / (totalSize - containerSize);\n }\n }, {\n key: \"_offsetToSafeOffset\",\n value: function _offsetToSafeOffset(_ref6) {\n var containerSize = _ref6.containerSize,\n offset = _ref6.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n } else {\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: totalSize\n });\n\n return Math.round(offsetPercentage * (safeTotalSize - containerSize));\n }\n }\n }, {\n key: \"_safeOffsetToOffset\",\n value: function _safeOffsetToOffset(_ref7) {\n var containerSize = _ref7.containerSize,\n offset = _ref7.offset;\n\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n } else {\n var offsetPercentage = this._getOffsetPercentage({\n containerSize: containerSize,\n offset: offset,\n totalSize: safeTotalSize\n });\n\n return Math.round(offsetPercentage * (totalSize - containerSize));\n }\n }\n }]);\n\n return ScalingCellSizeAndPositionManager;\n}();\n\nexport { ScalingCellSizeAndPositionManager as default };\nimport { bpfrpt_proptype_Alignment } from \"../types\";\nimport { bpfrpt_proptype_CellSizeGetter } from \"../types\";\nimport { bpfrpt_proptype_VisibleCellRange } from \"../types\";","/**\n * Helper utility that updates the specified callback whenever any of the specified indices have changed.\n */\nexport default function createCallbackMemoizer() {\n var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var cachedIndices = {};\n return function (_ref) {\n var callback = _ref.callback,\n indices = _ref.indices;\n var keys = Object.keys(indices);\n var allInitialized = !requireAllKeys || keys.every(function (key) {\n var value = indices[key];\n return Array.isArray(value) ? value.length > 0 : value >= 0;\n });\n var indexChanged = keys.length !== Object.keys(cachedIndices).length || keys.some(function (key) {\n var cachedValue = cachedIndices[key];\n var value = indices[key];\n return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;\n });\n cachedIndices = indices;\n\n if (allInitialized && indexChanged) {\n callback(indices);\n }\n };\n}","import ScalingCellSizeAndPositionManager from './ScalingCellSizeAndPositionManager.js';\n/**\n * Helper function that determines when to update scroll offsets to ensure that a scroll-to-index remains visible.\n * This function also ensures that the scroll ofset isn't past the last column/row of cells.\n */\n\nexport default function updateScrollIndexHelper(_ref) {\n var cellSize = _ref.cellSize,\n cellSizeAndPositionManager = _ref.cellSizeAndPositionManager,\n previousCellsCount = _ref.previousCellsCount,\n previousCellSize = _ref.previousCellSize,\n previousScrollToAlignment = _ref.previousScrollToAlignment,\n previousScrollToIndex = _ref.previousScrollToIndex,\n previousSize = _ref.previousSize,\n scrollOffset = _ref.scrollOffset,\n scrollToAlignment = _ref.scrollToAlignment,\n scrollToIndex = _ref.scrollToIndex,\n size = _ref.size,\n sizeJustIncreasedFromZero = _ref.sizeJustIncreasedFromZero,\n updateScrollIndexCallback = _ref.updateScrollIndexCallback;\n var cellCount = cellSizeAndPositionManager.getCellCount();\n var hasScrollToIndex = scrollToIndex >= 0 && scrollToIndex < cellCount;\n var sizeHasChanged = size !== previousSize || sizeJustIncreasedFromZero || !previousCellSize || typeof cellSize === 'number' && cellSize !== previousCellSize; // If we have a new scroll target OR if height/row-height has changed,\n // We should ensure that the scroll target is visible.\n\n if (hasScrollToIndex && (sizeHasChanged || scrollToAlignment !== previousScrollToAlignment || scrollToIndex !== previousScrollToIndex)) {\n updateScrollIndexCallback(scrollToIndex); // If we don't have a selected item but list size or number of children have decreased,\n // Make sure we aren't scrolled too far past the current content.\n } else if (!hasScrollToIndex && cellCount > 0 && (size < previousSize || cellCount < previousCellsCount)) {\n // We need to ensure that the current scroll offset is still within the collection's range.\n // To do this, we don't need to measure everything; CellMeasurer would perform poorly.\n // Just check to make sure we're still okay.\n // Only adjust the scroll position if we've scrolled below the last set of rows.\n if (scrollOffset > cellSizeAndPositionManager.getTotalSize() - size) {\n updateScrollIndexCallback(cellCount - 1);\n }\n }\n}\nimport { bpfrpt_proptype_Alignment } from \"../types\";\nimport { bpfrpt_proptype_CellSize } from \"../types\";","export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);","import canUseDOM from './canUseDOM';\nvar size;\nexport default function scrollbarSize(recalc) {\n if (!size && size !== 0 || recalc) {\n if (canUseDOM) {\n var scrollDiv = document.createElement('div');\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n }\n }\n\n return size;\n}","// Properly handle server-side rendering.\nvar win;\n\nif (typeof window !== 'undefined') {\n win = window;\n} else if (typeof self !== 'undefined') {\n win = self;\n} else {\n win = {};\n} // requestAnimationFrame() shim by Paul Irish\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n\n\nvar request = win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || function (callback) {\n return win.setTimeout(callback, 1000 / 60);\n};\n\nvar cancel = win.cancelAnimationFrame || win.webkitCancelAnimationFrame || win.mozCancelAnimationFrame || win.oCancelAnimationFrame || win.msCancelAnimationFrame || function (id) {\n win.clearTimeout(id);\n};\n\nexport var raf = request;\nexport var caf = cancel;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport calculateSizeAndPositionDataAndUpdateScrollOffset from './utils/calculateSizeAndPositionDataAndUpdateScrollOffset';\nimport ScalingCellSizeAndPositionManager from './utils/ScalingCellSizeAndPositionManager';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport defaultOverscanIndicesGetter, { SCROLL_DIRECTION_BACKWARD, SCROLL_DIRECTION_FORWARD } from './defaultOverscanIndicesGetter';\nimport updateScrollIndexHelper from './utils/updateScrollIndexHelper';\nimport defaultCellRangeRenderer from './defaultCellRangeRenderer';\nimport scrollbarSize from 'dom-helpers/scrollbarSize';\nimport { polyfill } from 'react-lifecycles-compat';\nimport { requestAnimationTimeout, cancelAnimationTimeout } from '../utils/requestAnimationTimeout';\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\n\nexport var DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\n\nvar SCROLL_POSITION_CHANGE_REASONS = {\n OBSERVED: 'observed',\n REQUESTED: 'requested'\n};\n\nvar renderNull = function renderNull() {\n return null;\n};\n\n/**\n * Renders tabular data with virtualization along the vertical and horizontal axes.\n * Row heights and column widths must be known ahead of time and specified as properties.\n */\nvar Grid = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(Grid, _React$PureComponent);\n\n // Invokes onSectionRendered callback only when start/stop row or column indices change\n function Grid(props) {\n var _this;\n\n _classCallCheck(this, Grid);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Grid).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"_onGridRenderedMemoizer\", createCallbackMemoizer());\n\n _defineProperty(_assertThisInitialized(_this), \"_onScrollMemoizer\", createCallbackMemoizer(false));\n\n _defineProperty(_assertThisInitialized(_this), \"_deferredInvalidateColumnIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_deferredInvalidateRowIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_recomputeScrollLeftFlag\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"_recomputeScrollTopFlag\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"_horizontalScrollBarSize\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_verticalScrollBarSize\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_scrollbarPresenceChanged\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"_scrollingContainer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_childrenToDisplay\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_columnStartIndex\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_columnStopIndex\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_rowStartIndex\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_rowStopIndex\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_renderedColumnStartIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_renderedColumnStopIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_renderedRowStartIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_renderedRowStopIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_initialScrollTop\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_initialScrollLeft\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_disablePointerEventsTimeoutId\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_styleCache\", {});\n\n _defineProperty(_assertThisInitialized(_this), \"_cellCache\", {});\n\n _defineProperty(_assertThisInitialized(_this), \"_debounceScrollEndedCallback\", function () {\n _this._disablePointerEventsTimeoutId = null; // isScrolling is used to determine if we reset styleCache\n\n _this.setState({\n isScrolling: false,\n needToResetStyleCache: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_invokeOnGridRenderedHelper\", function () {\n var onSectionRendered = _this.props.onSectionRendered;\n\n _this._onGridRenderedMemoizer({\n callback: onSectionRendered,\n indices: {\n columnOverscanStartIndex: _this._columnStartIndex,\n columnOverscanStopIndex: _this._columnStopIndex,\n columnStartIndex: _this._renderedColumnStartIndex,\n columnStopIndex: _this._renderedColumnStopIndex,\n rowOverscanStartIndex: _this._rowStartIndex,\n rowOverscanStopIndex: _this._rowStopIndex,\n rowStartIndex: _this._renderedRowStartIndex,\n rowStopIndex: _this._renderedRowStopIndex\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_setScrollingContainerRef\", function (ref) {\n _this._scrollingContainer = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScroll\", function (event) {\n // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n // See issue #404 for more information.\n if (event.target === _this._scrollingContainer) {\n _this.handleScrollEvent(event.target);\n }\n });\n\n var columnSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n cellCount: props.columnCount,\n cellSizeGetter: function cellSizeGetter(params) {\n return Grid._wrapSizeGetter(props.columnWidth)(params);\n },\n estimatedCellSize: Grid._getEstimatedColumnSize(props)\n });\n var rowSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n cellCount: props.rowCount,\n cellSizeGetter: function cellSizeGetter(params) {\n return Grid._wrapSizeGetter(props.rowHeight)(params);\n },\n estimatedCellSize: Grid._getEstimatedRowSize(props)\n });\n _this.state = {\n instanceProps: {\n columnSizeAndPositionManager: columnSizeAndPositionManager,\n rowSizeAndPositionManager: rowSizeAndPositionManager,\n prevColumnWidth: props.columnWidth,\n prevRowHeight: props.rowHeight,\n prevColumnCount: props.columnCount,\n prevRowCount: props.rowCount,\n prevIsScrolling: props.isScrolling === true,\n prevScrollToColumn: props.scrollToColumn,\n prevScrollToRow: props.scrollToRow,\n scrollbarSize: 0,\n scrollbarSizeMeasured: false\n },\n isScrolling: false,\n scrollDirectionHorizontal: SCROLL_DIRECTION_FORWARD,\n scrollDirectionVertical: SCROLL_DIRECTION_FORWARD,\n scrollLeft: 0,\n scrollTop: 0,\n scrollPositionChangeReason: null,\n needToResetStyleCache: false\n };\n\n if (props.scrollToRow > 0) {\n _this._initialScrollTop = _this._getCalculatedScrollTop(props, _this.state);\n }\n\n if (props.scrollToColumn > 0) {\n _this._initialScrollLeft = _this._getCalculatedScrollLeft(props, _this.state);\n }\n\n return _this;\n }\n /**\n * Gets offsets for a given cell and alignment.\n */\n\n\n _createClass(Grid, [{\n key: \"getOffsetForCell\",\n value: function getOffsetForCell() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$alignment = _ref.alignment,\n alignment = _ref$alignment === void 0 ? this.props.scrollToAlignment : _ref$alignment,\n _ref$columnIndex = _ref.columnIndex,\n columnIndex = _ref$columnIndex === void 0 ? this.props.scrollToColumn : _ref$columnIndex,\n _ref$rowIndex = _ref.rowIndex,\n rowIndex = _ref$rowIndex === void 0 ? this.props.scrollToRow : _ref$rowIndex;\n\n var offsetProps = _objectSpread({}, this.props, {\n scrollToAlignment: alignment,\n scrollToColumn: columnIndex,\n scrollToRow: rowIndex\n });\n\n return {\n scrollLeft: this._getCalculatedScrollLeft(offsetProps),\n scrollTop: this._getCalculatedScrollTop(offsetProps)\n };\n }\n /**\n * Gets estimated total rows' height.\n */\n\n }, {\n key: \"getTotalRowsHeight\",\n value: function getTotalRowsHeight() {\n return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize();\n }\n /**\n * Gets estimated total columns' width.\n */\n\n }, {\n key: \"getTotalColumnsWidth\",\n value: function getTotalColumnsWidth() {\n return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize();\n }\n /**\n * This method handles a scroll event originating from an external scroll control.\n * It's an advanced method and should probably not be used unless you're implementing a custom scroll-bar solution.\n */\n\n }, {\n key: \"handleScrollEvent\",\n value: function handleScrollEvent(_ref2) {\n var _ref2$scrollLeft = _ref2.scrollLeft,\n scrollLeftParam = _ref2$scrollLeft === void 0 ? 0 : _ref2$scrollLeft,\n _ref2$scrollTop = _ref2.scrollTop,\n scrollTopParam = _ref2$scrollTop === void 0 ? 0 : _ref2$scrollTop;\n\n // On iOS, we can arrive at negative offsets by swiping past the start.\n // To prevent flicker here, we make playing in the negative offset zone cause nothing to happen.\n if (scrollTopParam < 0) {\n return;\n } // Prevent pointer events from interrupting a smooth scroll\n\n\n this._debounceScrollEnded();\n\n var _this$props = this.props,\n autoHeight = _this$props.autoHeight,\n autoWidth = _this$props.autoWidth,\n height = _this$props.height,\n width = _this$props.width;\n var instanceProps = this.state.instanceProps; // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n // This causes a series of rapid renders that is slow for long lists.\n // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n\n var scrollbarSize = instanceProps.scrollbarSize;\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var scrollLeft = Math.min(Math.max(0, totalColumnsWidth - width + scrollbarSize), scrollLeftParam);\n var scrollTop = Math.min(Math.max(0, totalRowsHeight - height + scrollbarSize), scrollTopParam); // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n // Don't force a re-render if this is the case.\n // The mouse may move faster then the animation frame does.\n // Use requestAnimationFrame to avoid over-updating.\n\n if (this.state.scrollLeft !== scrollLeft || this.state.scrollTop !== scrollTop) {\n // Track scrolling direction so we can more efficiently overscan rows to reduce empty space around the edges while scrolling.\n // Don't change direction for an axis unless scroll offset has changed.\n var scrollDirectionHorizontal = scrollLeft !== this.state.scrollLeft ? scrollLeft > this.state.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionHorizontal;\n var scrollDirectionVertical = scrollTop !== this.state.scrollTop ? scrollTop > this.state.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionVertical;\n var newState = {\n isScrolling: true,\n scrollDirectionHorizontal: scrollDirectionHorizontal,\n scrollDirectionVertical: scrollDirectionVertical,\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.OBSERVED\n };\n\n if (!autoHeight) {\n newState.scrollTop = scrollTop;\n }\n\n if (!autoWidth) {\n newState.scrollLeft = scrollLeft;\n }\n\n newState.needToResetStyleCache = false;\n this.setState(newState);\n }\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n totalColumnsWidth: totalColumnsWidth,\n totalRowsHeight: totalRowsHeight\n });\n }\n /**\n * Invalidate Grid size and recompute visible cells.\n * This is a deferred wrapper for recomputeGridSize().\n * It sets a flag to be evaluated on cDM/cDU to avoid unnecessary renders.\n * This method is intended for advanced use-cases like CellMeasurer.\n */\n // @TODO (bvaughn) Add automated test coverage for this.\n\n }, {\n key: \"invalidateCellSizeAfterRender\",\n value: function invalidateCellSizeAfterRender(_ref3) {\n var columnIndex = _ref3.columnIndex,\n rowIndex = _ref3.rowIndex;\n this._deferredInvalidateColumnIndex = typeof this._deferredInvalidateColumnIndex === 'number' ? Math.min(this._deferredInvalidateColumnIndex, columnIndex) : columnIndex;\n this._deferredInvalidateRowIndex = typeof this._deferredInvalidateRowIndex === 'number' ? Math.min(this._deferredInvalidateRowIndex, rowIndex) : rowIndex;\n }\n /**\n * Pre-measure all columns and rows in a Grid.\n * Typically cells are only measured as needed and estimated sizes are used for cells that have not yet been measured.\n * This method ensures that the next call to getTotalSize() returns an exact size (as opposed to just an estimated one).\n */\n\n }, {\n key: \"measureAllCells\",\n value: function measureAllCells() {\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n rowCount = _this$props2.rowCount;\n var instanceProps = this.state.instanceProps;\n instanceProps.columnSizeAndPositionManager.getSizeAndPositionOfCell(columnCount - 1);\n instanceProps.rowSizeAndPositionManager.getSizeAndPositionOfCell(rowCount - 1);\n }\n /**\n * Forced recompute of row heights and column widths.\n * This function should be called if dynamic column or row sizes have changed but nothing else has.\n * Since Grid only receives :columnCount and :rowCount it has no way of detecting when the underlying data changes.\n */\n\n }, {\n key: \"recomputeGridSize\",\n value: function recomputeGridSize() {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$columnIndex = _ref4.columnIndex,\n columnIndex = _ref4$columnIndex === void 0 ? 0 : _ref4$columnIndex,\n _ref4$rowIndex = _ref4.rowIndex,\n rowIndex = _ref4$rowIndex === void 0 ? 0 : _ref4$rowIndex;\n\n var _this$props3 = this.props,\n scrollToColumn = _this$props3.scrollToColumn,\n scrollToRow = _this$props3.scrollToRow;\n var instanceProps = this.state.instanceProps;\n instanceProps.columnSizeAndPositionManager.resetCell(columnIndex);\n instanceProps.rowSizeAndPositionManager.resetCell(rowIndex); // Cell sizes may be determined by a function property.\n // In this case the cDU handler can't know if they changed.\n // Store this flag to let the next cDU pass know it needs to recompute the scroll offset.\n\n this._recomputeScrollLeftFlag = scrollToColumn >= 0 && (this.state.scrollDirectionHorizontal === SCROLL_DIRECTION_FORWARD ? columnIndex <= scrollToColumn : columnIndex >= scrollToColumn);\n this._recomputeScrollTopFlag = scrollToRow >= 0 && (this.state.scrollDirectionVertical === SCROLL_DIRECTION_FORWARD ? rowIndex <= scrollToRow : rowIndex >= scrollToRow); // Clear cell cache in case we are scrolling;\n // Invalid row heights likely mean invalid cached content as well.\n\n this._styleCache = {};\n this._cellCache = {};\n this.forceUpdate();\n }\n /**\n * Ensure column and row are visible.\n */\n\n }, {\n key: \"scrollToCell\",\n value: function scrollToCell(_ref5) {\n var columnIndex = _ref5.columnIndex,\n rowIndex = _ref5.rowIndex;\n var columnCount = this.props.columnCount;\n var props = this.props; // Don't adjust scroll offset for single-column grids (eg List, Table).\n // This can cause a funky scroll offset because of the vertical scrollbar width.\n\n if (columnCount > 1 && columnIndex !== undefined) {\n this._updateScrollLeftForScrollToColumn(_objectSpread({}, props, {\n scrollToColumn: columnIndex\n }));\n }\n\n if (rowIndex !== undefined) {\n this._updateScrollTopForScrollToRow(_objectSpread({}, props, {\n scrollToRow: rowIndex\n }));\n }\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props4 = this.props,\n getScrollbarSize = _this$props4.getScrollbarSize,\n height = _this$props4.height,\n scrollLeft = _this$props4.scrollLeft,\n scrollToColumn = _this$props4.scrollToColumn,\n scrollTop = _this$props4.scrollTop,\n scrollToRow = _this$props4.scrollToRow,\n width = _this$props4.width;\n var instanceProps = this.state.instanceProps; // Reset initial offsets to be ignored in browser\n\n this._initialScrollTop = 0;\n this._initialScrollLeft = 0; // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n // We must do this at the start of the method as we may calculate and update scroll position below.\n\n this._handleInvalidatedGridSize(); // If this component was first rendered server-side, scrollbar size will be undefined.\n // In that event we need to remeasure.\n\n\n if (!instanceProps.scrollbarSizeMeasured) {\n this.setState(function (prevState) {\n var stateUpdate = _objectSpread({}, prevState, {\n needToResetStyleCache: false\n });\n\n stateUpdate.instanceProps.scrollbarSize = getScrollbarSize();\n stateUpdate.instanceProps.scrollbarSizeMeasured = true;\n return stateUpdate;\n });\n }\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0 || typeof scrollTop === 'number' && scrollTop >= 0) {\n var stateUpdate = Grid._getScrollToPositionStateUpdate({\n prevState: this.state,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n } // refs don't work in `react-test-renderer`\n\n\n if (this._scrollingContainer) {\n // setting the ref's scrollLeft and scrollTop.\n // Somehow in MultiGrid the main grid doesn't trigger a update on mount.\n if (this._scrollingContainer.scrollLeft !== this.state.scrollLeft) {\n this._scrollingContainer.scrollLeft = this.state.scrollLeft;\n }\n\n if (this._scrollingContainer.scrollTop !== this.state.scrollTop) {\n this._scrollingContainer.scrollTop = this.state.scrollTop;\n }\n } // Don't update scroll offset if the size is 0; we don't render any cells in this case.\n // Setting a state may cause us to later thing we've updated the offce when we haven't.\n\n\n var sizeIsBiggerThanZero = height > 0 && width > 0;\n\n if (scrollToColumn >= 0 && sizeIsBiggerThanZero) {\n this._updateScrollLeftForScrollToColumn();\n }\n\n if (scrollToRow >= 0 && sizeIsBiggerThanZero) {\n this._updateScrollTopForScrollToRow();\n } // Update onRowsRendered callback\n\n\n this._invokeOnGridRenderedHelper(); // Initialize onScroll callback\n\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft || 0,\n scrollTop: scrollTop || 0,\n totalColumnsWidth: instanceProps.columnSizeAndPositionManager.getTotalSize(),\n totalRowsHeight: instanceProps.rowSizeAndPositionManager.getTotalSize()\n });\n\n this._maybeCallOnScrollbarPresenceChange();\n }\n /**\n * @private\n * This method updates scrollLeft/scrollTop in state for the following conditions:\n * 1) New scroll-to-cell props have been set\n */\n\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var _this2 = this;\n\n var _this$props5 = this.props,\n autoHeight = _this$props5.autoHeight,\n autoWidth = _this$props5.autoWidth,\n columnCount = _this$props5.columnCount,\n height = _this$props5.height,\n rowCount = _this$props5.rowCount,\n scrollToAlignment = _this$props5.scrollToAlignment,\n scrollToColumn = _this$props5.scrollToColumn,\n scrollToRow = _this$props5.scrollToRow,\n width = _this$props5.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollPositionChangeReason = _this$state.scrollPositionChangeReason,\n scrollTop = _this$state.scrollTop,\n instanceProps = _this$state.instanceProps; // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n // We must do this at the start of the method as we may calculate and update scroll position below.\n\n this._handleInvalidatedGridSize(); // Handle edge case where column or row count has only just increased over 0.\n // In this case we may have to restore a previously-specified scroll offset.\n // For more info see bvaughn/react-virtualized/issues/218\n\n\n var columnOrRowCountJustIncreasedFromZero = columnCount > 0 && prevProps.columnCount === 0 || rowCount > 0 && prevProps.rowCount === 0; // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n // So we only set these when we require an adjustment of the scroll position.\n // See issue #2 for more information.\n\n if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n // @TRICKY :autoHeight and :autoWidth properties instructs Grid to leave :scrollTop and :scrollLeft management to an external HOC (eg WindowScroller).\n // In this case we should avoid checking scrollingContainer.scrollTop and scrollingContainer.scrollLeft since it forces layout/flow.\n if (!autoWidth && scrollLeft >= 0 && (scrollLeft !== this._scrollingContainer.scrollLeft || columnOrRowCountJustIncreasedFromZero)) {\n this._scrollingContainer.scrollLeft = scrollLeft;\n }\n\n if (!autoHeight && scrollTop >= 0 && (scrollTop !== this._scrollingContainer.scrollTop || columnOrRowCountJustIncreasedFromZero)) {\n this._scrollingContainer.scrollTop = scrollTop;\n }\n } // Special case where the previous size was 0:\n // In this case we don't show any windowed cells at all.\n // So we should always recalculate offset afterwards.\n\n\n var sizeJustIncreasedFromZero = (prevProps.width === 0 || prevProps.height === 0) && height > 0 && width > 0; // Update scroll offsets if the current :scrollToColumn or :scrollToRow values requires it\n // @TODO Do we also need this check or can the one in componentWillUpdate() suffice?\n\n if (this._recomputeScrollLeftFlag) {\n this._recomputeScrollLeftFlag = false;\n\n this._updateScrollLeftForScrollToColumn(this.props);\n } else {\n updateScrollIndexHelper({\n cellSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n previousCellsCount: prevProps.columnCount,\n previousCellSize: prevProps.columnWidth,\n previousScrollToAlignment: prevProps.scrollToAlignment,\n previousScrollToIndex: prevProps.scrollToColumn,\n previousSize: prevProps.width,\n scrollOffset: scrollLeft,\n scrollToAlignment: scrollToAlignment,\n scrollToIndex: scrollToColumn,\n size: width,\n sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n updateScrollIndexCallback: function updateScrollIndexCallback() {\n return _this2._updateScrollLeftForScrollToColumn(_this2.props);\n }\n });\n }\n\n if (this._recomputeScrollTopFlag) {\n this._recomputeScrollTopFlag = false;\n\n this._updateScrollTopForScrollToRow(this.props);\n } else {\n updateScrollIndexHelper({\n cellSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n previousCellsCount: prevProps.rowCount,\n previousCellSize: prevProps.rowHeight,\n previousScrollToAlignment: prevProps.scrollToAlignment,\n previousScrollToIndex: prevProps.scrollToRow,\n previousSize: prevProps.height,\n scrollOffset: scrollTop,\n scrollToAlignment: scrollToAlignment,\n scrollToIndex: scrollToRow,\n size: height,\n sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n updateScrollIndexCallback: function updateScrollIndexCallback() {\n return _this2._updateScrollTopForScrollToRow(_this2.props);\n }\n });\n } // Update onRowsRendered callback if start/stop indices have changed\n\n\n this._invokeOnGridRenderedHelper(); // Changes to :scrollLeft or :scrollTop should also notify :onScroll listeners\n\n\n if (scrollLeft !== prevState.scrollLeft || scrollTop !== prevState.scrollTop) {\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n totalColumnsWidth: totalColumnsWidth,\n totalRowsHeight: totalRowsHeight\n });\n }\n\n this._maybeCallOnScrollbarPresenceChange();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n }\n }\n /**\n * This method updates scrollLeft/scrollTop in state for the following conditions:\n * 1) Empty content (0 rows or columns)\n * 2) New scroll props overriding the current state\n * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n */\n\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n autoContainerWidth = _this$props6.autoContainerWidth,\n autoHeight = _this$props6.autoHeight,\n autoWidth = _this$props6.autoWidth,\n className = _this$props6.className,\n containerProps = _this$props6.containerProps,\n containerRole = _this$props6.containerRole,\n containerStyle = _this$props6.containerStyle,\n height = _this$props6.height,\n id = _this$props6.id,\n noContentRenderer = _this$props6.noContentRenderer,\n role = _this$props6.role,\n style = _this$props6.style,\n tabIndex = _this$props6.tabIndex,\n width = _this$props6.width;\n var _this$state2 = this.state,\n instanceProps = _this$state2.instanceProps,\n needToResetStyleCache = _this$state2.needToResetStyleCache;\n\n var isScrolling = this._isScrolling();\n\n var gridStyle = {\n boxSizing: 'border-box',\n direction: 'ltr',\n height: autoHeight ? 'auto' : height,\n position: 'relative',\n width: autoWidth ? 'auto' : width,\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform'\n };\n\n if (needToResetStyleCache) {\n this._styleCache = {};\n } // calculate _styleCache here\n // if state.isScrolling (not from _isScrolling) then reset\n\n\n if (!this.state.isScrolling) {\n this._resetStyleCache();\n } // calculate children to render here\n\n\n this._calculateChildrenToRender(this.props, this.state);\n\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize(); // Force browser to hide scrollbars when we know they aren't necessary.\n // Otherwise once scrollbars appear they may not disappear again.\n // For more info see issue #116\n\n var verticalScrollBarSize = totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n var horizontalScrollBarSize = totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n\n if (horizontalScrollBarSize !== this._horizontalScrollBarSize || verticalScrollBarSize !== this._verticalScrollBarSize) {\n this._horizontalScrollBarSize = horizontalScrollBarSize;\n this._verticalScrollBarSize = verticalScrollBarSize;\n this._scrollbarPresenceChanged = true;\n } // Also explicitly init styles to 'auto' if scrollbars are required.\n // This works around an obscure edge case where external CSS styles have not yet been loaded,\n // But an initial scroll index of offset is set as an external prop.\n // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n // This was originally reported via clauderic/react-infinite-calendar/issues/23\n\n\n gridStyle.overflowX = totalColumnsWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n gridStyle.overflowY = totalRowsHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n var childrenToDisplay = this._childrenToDisplay;\n var showNoContentRenderer = childrenToDisplay.length === 0 && height > 0 && width > 0;\n return React.createElement(\"div\", _extends({\n ref: this._setScrollingContainerRef\n }, containerProps, {\n \"aria-label\": this.props['aria-label'],\n \"aria-readonly\": this.props['aria-readonly'],\n className: clsx('ReactVirtualized__Grid', className),\n id: id,\n onScroll: this._onScroll,\n role: role,\n style: _objectSpread({}, gridStyle, {}, style),\n tabIndex: tabIndex\n }), childrenToDisplay.length > 0 && React.createElement(\"div\", {\n className: \"ReactVirtualized__Grid__innerScrollContainer\",\n role: containerRole,\n style: _objectSpread({\n width: autoContainerWidth ? 'auto' : totalColumnsWidth,\n height: totalRowsHeight,\n maxWidth: totalColumnsWidth,\n maxHeight: totalRowsHeight,\n overflow: 'hidden',\n pointerEvents: isScrolling ? 'none' : '',\n position: 'relative'\n }, containerStyle)\n }, childrenToDisplay), showNoContentRenderer && noContentRenderer());\n }\n /* ---------------------------- Helper methods ---------------------------- */\n\n }, {\n key: \"_calculateChildrenToRender\",\n value: function _calculateChildrenToRender() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n var cellRenderer = props.cellRenderer,\n cellRangeRenderer = props.cellRangeRenderer,\n columnCount = props.columnCount,\n deferredMeasurementCache = props.deferredMeasurementCache,\n height = props.height,\n overscanColumnCount = props.overscanColumnCount,\n overscanIndicesGetter = props.overscanIndicesGetter,\n overscanRowCount = props.overscanRowCount,\n rowCount = props.rowCount,\n width = props.width,\n isScrollingOptOut = props.isScrollingOptOut;\n var scrollDirectionHorizontal = state.scrollDirectionHorizontal,\n scrollDirectionVertical = state.scrollDirectionVertical,\n instanceProps = state.instanceProps;\n var scrollTop = this._initialScrollTop > 0 ? this._initialScrollTop : state.scrollTop;\n var scrollLeft = this._initialScrollLeft > 0 ? this._initialScrollLeft : state.scrollLeft;\n\n var isScrolling = this._isScrolling(props, state);\n\n this._childrenToDisplay = []; // Render only enough columns and rows to cover the visible area of the grid.\n\n if (height > 0 && width > 0) {\n var visibleColumnIndices = instanceProps.columnSizeAndPositionManager.getVisibleCellRange({\n containerSize: width,\n offset: scrollLeft\n });\n var visibleRowIndices = instanceProps.rowSizeAndPositionManager.getVisibleCellRange({\n containerSize: height,\n offset: scrollTop\n });\n var horizontalOffsetAdjustment = instanceProps.columnSizeAndPositionManager.getOffsetAdjustment({\n containerSize: width,\n offset: scrollLeft\n });\n var verticalOffsetAdjustment = instanceProps.rowSizeAndPositionManager.getOffsetAdjustment({\n containerSize: height,\n offset: scrollTop\n }); // Store for _invokeOnGridRenderedHelper()\n\n this._renderedColumnStartIndex = visibleColumnIndices.start;\n this._renderedColumnStopIndex = visibleColumnIndices.stop;\n this._renderedRowStartIndex = visibleRowIndices.start;\n this._renderedRowStopIndex = visibleRowIndices.stop;\n var overscanColumnIndices = overscanIndicesGetter({\n direction: 'horizontal',\n cellCount: columnCount,\n overscanCellsCount: overscanColumnCount,\n scrollDirection: scrollDirectionHorizontal,\n startIndex: typeof visibleColumnIndices.start === 'number' ? visibleColumnIndices.start : 0,\n stopIndex: typeof visibleColumnIndices.stop === 'number' ? visibleColumnIndices.stop : -1\n });\n var overscanRowIndices = overscanIndicesGetter({\n direction: 'vertical',\n cellCount: rowCount,\n overscanCellsCount: overscanRowCount,\n scrollDirection: scrollDirectionVertical,\n startIndex: typeof visibleRowIndices.start === 'number' ? visibleRowIndices.start : 0,\n stopIndex: typeof visibleRowIndices.stop === 'number' ? visibleRowIndices.stop : -1\n }); // Store for _invokeOnGridRenderedHelper()\n\n var columnStartIndex = overscanColumnIndices.overscanStartIndex;\n var columnStopIndex = overscanColumnIndices.overscanStopIndex;\n var rowStartIndex = overscanRowIndices.overscanStartIndex;\n var rowStopIndex = overscanRowIndices.overscanStopIndex; // Advanced use-cases (eg CellMeasurer) require batched measurements to determine accurate sizes.\n\n if (deferredMeasurementCache) {\n // If rows have a dynamic height, scan the rows we are about to render.\n // If any have not yet been measured, then we need to render all columns initially,\n // Because the height of the row is equal to the tallest cell within that row,\n // (And so we can't know the height without measuring all column-cells first).\n if (!deferredMeasurementCache.hasFixedHeight()) {\n for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (!deferredMeasurementCache.has(rowIndex, 0)) {\n columnStartIndex = 0;\n columnStopIndex = columnCount - 1;\n break;\n }\n }\n } // If columns have a dynamic width, scan the columns we are about to render.\n // If any have not yet been measured, then we need to render all rows initially,\n // Because the width of the column is equal to the widest cell within that column,\n // (And so we can't know the width without measuring all row-cells first).\n\n\n if (!deferredMeasurementCache.hasFixedWidth()) {\n for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (!deferredMeasurementCache.has(0, columnIndex)) {\n rowStartIndex = 0;\n rowStopIndex = rowCount - 1;\n break;\n }\n }\n }\n }\n\n this._childrenToDisplay = cellRangeRenderer({\n cellCache: this._cellCache,\n cellRenderer: cellRenderer,\n columnSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n columnStartIndex: columnStartIndex,\n columnStopIndex: columnStopIndex,\n deferredMeasurementCache: deferredMeasurementCache,\n horizontalOffsetAdjustment: horizontalOffsetAdjustment,\n isScrolling: isScrolling,\n isScrollingOptOut: isScrollingOptOut,\n parent: this,\n rowSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n rowStartIndex: rowStartIndex,\n rowStopIndex: rowStopIndex,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n styleCache: this._styleCache,\n verticalOffsetAdjustment: verticalOffsetAdjustment,\n visibleColumnIndices: visibleColumnIndices,\n visibleRowIndices: visibleRowIndices\n }); // update the indices\n\n this._columnStartIndex = columnStartIndex;\n this._columnStopIndex = columnStopIndex;\n this._rowStartIndex = rowStartIndex;\n this._rowStopIndex = rowStopIndex;\n }\n }\n /**\n * Sets an :isScrolling flag for a small window of time.\n * This flag is used to disable pointer events on the scrollable portion of the Grid.\n * This prevents jerky/stuttery mouse-wheel scrolling.\n */\n\n }, {\n key: \"_debounceScrollEnded\",\n value: function _debounceScrollEnded() {\n var scrollingResetTimeInterval = this.props.scrollingResetTimeInterval;\n\n if (this._disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n }\n\n this._disablePointerEventsTimeoutId = requestAnimationTimeout(this._debounceScrollEndedCallback, scrollingResetTimeInterval);\n }\n }, {\n key: \"_handleInvalidatedGridSize\",\n\n /**\n * Check for batched CellMeasurer size invalidations.\n * This will occur the first time one or more previously unmeasured cells are rendered.\n */\n value: function _handleInvalidatedGridSize() {\n if (typeof this._deferredInvalidateColumnIndex === 'number' && typeof this._deferredInvalidateRowIndex === 'number') {\n var columnIndex = this._deferredInvalidateColumnIndex;\n var rowIndex = this._deferredInvalidateRowIndex;\n this._deferredInvalidateColumnIndex = null;\n this._deferredInvalidateRowIndex = null;\n this.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n }\n }\n }, {\n key: \"_invokeOnScrollMemoizer\",\n value: function _invokeOnScrollMemoizer(_ref6) {\n var _this3 = this;\n\n var scrollLeft = _ref6.scrollLeft,\n scrollTop = _ref6.scrollTop,\n totalColumnsWidth = _ref6.totalColumnsWidth,\n totalRowsHeight = _ref6.totalRowsHeight;\n\n this._onScrollMemoizer({\n callback: function callback(_ref7) {\n var scrollLeft = _ref7.scrollLeft,\n scrollTop = _ref7.scrollTop;\n var _this3$props = _this3.props,\n height = _this3$props.height,\n onScroll = _this3$props.onScroll,\n width = _this3$props.width;\n onScroll({\n clientHeight: height,\n clientWidth: width,\n scrollHeight: totalRowsHeight,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: totalColumnsWidth\n });\n },\n indices: {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n }\n });\n }\n }, {\n key: \"_isScrolling\",\n value: function _isScrolling() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n // If isScrolling is defined in props, use it to override the value in state\n // This is a performance optimization for WindowScroller + Grid\n return Object.hasOwnProperty.call(props, 'isScrolling') ? Boolean(props.isScrolling) : Boolean(state.isScrolling);\n }\n }, {\n key: \"_maybeCallOnScrollbarPresenceChange\",\n value: function _maybeCallOnScrollbarPresenceChange() {\n if (this._scrollbarPresenceChanged) {\n var onScrollbarPresenceChange = this.props.onScrollbarPresenceChange;\n this._scrollbarPresenceChanged = false;\n onScrollbarPresenceChange({\n horizontal: this._horizontalScrollBarSize > 0,\n size: this.state.instanceProps.scrollbarSize,\n vertical: this._verticalScrollBarSize > 0\n });\n }\n }\n }, {\n key: \"scrollToPosition\",\n\n /**\n * Scroll to the specified offset(s).\n * Useful for animating position changes.\n */\n value: function scrollToPosition(_ref8) {\n var scrollLeft = _ref8.scrollLeft,\n scrollTop = _ref8.scrollTop;\n\n var stateUpdate = Grid._getScrollToPositionStateUpdate({\n prevState: this.state,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }, {\n key: \"_getCalculatedScrollLeft\",\n value: function _getCalculatedScrollLeft() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n return Grid._getCalculatedScrollLeft(props, state);\n }\n }, {\n key: \"_updateScrollLeftForScrollToColumn\",\n value: function _updateScrollLeftForScrollToColumn() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n var stateUpdate = Grid._getScrollLeftForScrollToColumnStateUpdate(props, state);\n\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }, {\n key: \"_getCalculatedScrollTop\",\n value: function _getCalculatedScrollTop() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n return Grid._getCalculatedScrollTop(props, state);\n }\n }, {\n key: \"_resetStyleCache\",\n value: function _resetStyleCache() {\n var styleCache = this._styleCache;\n var cellCache = this._cellCache;\n var isScrollingOptOut = this.props.isScrollingOptOut; // Reset cell and style caches once scrolling stops.\n // This makes Grid simpler to use (since cells commonly change).\n // And it keeps the caches from growing too large.\n // Performance is most sensitive when a user is scrolling.\n // Don't clear visible cells from cellCache if isScrollingOptOut is specified.\n // This keeps the cellCache to a resonable size.\n\n this._cellCache = {};\n this._styleCache = {}; // Copy over the visible cell styles so avoid unnecessary re-render.\n\n for (var rowIndex = this._rowStartIndex; rowIndex <= this._rowStopIndex; rowIndex++) {\n for (var columnIndex = this._columnStartIndex; columnIndex <= this._columnStopIndex; columnIndex++) {\n var key = \"\".concat(rowIndex, \"-\").concat(columnIndex);\n this._styleCache[key] = styleCache[key];\n\n if (isScrollingOptOut) {\n this._cellCache[key] = cellCache[key];\n }\n }\n }\n }\n }, {\n key: \"_updateScrollTopForScrollToRow\",\n value: function _updateScrollTopForScrollToRow() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n var stateUpdate = Grid._getScrollTopForScrollToRowStateUpdate(props, state);\n\n if (stateUpdate) {\n stateUpdate.needToResetStyleCache = false;\n this.setState(stateUpdate);\n }\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var newState = {};\n\n if (nextProps.columnCount === 0 && prevState.scrollLeft !== 0 || nextProps.rowCount === 0 && prevState.scrollTop !== 0) {\n newState.scrollLeft = 0;\n newState.scrollTop = 0; // only use scroll{Left,Top} from props if scrollTo{Column,Row} isn't specified\n // scrollTo{Column,Row} should override scroll{Left,Top}\n } else if (nextProps.scrollLeft !== prevState.scrollLeft && nextProps.scrollToColumn < 0 || nextProps.scrollTop !== prevState.scrollTop && nextProps.scrollToRow < 0) {\n Object.assign(newState, Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: nextProps.scrollLeft,\n scrollTop: nextProps.scrollTop\n }));\n }\n\n var instanceProps = prevState.instanceProps; // Initially we should not clearStyleCache\n\n newState.needToResetStyleCache = false;\n\n if (nextProps.columnWidth !== instanceProps.prevColumnWidth || nextProps.rowHeight !== instanceProps.prevRowHeight) {\n // Reset cache. set it to {} in render\n newState.needToResetStyleCache = true;\n }\n\n instanceProps.columnSizeAndPositionManager.configure({\n cellCount: nextProps.columnCount,\n estimatedCellSize: Grid._getEstimatedColumnSize(nextProps),\n cellSizeGetter: Grid._wrapSizeGetter(nextProps.columnWidth)\n });\n instanceProps.rowSizeAndPositionManager.configure({\n cellCount: nextProps.rowCount,\n estimatedCellSize: Grid._getEstimatedRowSize(nextProps),\n cellSizeGetter: Grid._wrapSizeGetter(nextProps.rowHeight)\n });\n\n if (instanceProps.prevColumnCount === 0 || instanceProps.prevRowCount === 0) {\n instanceProps.prevColumnCount = 0;\n instanceProps.prevRowCount = 0;\n } // If scrolling is controlled outside this component, clear cache when scrolling stops\n\n\n if (nextProps.autoHeight && nextProps.isScrolling === false && instanceProps.prevIsScrolling === true) {\n Object.assign(newState, {\n isScrolling: false\n });\n }\n\n var maybeStateA;\n var maybeStateB;\n calculateSizeAndPositionDataAndUpdateScrollOffset({\n cellCount: instanceProps.prevColumnCount,\n cellSize: typeof instanceProps.prevColumnWidth === 'number' ? instanceProps.prevColumnWidth : null,\n computeMetadataCallback: function computeMetadataCallback() {\n return instanceProps.columnSizeAndPositionManager.resetCell(0);\n },\n computeMetadataCallbackProps: nextProps,\n nextCellsCount: nextProps.columnCount,\n nextCellSize: typeof nextProps.columnWidth === 'number' ? nextProps.columnWidth : null,\n nextScrollToIndex: nextProps.scrollToColumn,\n scrollToIndex: instanceProps.prevScrollToColumn,\n updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n maybeStateA = Grid._getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState);\n }\n });\n calculateSizeAndPositionDataAndUpdateScrollOffset({\n cellCount: instanceProps.prevRowCount,\n cellSize: typeof instanceProps.prevRowHeight === 'number' ? instanceProps.prevRowHeight : null,\n computeMetadataCallback: function computeMetadataCallback() {\n return instanceProps.rowSizeAndPositionManager.resetCell(0);\n },\n computeMetadataCallbackProps: nextProps,\n nextCellsCount: nextProps.rowCount,\n nextCellSize: typeof nextProps.rowHeight === 'number' ? nextProps.rowHeight : null,\n nextScrollToIndex: nextProps.scrollToRow,\n scrollToIndex: instanceProps.prevScrollToRow,\n updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n maybeStateB = Grid._getScrollTopForScrollToRowStateUpdate(nextProps, prevState);\n }\n });\n instanceProps.prevColumnCount = nextProps.columnCount;\n instanceProps.prevColumnWidth = nextProps.columnWidth;\n instanceProps.prevIsScrolling = nextProps.isScrolling === true;\n instanceProps.prevRowCount = nextProps.rowCount;\n instanceProps.prevRowHeight = nextProps.rowHeight;\n instanceProps.prevScrollToColumn = nextProps.scrollToColumn;\n instanceProps.prevScrollToRow = nextProps.scrollToRow; // getting scrollBarSize (moved from componentWillMount)\n\n instanceProps.scrollbarSize = nextProps.getScrollbarSize();\n\n if (instanceProps.scrollbarSize === undefined) {\n instanceProps.scrollbarSizeMeasured = false;\n instanceProps.scrollbarSize = 0;\n } else {\n instanceProps.scrollbarSizeMeasured = true;\n }\n\n newState.instanceProps = instanceProps;\n return _objectSpread({}, newState, {}, maybeStateA, {}, maybeStateB);\n }\n }, {\n key: \"_getEstimatedColumnSize\",\n value: function _getEstimatedColumnSize(props) {\n return typeof props.columnWidth === 'number' ? props.columnWidth : props.estimatedColumnSize;\n }\n }, {\n key: \"_getEstimatedRowSize\",\n value: function _getEstimatedRowSize(props) {\n return typeof props.rowHeight === 'number' ? props.rowHeight : props.estimatedRowSize;\n }\n }, {\n key: \"_getScrollToPositionStateUpdate\",\n\n /**\n * Get the updated state after scrolling to\n * scrollLeft and scrollTop\n */\n value: function _getScrollToPositionStateUpdate(_ref9) {\n var prevState = _ref9.prevState,\n scrollLeft = _ref9.scrollLeft,\n scrollTop = _ref9.scrollTop;\n var newState = {\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n };\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0) {\n newState.scrollDirectionHorizontal = scrollLeft > prevState.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n newState.scrollLeft = scrollLeft;\n }\n\n if (typeof scrollTop === 'number' && scrollTop >= 0) {\n newState.scrollDirectionVertical = scrollTop > prevState.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n newState.scrollTop = scrollTop;\n }\n\n if (typeof scrollLeft === 'number' && scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft || typeof scrollTop === 'number' && scrollTop >= 0 && scrollTop !== prevState.scrollTop) {\n return newState;\n }\n\n return {};\n }\n }, {\n key: \"_wrapSizeGetter\",\n value: function _wrapSizeGetter(value) {\n return typeof value === 'function' ? value : function () {\n return value;\n };\n }\n }, {\n key: \"_getCalculatedScrollLeft\",\n value: function _getCalculatedScrollLeft(nextProps, prevState) {\n var columnCount = nextProps.columnCount,\n height = nextProps.height,\n scrollToAlignment = nextProps.scrollToAlignment,\n scrollToColumn = nextProps.scrollToColumn,\n width = nextProps.width;\n var scrollLeft = prevState.scrollLeft,\n instanceProps = prevState.instanceProps;\n\n if (columnCount > 0) {\n var finalColumn = columnCount - 1;\n var targetIndex = scrollToColumn < 0 ? finalColumn : Math.min(finalColumn, scrollToColumn);\n var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n return instanceProps.columnSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: scrollToAlignment,\n containerSize: width - scrollBarSize,\n currentOffset: scrollLeft,\n targetIndex: targetIndex\n });\n }\n\n return 0;\n }\n }, {\n key: \"_getScrollLeftForScrollToColumnStateUpdate\",\n value: function _getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState) {\n var scrollLeft = prevState.scrollLeft;\n\n var calculatedScrollLeft = Grid._getCalculatedScrollLeft(nextProps, prevState);\n\n if (typeof calculatedScrollLeft === 'number' && calculatedScrollLeft >= 0 && scrollLeft !== calculatedScrollLeft) {\n return Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: calculatedScrollLeft,\n scrollTop: -1\n });\n }\n\n return {};\n }\n }, {\n key: \"_getCalculatedScrollTop\",\n value: function _getCalculatedScrollTop(nextProps, prevState) {\n var height = nextProps.height,\n rowCount = nextProps.rowCount,\n scrollToAlignment = nextProps.scrollToAlignment,\n scrollToRow = nextProps.scrollToRow,\n width = nextProps.width;\n var scrollTop = prevState.scrollTop,\n instanceProps = prevState.instanceProps;\n\n if (rowCount > 0) {\n var finalRow = rowCount - 1;\n var targetIndex = scrollToRow < 0 ? finalRow : Math.min(finalRow, scrollToRow);\n var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n return instanceProps.rowSizeAndPositionManager.getUpdatedOffsetForIndex({\n align: scrollToAlignment,\n containerSize: height - scrollBarSize,\n currentOffset: scrollTop,\n targetIndex: targetIndex\n });\n }\n\n return 0;\n }\n }, {\n key: \"_getScrollTopForScrollToRowStateUpdate\",\n value: function _getScrollTopForScrollToRowStateUpdate(nextProps, prevState) {\n var scrollTop = prevState.scrollTop;\n\n var calculatedScrollTop = Grid._getCalculatedScrollTop(nextProps, prevState);\n\n if (typeof calculatedScrollTop === 'number' && calculatedScrollTop >= 0 && scrollTop !== calculatedScrollTop) {\n return Grid._getScrollToPositionStateUpdate({\n prevState: prevState,\n scrollLeft: -1,\n scrollTop: calculatedScrollTop\n });\n }\n\n return {};\n }\n }]);\n\n return Grid;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n \"aria-label\": PropTypes.string.isRequired,\n \"aria-readonly\": PropTypes.bool,\n\n /**\n * Set the width of the inner scrollable container to 'auto'.\n * This is useful for single-column Grids to ensure that the column doesn't extend below a vertical scrollbar.\n */\n \"autoContainerWidth\": PropTypes.bool.isRequired,\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height of rows can stretch the window.\n * Intended for use with WindowScroller\n */\n \"autoHeight\": PropTypes.bool.isRequired,\n\n /**\n * Removes fixed width from the scrollingContainer so that the total width of rows can stretch the window.\n * Intended for use with WindowScroller\n */\n \"autoWidth\": PropTypes.bool.isRequired,\n\n /** Responsible for rendering a cell given an row and column index. */\n \"cellRenderer\": function cellRenderer() {\n return (typeof bpfrpt_proptype_CellRenderer === \"function\" ? bpfrpt_proptype_CellRenderer.isRequired ? bpfrpt_proptype_CellRenderer.isRequired : bpfrpt_proptype_CellRenderer : PropTypes.shape(bpfrpt_proptype_CellRenderer).isRequired).apply(this, arguments);\n },\n\n /** Responsible for rendering a group of cells given their index ranges. */\n \"cellRangeRenderer\": function cellRangeRenderer() {\n return (typeof bpfrpt_proptype_CellRangeRenderer === \"function\" ? bpfrpt_proptype_CellRangeRenderer.isRequired ? bpfrpt_proptype_CellRangeRenderer.isRequired : bpfrpt_proptype_CellRangeRenderer : PropTypes.shape(bpfrpt_proptype_CellRangeRenderer).isRequired).apply(this, arguments);\n },\n\n /** Optional custom CSS class name to attach to root Grid element. */\n \"className\": PropTypes.string,\n\n /** Number of columns in grid. */\n \"columnCount\": PropTypes.number.isRequired,\n\n /** Either a fixed column width (number) or a function that returns the width of a column given its index. */\n \"columnWidth\": function columnWidth() {\n return (typeof bpfrpt_proptype_CellSize === \"function\" ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n /** Unfiltered props for the Grid container. */\n \"containerProps\": PropTypes.object,\n\n /** ARIA role for the cell-container. */\n \"containerRole\": PropTypes.string.isRequired,\n\n /** Optional inline style applied to inner cell-container */\n \"containerStyle\": PropTypes.object.isRequired,\n\n /**\n * If CellMeasurer is used to measure this Grid's children, this should be a pointer to its CellMeasurerCache.\n * A shared CellMeasurerCache reference enables Grid and CellMeasurer to share measurement data.\n */\n \"deferredMeasurementCache\": PropTypes.object,\n\n /**\n * Used to estimate the total width of a Grid before all of its columns have actually been measured.\n * The estimated total width is adjusted as columns are rendered.\n */\n \"estimatedColumnSize\": PropTypes.number.isRequired,\n\n /**\n * Used to estimate the total height of a Grid before all of its rows have actually been measured.\n * The estimated total height is adjusted as rows are rendered.\n */\n \"estimatedRowSize\": PropTypes.number.isRequired,\n\n /** Exposed for testing purposes only. */\n \"getScrollbarSize\": PropTypes.func.isRequired,\n\n /** Height of Grid; this property determines the number of visible (vs virtualized) rows. */\n \"height\": PropTypes.number.isRequired,\n\n /** Optional custom id to attach to root Grid element. */\n \"id\": PropTypes.string,\n\n /**\n * Override internal is-scrolling state tracking.\n * This property is primarily intended for use with the WindowScroller component.\n */\n \"isScrolling\": PropTypes.bool,\n\n /**\n * Opt-out of isScrolling param passed to cellRangeRenderer.\n * To avoid the extra render when scroll stops.\n */\n \"isScrollingOptOut\": PropTypes.bool.isRequired,\n\n /** Optional renderer to be used in place of rows when either :rowCount or :columnCount is 0. */\n \"noContentRenderer\": function noContentRenderer() {\n return (typeof bpfrpt_proptype_NoContentRenderer === \"function\" ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n },\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n */\n \"onScroll\": PropTypes.func.isRequired,\n\n /**\n * Called whenever a horizontal or vertical scrollbar is added or removed.\n * This prop is not intended for end-user use;\n * It is used by MultiGrid to support fixed-row/fixed-column scroll syncing.\n */\n \"onScrollbarPresenceChange\": PropTypes.func.isRequired,\n\n /** Callback invoked with information about the section of the Grid that was just rendered. */\n \"onSectionRendered\": PropTypes.func.isRequired,\n\n /**\n * Number of columns to render before/after the visible section of the grid.\n * These columns can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n */\n \"overscanColumnCount\": PropTypes.number.isRequired,\n\n /**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n \"overscanIndicesGetter\": function overscanIndicesGetter() {\n return (typeof bpfrpt_proptype_OverscanIndicesGetter === \"function\" ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n },\n\n /**\n * Number of rows to render above/below the visible section of the grid.\n * These rows can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n */\n \"overscanRowCount\": PropTypes.number.isRequired,\n\n /** ARIA role for the grid element. */\n \"role\": PropTypes.string.isRequired,\n\n /**\n * Either a fixed row height (number) or a function that returns the height of a row given its index.\n * Should implement the following interface: ({ index: number }): number\n */\n \"rowHeight\": function rowHeight() {\n return (typeof bpfrpt_proptype_CellSize === \"function\" ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n /** Number of rows in grid. */\n \"rowCount\": PropTypes.number.isRequired,\n\n /** Wait this amount of time after the last scroll event before resetting Grid `pointer-events`. */\n \"scrollingResetTimeInterval\": PropTypes.number.isRequired,\n\n /** Horizontal offset. */\n \"scrollLeft\": PropTypes.number,\n\n /**\n * Controls scroll-to-cell behavior of the Grid.\n * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n */\n \"scrollToAlignment\": function scrollToAlignment() {\n return (typeof bpfrpt_proptype_Alignment === \"function\" ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n },\n\n /** Column index to ensure visible (by forcefully scrolling if necessary) */\n \"scrollToColumn\": PropTypes.number.isRequired,\n\n /** Vertical offset. */\n \"scrollTop\": PropTypes.number,\n\n /** Row index to ensure visible (by forcefully scrolling if necessary) */\n \"scrollToRow\": PropTypes.number.isRequired,\n\n /** Optional inline style */\n \"style\": PropTypes.object.isRequired,\n\n /** Tab index for focus */\n \"tabIndex\": PropTypes.number,\n\n /** Width of Grid; this property determines the number of visible (vs virtualized) columns. */\n \"width\": PropTypes.number.isRequired\n}), _temp);\n\n_defineProperty(Grid, \"defaultProps\", {\n 'aria-label': 'grid',\n 'aria-readonly': true,\n autoContainerWidth: false,\n autoHeight: false,\n autoWidth: false,\n cellRangeRenderer: defaultCellRangeRenderer,\n containerRole: 'rowgroup',\n containerStyle: {},\n estimatedColumnSize: 100,\n estimatedRowSize: 30,\n getScrollbarSize: scrollbarSize,\n noContentRenderer: renderNull,\n onScroll: function onScroll() {},\n onScrollbarPresenceChange: function onScrollbarPresenceChange() {},\n onSectionRendered: function onSectionRendered() {},\n overscanColumnCount: 0,\n overscanIndicesGetter: defaultOverscanIndicesGetter,\n overscanRowCount: 10,\n role: 'grid',\n scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n scrollToAlignment: 'auto',\n scrollToColumn: -1,\n scrollToRow: -1,\n style: {},\n tabIndex: 0,\n isScrollingOptOut: false\n});\n\npolyfill(Grid);\nexport default Grid;\nimport { bpfrpt_proptype_CellRenderer } from \"./types\";\nimport { bpfrpt_proptype_CellRangeRenderer } from \"./types\";\nimport { bpfrpt_proptype_CellPosition } from \"./types\";\nimport { bpfrpt_proptype_CellSize } from \"./types\";\nimport { bpfrpt_proptype_CellSizeGetter } from \"./types\";\nimport { bpfrpt_proptype_NoContentRenderer } from \"./types\";\nimport { bpfrpt_proptype_Scroll } from \"./types\";\nimport { bpfrpt_proptype_ScrollbarPresenceChange } from \"./types\";\nimport { bpfrpt_proptype_RenderedSection } from \"./types\";\nimport { bpfrpt_proptype_OverscanIndicesGetter } from \"./types\";\nimport { bpfrpt_proptype_Alignment } from \"./types\";\nimport { bpfrpt_proptype_CellCache } from \"./types\";\nimport { bpfrpt_proptype_StyleCache } from \"./types\";\nimport { bpfrpt_proptype_AnimationTimeoutId } from \"../utils/requestAnimationTimeout\";\nimport PropTypes from \"prop-types\";","import { caf, raf } from './animationFrame';\nvar bpfrpt_proptype_AnimationTimeoutId = process.env.NODE_ENV === 'production' ? null : {\n \"id\": PropTypes.number.isRequired\n};\nexport var cancelAnimationTimeout = function cancelAnimationTimeout(frame) {\n return caf(frame.id);\n};\n/**\n * Recursively calls requestAnimationFrame until a specified delay has been met or exceeded.\n * When the delay time has been reached the function you're timing out will be called.\n *\n * Credit: Joe Lambert (https://gist.github.com/joelambert/1002116#file-requesttimeout-js)\n */\n\nexport var requestAnimationTimeout = function requestAnimationTimeout(callback, delay) {\n var start; // wait for end of processing current event handler, because event handler may be long\n\n Promise.resolve().then(function () {\n start = Date.now();\n });\n\n var timeout = function timeout() {\n if (Date.now() - start >= delay) {\n callback.call();\n } else {\n frame.id = raf(timeout);\n }\n };\n\n var frame = {\n id: raf(timeout)\n };\n return frame;\n};\nimport PropTypes from \"prop-types\";\nexport { bpfrpt_proptype_AnimationTimeoutId };","export var SCROLL_DIRECTION_BACKWARD = -1;\nexport var SCROLL_DIRECTION_FORWARD = 1;\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n var cellCount = _ref.cellCount,\n overscanCellsCount = _ref.overscanCellsCount,\n scrollDirection = _ref.scrollDirection,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n return {\n overscanStartIndex: Math.max(0, startIndex),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n };\n } else {\n return {\n overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex)\n };\n }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from \"./types\";\nimport { bpfrpt_proptype_OverscanIndices } from \"./types\";","/**\n * Default implementation of cellRangeRenderer used by Grid.\n * This renderer supports cell-caching while the user is scrolling.\n */\nexport default function defaultCellRangeRenderer(_ref) {\n var cellCache = _ref.cellCache,\n cellRenderer = _ref.cellRenderer,\n columnSizeAndPositionManager = _ref.columnSizeAndPositionManager,\n columnStartIndex = _ref.columnStartIndex,\n columnStopIndex = _ref.columnStopIndex,\n deferredMeasurementCache = _ref.deferredMeasurementCache,\n horizontalOffsetAdjustment = _ref.horizontalOffsetAdjustment,\n isScrolling = _ref.isScrolling,\n isScrollingOptOut = _ref.isScrollingOptOut,\n parent = _ref.parent,\n rowSizeAndPositionManager = _ref.rowSizeAndPositionManager,\n rowStartIndex = _ref.rowStartIndex,\n rowStopIndex = _ref.rowStopIndex,\n styleCache = _ref.styleCache,\n verticalOffsetAdjustment = _ref.verticalOffsetAdjustment,\n visibleColumnIndices = _ref.visibleColumnIndices,\n visibleRowIndices = _ref.visibleRowIndices;\n var renderedCells = []; // Browsers have native size limits for elements (eg Chrome 33M pixels, IE 1.5M pixes).\n // User cannot scroll beyond these size limitations.\n // In order to work around this, ScalingCellSizeAndPositionManager compresses offsets.\n // We should never cache styles for compressed offsets though as this can lead to bugs.\n // See issue #576 for more.\n\n var areOffsetsAdjusted = columnSizeAndPositionManager.areOffsetsAdjusted() || rowSizeAndPositionManager.areOffsetsAdjusted();\n var canCacheStyle = !isScrolling && !areOffsetsAdjusted;\n\n for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n var rowDatum = rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n\n for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n var columnDatum = columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n var isVisible = columnIndex >= visibleColumnIndices.start && columnIndex <= visibleColumnIndices.stop && rowIndex >= visibleRowIndices.start && rowIndex <= visibleRowIndices.stop;\n var key = \"\".concat(rowIndex, \"-\").concat(columnIndex);\n var style = void 0; // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n\n if (canCacheStyle && styleCache[key]) {\n style = styleCache[key];\n } else {\n // In deferred mode, cells will be initially rendered before we know their size.\n // Don't interfere with CellMeasurer's measurements by setting an invalid size.\n if (deferredMeasurementCache && !deferredMeasurementCache.has(rowIndex, columnIndex)) {\n // Position not-yet-measured cells at top/left 0,0,\n // And give them width/height of 'auto' so they can grow larger than the parent Grid if necessary.\n // Positioning them further to the right/bottom influences their measured size.\n style = {\n height: 'auto',\n left: 0,\n position: 'absolute',\n top: 0,\n width: 'auto'\n };\n } else {\n style = {\n height: rowDatum.size,\n left: columnDatum.offset + horizontalOffsetAdjustment,\n position: 'absolute',\n top: rowDatum.offset + verticalOffsetAdjustment,\n width: columnDatum.size\n };\n styleCache[key] = style;\n }\n }\n\n var cellRendererParams = {\n columnIndex: columnIndex,\n isScrolling: isScrolling,\n isVisible: isVisible,\n key: key,\n parent: parent,\n rowIndex: rowIndex,\n style: style\n };\n var renderedCell = void 0; // Avoid re-creating cells while scrolling.\n // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n // If a scroll is in progress- cache and reuse cells.\n // This cache will be thrown away once scrolling completes.\n // However if we are scaling scroll positions and sizes, we should also avoid caching.\n // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n // For more info refer to issue #395\n //\n // If isScrollingOptOut is specified, we always cache cells.\n // For more info refer to issue #1028\n\n if ((isScrollingOptOut || isScrolling) && !horizontalOffsetAdjustment && !verticalOffsetAdjustment) {\n if (!cellCache[key]) {\n cellCache[key] = cellRenderer(cellRendererParams);\n }\n\n renderedCell = cellCache[key]; // If the user is no longer scrolling, don't cache cells.\n // This makes dynamic cell content difficult for users and would also lead to a heavier memory footprint.\n } else {\n renderedCell = cellRenderer(cellRendererParams);\n }\n\n if (renderedCell == null || renderedCell === false) {\n continue;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n warnAboutMissingStyle(parent, renderedCell);\n }\n\n renderedCells.push(renderedCell);\n }\n }\n\n return renderedCells;\n}\n\nfunction warnAboutMissingStyle(parent, renderedCell) {\n if (process.env.NODE_ENV !== 'production') {\n if (renderedCell) {\n // If the direct child is a CellMeasurer, then we should check its child\n // See issue #611\n if (renderedCell.type && renderedCell.type.__internalCellMeasurerFlag) {\n renderedCell = renderedCell.props.children;\n }\n\n if (renderedCell && renderedCell.props && renderedCell.props.style === undefined && parent.__warnedAboutMissingStyle !== true) {\n parent.__warnedAboutMissingStyle = true;\n console.warn('Rendered cell should include style property for positioning.');\n }\n }\n }\n}\n\nimport { bpfrpt_proptype_CellRangeRendererParams } from \"./types\";","export var SCROLL_DIRECTION_BACKWARD = -1;\nexport var SCROLL_DIRECTION_FORWARD = 1;\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n var cellCount = _ref.cellCount,\n overscanCellsCount = _ref.overscanCellsCount,\n scrollDirection = _ref.scrollDirection,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n // Make sure we render at least 1 cell extra before and after (except near boundaries)\n // This is necessary in order to support keyboard navigation (TAB/SHIFT+TAB) in some cases\n // For more info see issues #625\n overscanCellsCount = Math.max(1, overscanCellsCount);\n\n if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n return {\n overscanStartIndex: Math.max(0, startIndex - 1),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n };\n } else {\n return {\n overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + 1)\n };\n }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from \"./types\";\nimport { bpfrpt_proptype_OverscanIndices } from \"./types\";","var bpfrpt_proptype_ScrollIndices = process.env.NODE_ENV === 'production' ? null : {\n \"scrollToColumn\": PropTypes.number.isRequired,\n \"scrollToRow\": PropTypes.number.isRequired\n};\nimport PropTypes from \"prop-types\";\nexport { bpfrpt_proptype_ScrollIndices };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\n/**\n * This HOC decorates a virtualized component and responds to arrow-key events by scrolling one row or column at a time.\n */\n\nvar ArrowKeyStepper = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(ArrowKeyStepper, _React$PureComponent);\n\n function ArrowKeyStepper() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, ArrowKeyStepper);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ArrowKeyStepper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n scrollToColumn: 0,\n scrollToRow: 0,\n instanceProps: {\n prevScrollToColumn: 0,\n prevScrollToRow: 0\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_columnStartIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_columnStopIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_rowStartIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_rowStopIndex\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_onKeyDown\", function (event) {\n var _this$props = _this.props,\n columnCount = _this$props.columnCount,\n disabled = _this$props.disabled,\n mode = _this$props.mode,\n rowCount = _this$props.rowCount;\n\n if (disabled) {\n return;\n }\n\n var _this$_getScrollState = _this._getScrollState(),\n scrollToColumnPrevious = _this$_getScrollState.scrollToColumn,\n scrollToRowPrevious = _this$_getScrollState.scrollToRow;\n\n var _this$_getScrollState2 = _this._getScrollState(),\n scrollToColumn = _this$_getScrollState2.scrollToColumn,\n scrollToRow = _this$_getScrollState2.scrollToRow; // The above cases all prevent default event event behavior.\n // This is to keep the grid from scrolling after the snap-to update.\n\n\n switch (event.key) {\n case 'ArrowDown':\n scrollToRow = mode === 'cells' ? Math.min(scrollToRow + 1, rowCount - 1) : Math.min(_this._rowStopIndex + 1, rowCount - 1);\n break;\n\n case 'ArrowLeft':\n scrollToColumn = mode === 'cells' ? Math.max(scrollToColumn - 1, 0) : Math.max(_this._columnStartIndex - 1, 0);\n break;\n\n case 'ArrowRight':\n scrollToColumn = mode === 'cells' ? Math.min(scrollToColumn + 1, columnCount - 1) : Math.min(_this._columnStopIndex + 1, columnCount - 1);\n break;\n\n case 'ArrowUp':\n scrollToRow = mode === 'cells' ? Math.max(scrollToRow - 1, 0) : Math.max(_this._rowStartIndex - 1, 0);\n break;\n }\n\n if (scrollToColumn !== scrollToColumnPrevious || scrollToRow !== scrollToRowPrevious) {\n event.preventDefault();\n\n _this._updateScrollState({\n scrollToColumn: scrollToColumn,\n scrollToRow: scrollToRow\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onSectionRendered\", function (_ref) {\n var columnStartIndex = _ref.columnStartIndex,\n columnStopIndex = _ref.columnStopIndex,\n rowStartIndex = _ref.rowStartIndex,\n rowStopIndex = _ref.rowStopIndex;\n _this._columnStartIndex = columnStartIndex;\n _this._columnStopIndex = columnStopIndex;\n _this._rowStartIndex = rowStartIndex;\n _this._rowStopIndex = rowStopIndex;\n });\n\n return _this;\n }\n\n _createClass(ArrowKeyStepper, [{\n key: \"setScrollIndexes\",\n value: function setScrollIndexes(_ref2) {\n var scrollToColumn = _ref2.scrollToColumn,\n scrollToRow = _ref2.scrollToRow;\n this.setState({\n scrollToRow: scrollToRow,\n scrollToColumn: scrollToColumn\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n children = _this$props2.children;\n\n var _this$_getScrollState3 = this._getScrollState(),\n scrollToColumn = _this$_getScrollState3.scrollToColumn,\n scrollToRow = _this$_getScrollState3.scrollToRow;\n\n return React.createElement(\"div\", {\n className: className,\n onKeyDown: this._onKeyDown\n }, children({\n onSectionRendered: this._onSectionRendered,\n scrollToColumn: scrollToColumn,\n scrollToRow: scrollToRow\n }));\n }\n }, {\n key: \"_getScrollState\",\n value: function _getScrollState() {\n return this.props.isControlled ? this.props : this.state;\n }\n }, {\n key: \"_updateScrollState\",\n value: function _updateScrollState(_ref3) {\n var scrollToColumn = _ref3.scrollToColumn,\n scrollToRow = _ref3.scrollToRow;\n var _this$props3 = this.props,\n isControlled = _this$props3.isControlled,\n onScrollToChange = _this$props3.onScrollToChange;\n\n if (typeof onScrollToChange === 'function') {\n onScrollToChange({\n scrollToColumn: scrollToColumn,\n scrollToRow: scrollToRow\n });\n }\n\n if (!isControlled) {\n this.setState({\n scrollToColumn: scrollToColumn,\n scrollToRow: scrollToRow\n });\n }\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.isControlled) {\n return {};\n }\n\n if (nextProps.scrollToColumn !== prevState.instanceProps.prevScrollToColumn || nextProps.scrollToRow !== prevState.instanceProps.prevScrollToRow) {\n return _objectSpread({}, prevState, {\n scrollToColumn: nextProps.scrollToColumn,\n scrollToRow: nextProps.scrollToRow,\n instanceProps: {\n prevScrollToColumn: nextProps.scrollToColumn,\n prevScrollToRow: nextProps.scrollToRow\n }\n });\n }\n\n return {};\n }\n }]);\n\n return ArrowKeyStepper;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n \"children\": PropTypes.func.isRequired,\n \"className\": PropTypes.string,\n \"columnCount\": PropTypes.number.isRequired,\n \"disabled\": PropTypes.bool.isRequired,\n \"isControlled\": PropTypes.bool.isRequired,\n \"mode\": PropTypes.oneOf([\"cells\", \"edges\"]).isRequired,\n \"onScrollToChange\": PropTypes.func,\n \"rowCount\": PropTypes.number.isRequired,\n \"scrollToColumn\": PropTypes.number.isRequired,\n \"scrollToRow\": PropTypes.number.isRequired\n}), _temp);\n\n_defineProperty(ArrowKeyStepper, \"defaultProps\", {\n disabled: false,\n isControlled: false,\n mode: 'edges',\n scrollToColumn: 0,\n scrollToRow: 0\n});\n\npolyfill(ArrowKeyStepper);\nexport default ArrowKeyStepper;\nimport { bpfrpt_proptype_RenderedSection } from \"../Grid\";\nimport { bpfrpt_proptype_ScrollIndices } from \"./types\";\nimport PropTypes from \"prop-types\";","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport * as React from 'react';\nimport createDetectElementResize from '../vendor/detectElementResize';\nvar AutoSizer = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(AutoSizer, _React$Component);\n\n function AutoSizer() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, AutoSizer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AutoSizer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n height: _this.props.defaultHeight || 0,\n width: _this.props.defaultWidth || 0\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_parentNode\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_autoSizer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_window\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_detectElementResize\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_onResize\", function () {\n var _this$props = _this.props,\n disableHeight = _this$props.disableHeight,\n disableWidth = _this$props.disableWidth,\n onResize = _this$props.onResize;\n\n if (_this._parentNode) {\n // Guard against AutoSizer component being removed from the DOM immediately after being added.\n // This can result in invalid style values which can result in NaN values if we don't handle them.\n // See issue #150 for more context.\n var height = _this._parentNode.offsetHeight || 0;\n var width = _this._parentNode.offsetWidth || 0;\n var win = _this._window || window;\n var style = win.getComputedStyle(_this._parentNode) || {};\n var paddingLeft = parseInt(style.paddingLeft, 10) || 0;\n var paddingRight = parseInt(style.paddingRight, 10) || 0;\n var paddingTop = parseInt(style.paddingTop, 10) || 0;\n var paddingBottom = parseInt(style.paddingBottom, 10) || 0;\n var newHeight = height - paddingTop - paddingBottom;\n var newWidth = width - paddingLeft - paddingRight;\n\n if (!disableHeight && _this.state.height !== newHeight || !disableWidth && _this.state.width !== newWidth) {\n _this.setState({\n height: height - paddingTop - paddingBottom,\n width: width - paddingLeft - paddingRight\n });\n\n onResize({\n height: height,\n width: width\n });\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_setRef\", function (autoSizer) {\n _this._autoSizer = autoSizer;\n });\n\n return _this;\n }\n\n _createClass(AutoSizer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var nonce = this.props.nonce;\n\n if (this._autoSizer && this._autoSizer.parentNode && this._autoSizer.parentNode.ownerDocument && this._autoSizer.parentNode.ownerDocument.defaultView && this._autoSizer.parentNode instanceof this._autoSizer.parentNode.ownerDocument.defaultView.HTMLElement) {\n // Delay access of parentNode until mount.\n // This handles edge-cases where the component has already been unmounted before its ref has been set,\n // As well as libraries like react-lite which have a slightly different lifecycle.\n this._parentNode = this._autoSizer.parentNode;\n this._window = this._autoSizer.parentNode.ownerDocument.defaultView; // Defer requiring resize handler in order to support server-side rendering.\n // See issue #41\n\n this._detectElementResize = createDetectElementResize(nonce, this._window);\n\n this._detectElementResize.addResizeListener(this._parentNode, this._onResize);\n\n this._onResize();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._detectElementResize && this._parentNode) {\n this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n className = _this$props2.className,\n disableHeight = _this$props2.disableHeight,\n disableWidth = _this$props2.disableWidth,\n style = _this$props2.style;\n var _this$state = this.state,\n height = _this$state.height,\n width = _this$state.width; // Outer div should not force width/height since that may prevent containers from shrinking.\n // Inner component should overflow and use calculated width/height.\n // See issue #68 for more information.\n\n var outerStyle = {\n overflow: 'visible'\n };\n var childParams = {};\n\n if (!disableHeight) {\n outerStyle.height = 0;\n childParams.height = height;\n }\n\n if (!disableWidth) {\n outerStyle.width = 0;\n childParams.width = width;\n }\n /**\n * TODO: Avoid rendering children before the initial measurements have been collected.\n * At best this would just be wasting cycles.\n * Add this check into version 10 though as it could break too many ref callbacks in version 9.\n * Note that if default width/height props were provided this would still work with SSR.\n if (\n height !== 0 &&\n width !== 0\n ) {\n child = children({ height, width })\n }\n */\n\n\n return React.createElement(\"div\", {\n className: className,\n ref: this._setRef,\n style: _objectSpread({}, outerStyle, {}, style)\n }, children(childParams));\n }\n }]);\n\n return AutoSizer;\n}(React.Component), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n /** Function responsible for rendering children.*/\n \"children\": PropTypes.func.isRequired,\n\n /** Optional custom CSS class name to attach to root AutoSizer element. */\n \"className\": PropTypes.string,\n\n /** Default height to use for initial render; useful for SSR */\n \"defaultHeight\": PropTypes.number,\n\n /** Default width to use for initial render; useful for SSR */\n \"defaultWidth\": PropTypes.number,\n\n /** Disable dynamic :height property */\n \"disableHeight\": PropTypes.bool.isRequired,\n\n /** Disable dynamic :width property */\n \"disableWidth\": PropTypes.bool.isRequired,\n\n /** Nonce of the inlined stylesheet for Content Security Policy */\n \"nonce\": PropTypes.string,\n\n /** Callback to be invoked on-resize */\n \"onResize\": PropTypes.func.isRequired,\n\n /** Optional inline style */\n \"style\": PropTypes.object\n}), _temp);\n\n_defineProperty(AutoSizer, \"defaultProps\", {\n onResize: function onResize() {},\n disableHeight: false,\n disableWidth: false,\n style: {}\n});\n\nexport { AutoSizer as default };\nimport PropTypes from \"prop-types\";","/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n * 5) Added support for injecting custom window object\n **/\nexport default function createDetectElementResize(nonce, hostWindow) {\n // Check `document` and `window` in case of server-side rendering\n var _window;\n\n if (typeof hostWindow !== 'undefined') {\n _window = hostWindow;\n } else if (typeof window !== 'undefined') {\n _window = window;\n } else if (typeof self !== 'undefined') {\n _window = self;\n } else {\n _window = global;\n }\n\n var attachEvent = typeof _window.document !== 'undefined' && _window.document.attachEvent;\n\n if (!attachEvent) {\n var requestFrame = function () {\n var raf = _window.requestAnimationFrame || _window.mozRequestAnimationFrame || _window.webkitRequestAnimationFrame || function (fn) {\n return _window.setTimeout(fn, 20);\n };\n\n return function (fn) {\n return raf(fn);\n };\n }();\n\n var cancelFrame = function () {\n var cancel = _window.cancelAnimationFrame || _window.mozCancelAnimationFrame || _window.webkitCancelAnimationFrame || _window.clearTimeout;\n return function (id) {\n return cancel(id);\n };\n }();\n\n var resetTriggers = function resetTriggers(element) {\n var triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + 'px';\n expandChild.style.height = expand.offsetHeight + 1 + 'px';\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n\n var checkTriggers = function checkTriggers(element) {\n return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height;\n };\n\n var scrollListener = function scrollListener(e) {\n // Don't measure (which forces) reflow for scrolls that happen inside of children!\n if (e.target.className && typeof e.target.className.indexOf === 'function' && e.target.className.indexOf('contract-trigger') < 0 && e.target.className.indexOf('expand-trigger') < 0) {\n return;\n }\n\n var element = this;\n resetTriggers(this);\n\n if (this.__resizeRAF__) {\n cancelFrame(this.__resizeRAF__);\n }\n\n this.__resizeRAF__ = requestFrame(function () {\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n\n element.__resizeListeners__.forEach(function (fn) {\n fn.call(element, e);\n });\n }\n });\n };\n /* Detect CSS Animations support to detect element display/re-attach */\n\n\n var animation = false,\n keyframeprefix = '',\n animationstartevent = 'animationstart',\n domPrefixes = 'Webkit Moz O ms'.split(' '),\n startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\n pfx = '';\n {\n var elm = _window.document.createElement('fakeelement');\n\n if (elm.style.animationName !== undefined) {\n animation = true;\n }\n\n if (animation === false) {\n for (var i = 0; i < domPrefixes.length; i++) {\n if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n pfx = domPrefixes[i];\n keyframeprefix = '-' + pfx.toLowerCase() + '-';\n animationstartevent = startEvents[i];\n animation = true;\n break;\n }\n }\n }\n }\n var animationName = 'resizeanim';\n var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\n var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\n }\n\n var createStyles = function createStyles(doc) {\n if (!doc.getElementById('detectElementResize')) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n var css = (animationKeyframes ? animationKeyframes : '') + '.resize-triggers { ' + (animationStyle ? animationStyle : '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n head = doc.head || doc.getElementsByTagName('head')[0],\n style = doc.createElement('style');\n style.id = 'detectElementResize';\n style.type = 'text/css';\n\n if (nonce != null) {\n style.setAttribute('nonce', nonce);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n\n head.appendChild(style);\n }\n };\n\n var addResizeListener = function addResizeListener(element, fn) {\n if (attachEvent) {\n element.attachEvent('onresize', fn);\n } else {\n if (!element.__resizeTriggers__) {\n var doc = element.ownerDocument;\n\n var elementStyle = _window.getComputedStyle(element);\n\n if (elementStyle && elementStyle.position == 'static') {\n element.style.position = 'relative';\n }\n\n createStyles(doc);\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = doc.createElement('div')).className = 'resize-triggers';\n var resizeTriggersHtml = '
' + '
';\n\n if (window.trustedTypes) {\n var staticPolicy = trustedTypes.createPolicy('react-virtualized-auto-sizer', {\n createHTML: function createHTML() {\n return resizeTriggersHtml;\n }\n });\n element.__resizeTriggers__.innerHTML = staticPolicy.createHTML('');\n } else {\n element.__resizeTriggers__.innerHTML = resizeTriggersHtml;\n }\n\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n element.addEventListener('scroll', scrollListener, true);\n /* Listen for a css animation to detect element display/re-attach */\n\n if (animationstartevent) {\n element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n if (e.animationName == animationName) {\n resetTriggers(element);\n }\n };\n\n element.__resizeTriggers__.addEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n }\n }\n\n element.__resizeListeners__.push(fn);\n }\n };\n\n var removeResizeListener = function removeResizeListener(element, fn) {\n if (attachEvent) {\n element.detachEvent('onresize', fn);\n } else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n\n if (!element.__resizeListeners__.length) {\n element.removeEventListener('scroll', scrollListener, true);\n\n if (element.__resizeTriggers__.__animationListener__) {\n element.__resizeTriggers__.removeEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n\n element.__resizeTriggers__.__animationListener__ = null;\n }\n\n try {\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n } catch (e) {// Preact compat; see developit/preact-compat/issues/228\n }\n }\n }\n };\n\n return {\n addResizeListener: addResizeListener,\n removeResizeListener: removeResizeListener\n };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\n\n/**\n * Wraps a cell and measures its rendered content.\n * Measurements are stored in a per-cell cache.\n * Cached-content is not be re-measured.\n */\nvar CellMeasurer = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(CellMeasurer, _React$PureComponent);\n\n function CellMeasurer() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, CellMeasurer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CellMeasurer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"_child\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_measure\", function () {\n var _this$props = _this.props,\n cache = _this$props.cache,\n _this$props$columnInd = _this$props.columnIndex,\n columnIndex = _this$props$columnInd === void 0 ? 0 : _this$props$columnInd,\n parent = _this$props.parent,\n _this$props$rowIndex = _this$props.rowIndex,\n rowIndex = _this$props$rowIndex === void 0 ? _this.props.index || 0 : _this$props$rowIndex;\n\n var _this$_getCellMeasure = _this._getCellMeasurements(),\n height = _this$_getCellMeasure.height,\n width = _this$_getCellMeasure.width;\n\n if (height !== cache.getHeight(rowIndex, columnIndex) || width !== cache.getWidth(rowIndex, columnIndex)) {\n cache.set(rowIndex, columnIndex, width, height);\n\n if (parent && typeof parent.recomputeGridSize === 'function') {\n parent.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_registerChild\", function (element) {\n if (element && !(element instanceof Element)) {\n console.warn('CellMeasurer registerChild expects to be passed Element or null');\n }\n\n _this._child = element;\n\n if (element) {\n _this._maybeMeasureCell();\n }\n });\n\n return _this;\n }\n\n _createClass(CellMeasurer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._maybeMeasureCell();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this._maybeMeasureCell();\n }\n }, {\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n return typeof children === 'function' ? children({\n measure: this._measure,\n registerChild: this._registerChild\n }) : children;\n }\n }, {\n key: \"_getCellMeasurements\",\n value: function _getCellMeasurements() {\n var cache = this.props.cache;\n var node = this._child || findDOMNode(this); // TODO Check for a bad combination of fixedWidth and missing numeric width or vice versa with height\n\n if (node && node.ownerDocument && node.ownerDocument.defaultView && node instanceof node.ownerDocument.defaultView.HTMLElement) {\n var styleWidth = node.style.width;\n var styleHeight = node.style.height; // If we are re-measuring a cell that has already been measured,\n // It will have a hard-coded width/height from the previous measurement.\n // The fact that we are measuring indicates this measurement is probably stale,\n // So explicitly clear it out (eg set to \"auto\") so we can recalculate.\n // See issue #593 for more info.\n // Even if we are measuring initially- if we're inside of a MultiGrid component,\n // Explicitly clear width/height before measuring to avoid being tainted by another Grid.\n // eg top/left Grid renders before bottom/right Grid\n // Since the CellMeasurerCache is shared between them this taints derived cell size values.\n\n if (!cache.hasFixedWidth()) {\n node.style.width = 'auto';\n }\n\n if (!cache.hasFixedHeight()) {\n node.style.height = 'auto';\n }\n\n var height = Math.ceil(node.offsetHeight);\n var width = Math.ceil(node.offsetWidth); // Reset after measuring to avoid breaking styles; see #660\n\n if (styleWidth) {\n node.style.width = styleWidth;\n }\n\n if (styleHeight) {\n node.style.height = styleHeight;\n }\n\n return {\n height: height,\n width: width\n };\n } else {\n return {\n height: 0,\n width: 0\n };\n }\n }\n }, {\n key: \"_maybeMeasureCell\",\n value: function _maybeMeasureCell() {\n var _this$props2 = this.props,\n cache = _this$props2.cache,\n _this$props2$columnIn = _this$props2.columnIndex,\n columnIndex = _this$props2$columnIn === void 0 ? 0 : _this$props2$columnIn,\n parent = _this$props2.parent,\n _this$props2$rowIndex = _this$props2.rowIndex,\n rowIndex = _this$props2$rowIndex === void 0 ? this.props.index || 0 : _this$props2$rowIndex;\n\n if (!cache.has(rowIndex, columnIndex)) {\n var _this$_getCellMeasure2 = this._getCellMeasurements(),\n height = _this$_getCellMeasure2.height,\n width = _this$_getCellMeasure2.width;\n\n cache.set(rowIndex, columnIndex, width, height); // If size has changed, let Grid know to re-render.\n\n if (parent && typeof parent.invalidateCellSizeAfterRender === 'function') {\n parent.invalidateCellSizeAfterRender({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n }\n }\n }\n }]);\n\n return CellMeasurer;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n \"cache\": function cache() {\n return (typeof bpfrpt_proptype_CellMeasureCache === \"function\" ? bpfrpt_proptype_CellMeasureCache.isRequired ? bpfrpt_proptype_CellMeasureCache.isRequired : bpfrpt_proptype_CellMeasureCache : PropTypes.shape(bpfrpt_proptype_CellMeasureCache).isRequired).apply(this, arguments);\n },\n \"children\": PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\n \"columnIndex\": PropTypes.number,\n \"index\": PropTypes.number,\n \"parent\": PropTypes.shape({\n invalidateCellSizeAfterRender: PropTypes.func,\n recomputeGridSize: PropTypes.func\n }).isRequired,\n \"rowIndex\": PropTypes.number\n}), _temp); // Used for DEV mode warning check\n\n_defineProperty(CellMeasurer, \"__internalCellMeasurerFlag\", false);\n\nexport { CellMeasurer as default };\n\nif (process.env.NODE_ENV !== 'production') {\n CellMeasurer.__internalCellMeasurerFlag = true;\n}\n\nimport { bpfrpt_proptype_CellMeasureCache } from \"./types\";\nimport PropTypes from \"prop-types\";","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport var DEFAULT_HEIGHT = 30;\nexport var DEFAULT_WIDTH = 100; // Enables more intelligent mapping of a given column and row index to an item ID.\n// This prevents a cell cache from being invalidated when its parent collection is modified.\n\n/**\n * Caches measurements for a given cell.\n */\nvar CellMeasurerCache =\n/*#__PURE__*/\nfunction () {\n function CellMeasurerCache() {\n var _this = this;\n\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, CellMeasurerCache);\n\n _defineProperty(this, \"_cellHeightCache\", {});\n\n _defineProperty(this, \"_cellWidthCache\", {});\n\n _defineProperty(this, \"_columnWidthCache\", {});\n\n _defineProperty(this, \"_rowHeightCache\", {});\n\n _defineProperty(this, \"_defaultHeight\", void 0);\n\n _defineProperty(this, \"_defaultWidth\", void 0);\n\n _defineProperty(this, \"_minHeight\", void 0);\n\n _defineProperty(this, \"_minWidth\", void 0);\n\n _defineProperty(this, \"_keyMapper\", void 0);\n\n _defineProperty(this, \"_hasFixedHeight\", void 0);\n\n _defineProperty(this, \"_hasFixedWidth\", void 0);\n\n _defineProperty(this, \"_columnCount\", 0);\n\n _defineProperty(this, \"_rowCount\", 0);\n\n _defineProperty(this, \"columnWidth\", function (_ref) {\n var index = _ref.index;\n\n var key = _this._keyMapper(0, index);\n\n return _this._columnWidthCache[key] !== undefined ? _this._columnWidthCache[key] : _this._defaultWidth;\n });\n\n _defineProperty(this, \"rowHeight\", function (_ref2) {\n var index = _ref2.index;\n\n var key = _this._keyMapper(index, 0);\n\n return _this._rowHeightCache[key] !== undefined ? _this._rowHeightCache[key] : _this._defaultHeight;\n });\n\n var defaultHeight = params.defaultHeight,\n defaultWidth = params.defaultWidth,\n fixedHeight = params.fixedHeight,\n fixedWidth = params.fixedWidth,\n keyMapper = params.keyMapper,\n minHeight = params.minHeight,\n minWidth = params.minWidth;\n this._hasFixedHeight = fixedHeight === true;\n this._hasFixedWidth = fixedWidth === true;\n this._minHeight = minHeight || 0;\n this._minWidth = minWidth || 0;\n this._keyMapper = keyMapper || defaultKeyMapper;\n this._defaultHeight = Math.max(this._minHeight, typeof defaultHeight === 'number' ? defaultHeight : DEFAULT_HEIGHT);\n this._defaultWidth = Math.max(this._minWidth, typeof defaultWidth === 'number' ? defaultWidth : DEFAULT_WIDTH);\n\n if (process.env.NODE_ENV !== 'production') {\n if (this._hasFixedHeight === false && this._hasFixedWidth === false) {\n console.warn(\"CellMeasurerCache should only measure a cell's width or height. \" + 'You have configured CellMeasurerCache to measure both. ' + 'This will result in poor performance.');\n }\n\n if (this._hasFixedHeight === false && this._defaultHeight === 0) {\n console.warn('Fixed height CellMeasurerCache should specify a :defaultHeight greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n }\n\n if (this._hasFixedWidth === false && this._defaultWidth === 0) {\n console.warn('Fixed width CellMeasurerCache should specify a :defaultWidth greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n }\n }\n }\n\n _createClass(CellMeasurerCache, [{\n key: \"clear\",\n value: function clear(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var key = this._keyMapper(rowIndex, columnIndex);\n\n delete this._cellHeightCache[key];\n delete this._cellWidthCache[key];\n\n this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n }\n }, {\n key: \"clearAll\",\n value: function clearAll() {\n this._cellHeightCache = {};\n this._cellWidthCache = {};\n this._columnWidthCache = {};\n this._rowHeightCache = {};\n this._rowCount = 0;\n this._columnCount = 0;\n }\n }, {\n key: \"hasFixedHeight\",\n value: function hasFixedHeight() {\n return this._hasFixedHeight;\n }\n }, {\n key: \"hasFixedWidth\",\n value: function hasFixedWidth() {\n return this._hasFixedWidth;\n }\n }, {\n key: \"getHeight\",\n value: function getHeight(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (this._hasFixedHeight) {\n return this._defaultHeight;\n } else {\n var _key = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellHeightCache[_key] !== undefined ? Math.max(this._minHeight, this._cellHeightCache[_key]) : this._defaultHeight;\n }\n }\n }, {\n key: \"getWidth\",\n value: function getWidth(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (this._hasFixedWidth) {\n return this._defaultWidth;\n } else {\n var _key2 = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellWidthCache[_key2] !== undefined ? Math.max(this._minWidth, this._cellWidthCache[_key2]) : this._defaultWidth;\n }\n }\n }, {\n key: \"has\",\n value: function has(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var key = this._keyMapper(rowIndex, columnIndex);\n\n return this._cellHeightCache[key] !== undefined;\n }\n }, {\n key: \"set\",\n value: function set(rowIndex, columnIndex, width, height) {\n var key = this._keyMapper(rowIndex, columnIndex);\n\n if (columnIndex >= this._columnCount) {\n this._columnCount = columnIndex + 1;\n }\n\n if (rowIndex >= this._rowCount) {\n this._rowCount = rowIndex + 1;\n } // Size is cached per cell so we don't have to re-measure if cells are re-ordered.\n\n\n this._cellHeightCache[key] = height;\n this._cellWidthCache[key] = width;\n\n this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n }\n }, {\n key: \"_updateCachedColumnAndRowSizes\",\n value: function _updateCachedColumnAndRowSizes(rowIndex, columnIndex) {\n // :columnWidth and :rowHeight are derived based on all cells in a column/row.\n // Pre-cache these derived values for faster lookup later.\n // Reads are expected to occur more frequently than writes in this case.\n // Only update non-fixed dimensions though to avoid doing unnecessary work.\n if (!this._hasFixedWidth) {\n var columnWidth = 0;\n\n for (var i = 0; i < this._rowCount; i++) {\n columnWidth = Math.max(columnWidth, this.getWidth(i, columnIndex));\n }\n\n var columnKey = this._keyMapper(0, columnIndex);\n\n this._columnWidthCache[columnKey] = columnWidth;\n }\n\n if (!this._hasFixedHeight) {\n var rowHeight = 0;\n\n for (var _i = 0; _i < this._columnCount; _i++) {\n rowHeight = Math.max(rowHeight, this.getHeight(rowIndex, _i));\n }\n\n var rowKey = this._keyMapper(rowIndex, 0);\n\n this._rowHeightCache[rowKey] = rowHeight;\n }\n }\n }, {\n key: \"defaultHeight\",\n get: function get() {\n return this._defaultHeight;\n }\n }, {\n key: \"defaultWidth\",\n get: function get() {\n return this._defaultWidth;\n }\n }]);\n\n return CellMeasurerCache;\n}();\n\nexport { CellMeasurerCache as default };\n\nfunction defaultKeyMapper(rowIndex, columnIndex) {\n return \"\".concat(rowIndex, \"-\").concat(columnIndex);\n}\n\nimport { bpfrpt_proptype_CellMeasureCache } from \"./types\";","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport getScrollbarSize from 'dom-helpers/scrollbarSize'; // @TODO Merge Collection and CollectionView\n\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\n\nvar IS_SCROLLING_TIMEOUT = 150;\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\n\nvar SCROLL_POSITION_CHANGE_REASONS = {\n OBSERVED: 'observed',\n REQUESTED: 'requested'\n};\n/**\n * Monitors changes in properties (eg. cellCount) and state (eg. scroll offsets) to determine when rendering needs to occur.\n * This component does not render any visible content itself; it defers to the specified :cellLayoutManager.\n */\n\nvar CollectionView =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(CollectionView, _React$PureComponent);\n\n // Invokes callbacks only when their values have changed.\n function CollectionView() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, CollectionView);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CollectionView)).call.apply(_getPrototypeOf2, [this].concat(args))); // If this component is being rendered server-side, getScrollbarSize() will return undefined.\n // We handle this case in componentDidMount()\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n isScrolling: false,\n scrollLeft: 0,\n scrollTop: 0\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_calculateSizeAndPositionDataOnNextUpdate\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"_onSectionRenderedMemoizer\", createCallbackMemoizer());\n\n _defineProperty(_assertThisInitialized(_this), \"_onScrollMemoizer\", createCallbackMemoizer(false));\n\n _defineProperty(_assertThisInitialized(_this), \"_invokeOnSectionRenderedHelper\", function () {\n var _this$props = _this.props,\n cellLayoutManager = _this$props.cellLayoutManager,\n onSectionRendered = _this$props.onSectionRendered;\n\n _this._onSectionRenderedMemoizer({\n callback: onSectionRendered,\n indices: {\n indices: cellLayoutManager.getLastRenderedIndices()\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_setScrollingContainerRef\", function (ref) {\n _this._scrollingContainer = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_updateScrollPositionForScrollToCell\", function () {\n var _this$props2 = _this.props,\n cellLayoutManager = _this$props2.cellLayoutManager,\n height = _this$props2.height,\n scrollToAlignment = _this$props2.scrollToAlignment,\n scrollToCell = _this$props2.scrollToCell,\n width = _this$props2.width;\n var _this$state = _this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n\n if (scrollToCell >= 0) {\n var scrollPosition = cellLayoutManager.getScrollPositionForCell({\n align: scrollToAlignment,\n cellIndex: scrollToCell,\n height: height,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n width: width\n });\n\n if (scrollPosition.scrollLeft !== scrollLeft || scrollPosition.scrollTop !== scrollTop) {\n _this._setScrollPosition(scrollPosition);\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScroll\", function (event) {\n // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n // See issue #404 for more information.\n if (event.target !== _this._scrollingContainer) {\n return;\n } // Prevent pointer events from interrupting a smooth scroll\n\n\n _this._enablePointerEventsAfterDelay(); // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n // This causes a series of rapid renders that is slow for long lists.\n // We can avoid that by doing some simple bounds checking to ensure that scrollTop never exceeds the total height.\n\n\n var _this$props3 = _this.props,\n cellLayoutManager = _this$props3.cellLayoutManager,\n height = _this$props3.height,\n isScrollingChange = _this$props3.isScrollingChange,\n width = _this$props3.width;\n var scrollbarSize = _this._scrollbarSize;\n\n var _cellLayoutManager$ge = cellLayoutManager.getTotalSize(),\n totalHeight = _cellLayoutManager$ge.height,\n totalWidth = _cellLayoutManager$ge.width;\n\n var scrollLeft = Math.max(0, Math.min(totalWidth - width + scrollbarSize, event.target.scrollLeft));\n var scrollTop = Math.max(0, Math.min(totalHeight - height + scrollbarSize, event.target.scrollTop)); // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n // Don't force a re-render if this is the case.\n // The mouse may move faster then the animation frame does.\n // Use requestAnimationFrame to avoid over-updating.\n\n if (_this.state.scrollLeft !== scrollLeft || _this.state.scrollTop !== scrollTop) {\n // Browsers with cancelable scroll events (eg. Firefox) interrupt scrolling animations if scrollTop/scrollLeft is set.\n // Other browsers (eg. Safari) don't scroll as well without the help under certain conditions (DOM or style changes during scrolling).\n // All things considered, this seems to be the best current work around that I'm aware of.\n // For more information see https://github.com/bvaughn/react-virtualized/pull/124\n var scrollPositionChangeReason = event.cancelable ? SCROLL_POSITION_CHANGE_REASONS.OBSERVED : SCROLL_POSITION_CHANGE_REASONS.REQUESTED; // Synchronously set :isScrolling the first time (since _setNextState will reschedule its animation frame each time it's called)\n\n if (!_this.state.isScrolling) {\n isScrollingChange(true);\n }\n\n _this.setState({\n isScrolling: true,\n scrollLeft: scrollLeft,\n scrollPositionChangeReason: scrollPositionChangeReason,\n scrollTop: scrollTop\n });\n }\n\n _this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n totalWidth: totalWidth,\n totalHeight: totalHeight\n });\n });\n\n _this._scrollbarSize = getScrollbarSize();\n\n if (_this._scrollbarSize === undefined) {\n _this._scrollbarSizeMeasured = false;\n _this._scrollbarSize = 0;\n } else {\n _this._scrollbarSizeMeasured = true;\n }\n\n return _this;\n }\n /**\n * Forced recompute of cell sizes and positions.\n * This function should be called if cell sizes have changed but nothing else has.\n * Since cell positions are calculated by callbacks, the collection view has no way of detecting when the underlying data has changed.\n */\n\n\n _createClass(CollectionView, [{\n key: \"recomputeCellSizesAndPositions\",\n value: function recomputeCellSizesAndPositions() {\n this._calculateSizeAndPositionDataOnNextUpdate = true;\n this.forceUpdate();\n }\n /* ---------------------------- Component lifecycle methods ---------------------------- */\n\n /**\n * @private\n * This method updates scrollLeft/scrollTop in state for the following conditions:\n * 1) Empty content (0 rows or columns)\n * 2) New scroll props overriding the current state\n * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n */\n\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props4 = this.props,\n cellLayoutManager = _this$props4.cellLayoutManager,\n scrollLeft = _this$props4.scrollLeft,\n scrollToCell = _this$props4.scrollToCell,\n scrollTop = _this$props4.scrollTop; // If this component was first rendered server-side, scrollbar size will be undefined.\n // In that event we need to remeasure.\n\n if (!this._scrollbarSizeMeasured) {\n this._scrollbarSize = getScrollbarSize();\n this._scrollbarSizeMeasured = true;\n this.setState({});\n }\n\n if (scrollToCell >= 0) {\n this._updateScrollPositionForScrollToCell();\n } else if (scrollLeft >= 0 || scrollTop >= 0) {\n this._setScrollPosition({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n } // Update onSectionRendered callback.\n\n\n this._invokeOnSectionRenderedHelper();\n\n var _cellLayoutManager$ge2 = cellLayoutManager.getTotalSize(),\n totalHeight = _cellLayoutManager$ge2.height,\n totalWidth = _cellLayoutManager$ge2.width; // Initialize onScroll callback.\n\n\n this._invokeOnScrollMemoizer({\n scrollLeft: scrollLeft || 0,\n scrollTop: scrollTop || 0,\n totalHeight: totalHeight,\n totalWidth: totalWidth\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var _this$props5 = this.props,\n height = _this$props5.height,\n scrollToAlignment = _this$props5.scrollToAlignment,\n scrollToCell = _this$props5.scrollToCell,\n width = _this$props5.width;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollPositionChangeReason = _this$state2.scrollPositionChangeReason,\n scrollTop = _this$state2.scrollTop; // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n // So we only set these when we require an adjustment of the scroll position.\n // See issue #2 for more information.\n\n if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n if (scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft && scrollLeft !== this._scrollingContainer.scrollLeft) {\n this._scrollingContainer.scrollLeft = scrollLeft;\n }\n\n if (scrollTop >= 0 && scrollTop !== prevState.scrollTop && scrollTop !== this._scrollingContainer.scrollTop) {\n this._scrollingContainer.scrollTop = scrollTop;\n }\n } // Update scroll offsets if the current :scrollToCell values requires it\n\n\n if (height !== prevProps.height || scrollToAlignment !== prevProps.scrollToAlignment || scrollToCell !== prevProps.scrollToCell || width !== prevProps.width) {\n this._updateScrollPositionForScrollToCell();\n } // Update onRowsRendered callback if start/stop indices have changed\n\n\n this._invokeOnSectionRenderedHelper();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._disablePointerEventsTimeoutId) {\n clearTimeout(this._disablePointerEventsTimeoutId);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n autoHeight = _this$props6.autoHeight,\n cellCount = _this$props6.cellCount,\n cellLayoutManager = _this$props6.cellLayoutManager,\n className = _this$props6.className,\n height = _this$props6.height,\n horizontalOverscanSize = _this$props6.horizontalOverscanSize,\n id = _this$props6.id,\n noContentRenderer = _this$props6.noContentRenderer,\n style = _this$props6.style,\n verticalOverscanSize = _this$props6.verticalOverscanSize,\n width = _this$props6.width;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollLeft = _this$state3.scrollLeft,\n scrollTop = _this$state3.scrollTop; // Memoization reset\n\n if (this._lastRenderedCellCount !== cellCount || this._lastRenderedCellLayoutManager !== cellLayoutManager || this._calculateSizeAndPositionDataOnNextUpdate) {\n this._lastRenderedCellCount = cellCount;\n this._lastRenderedCellLayoutManager = cellLayoutManager;\n this._calculateSizeAndPositionDataOnNextUpdate = false;\n cellLayoutManager.calculateSizeAndPositionData();\n }\n\n var _cellLayoutManager$ge3 = cellLayoutManager.getTotalSize(),\n totalHeight = _cellLayoutManager$ge3.height,\n totalWidth = _cellLayoutManager$ge3.width; // Safely expand the rendered area by the specified overscan amount\n\n\n var left = Math.max(0, scrollLeft - horizontalOverscanSize);\n var top = Math.max(0, scrollTop - verticalOverscanSize);\n var right = Math.min(totalWidth, scrollLeft + width + horizontalOverscanSize);\n var bottom = Math.min(totalHeight, scrollTop + height + verticalOverscanSize);\n var childrenToDisplay = height > 0 && width > 0 ? cellLayoutManager.cellRenderers({\n height: bottom - top,\n isScrolling: isScrolling,\n width: right - left,\n x: left,\n y: top\n }) : [];\n var collectionStyle = {\n boxSizing: 'border-box',\n direction: 'ltr',\n height: autoHeight ? 'auto' : height,\n position: 'relative',\n WebkitOverflowScrolling: 'touch',\n width: width,\n willChange: 'transform'\n }; // Force browser to hide scrollbars when we know they aren't necessary.\n // Otherwise once scrollbars appear they may not disappear again.\n // For more info see issue #116\n\n var verticalScrollBarSize = totalHeight > height ? this._scrollbarSize : 0;\n var horizontalScrollBarSize = totalWidth > width ? this._scrollbarSize : 0; // Also explicitly init styles to 'auto' if scrollbars are required.\n // This works around an obscure edge case where external CSS styles have not yet been loaded,\n // But an initial scroll index of offset is set as an external prop.\n // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n // This was originally reported via clauderic/react-infinite-calendar/issues/23\n\n collectionStyle.overflowX = totalWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n collectionStyle.overflowY = totalHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n return React.createElement(\"div\", {\n ref: this._setScrollingContainerRef,\n \"aria-label\": this.props['aria-label'],\n className: clsx('ReactVirtualized__Collection', className),\n id: id,\n onScroll: this._onScroll,\n role: \"grid\",\n style: _objectSpread({}, collectionStyle, {}, style),\n tabIndex: 0\n }, cellCount > 0 && React.createElement(\"div\", {\n className: \"ReactVirtualized__Collection__innerScrollContainer\",\n style: {\n height: totalHeight,\n maxHeight: totalHeight,\n maxWidth: totalWidth,\n overflow: 'hidden',\n pointerEvents: isScrolling ? 'none' : '',\n width: totalWidth\n }\n }, childrenToDisplay), cellCount === 0 && noContentRenderer());\n }\n /* ---------------------------- Helper methods ---------------------------- */\n\n /**\n * Sets an :isScrolling flag for a small window of time.\n * This flag is used to disable pointer events on the scrollable portion of the Collection.\n * This prevents jerky/stuttery mouse-wheel scrolling.\n */\n\n }, {\n key: \"_enablePointerEventsAfterDelay\",\n value: function _enablePointerEventsAfterDelay() {\n var _this2 = this;\n\n if (this._disablePointerEventsTimeoutId) {\n clearTimeout(this._disablePointerEventsTimeoutId);\n }\n\n this._disablePointerEventsTimeoutId = setTimeout(function () {\n var isScrollingChange = _this2.props.isScrollingChange;\n isScrollingChange(false);\n _this2._disablePointerEventsTimeoutId = null;\n\n _this2.setState({\n isScrolling: false\n });\n }, IS_SCROLLING_TIMEOUT);\n }\n }, {\n key: \"_invokeOnScrollMemoizer\",\n value: function _invokeOnScrollMemoizer(_ref) {\n var _this3 = this;\n\n var scrollLeft = _ref.scrollLeft,\n scrollTop = _ref.scrollTop,\n totalHeight = _ref.totalHeight,\n totalWidth = _ref.totalWidth;\n\n this._onScrollMemoizer({\n callback: function callback(_ref2) {\n var scrollLeft = _ref2.scrollLeft,\n scrollTop = _ref2.scrollTop;\n var _this3$props = _this3.props,\n height = _this3$props.height,\n onScroll = _this3$props.onScroll,\n width = _this3$props.width;\n onScroll({\n clientHeight: height,\n clientWidth: width,\n scrollHeight: totalHeight,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: totalWidth\n });\n },\n indices: {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n }\n });\n }\n }, {\n key: \"_setScrollPosition\",\n value: function _setScrollPosition(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n var newState = {\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n };\n\n if (scrollLeft >= 0) {\n newState.scrollLeft = scrollLeft;\n }\n\n if (scrollTop >= 0) {\n newState.scrollTop = scrollTop;\n }\n\n if (scrollLeft >= 0 && scrollLeft !== this.state.scrollLeft || scrollTop >= 0 && scrollTop !== this.state.scrollTop) {\n this.setState(newState);\n }\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.cellCount === 0 && (prevState.scrollLeft !== 0 || prevState.scrollTop !== 0)) {\n return {\n scrollLeft: 0,\n scrollTop: 0,\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n };\n } else if (nextProps.scrollLeft !== prevState.scrollLeft || nextProps.scrollTop !== prevState.scrollTop) {\n return {\n scrollLeft: nextProps.scrollLeft != null ? nextProps.scrollLeft : prevState.scrollLeft,\n scrollTop: nextProps.scrollTop != null ? nextProps.scrollTop : prevState.scrollTop,\n scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n };\n }\n\n return null;\n }\n }]);\n\n return CollectionView;\n}(React.PureComponent);\n\n_defineProperty(CollectionView, \"defaultProps\", {\n 'aria-label': 'grid',\n horizontalOverscanSize: 0,\n noContentRenderer: function noContentRenderer() {\n return null;\n },\n onScroll: function onScroll() {\n return null;\n },\n onSectionRendered: function onSectionRendered() {\n return null;\n },\n scrollToAlignment: 'auto',\n scrollToCell: -1,\n style: {},\n verticalOverscanSize: 0\n});\n\nCollectionView.propTypes = process.env.NODE_ENV !== \"production\" ? {\n 'aria-label': PropTypes.string,\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height\n * of rows can stretch the window. Intended for use with WindowScroller\n */\n autoHeight: PropTypes.bool,\n\n /**\n * Number of cells in collection.\n */\n cellCount: PropTypes.number.isRequired,\n\n /**\n * Calculates cell sizes and positions and manages rendering the appropriate cells given a specified window.\n */\n cellLayoutManager: PropTypes.object.isRequired,\n\n /**\n * Optional custom CSS class name to attach to root Collection element.\n */\n className: PropTypes.string,\n\n /**\n * Height of Collection; this property determines the number of visible (vs virtualized) rows.\n */\n height: PropTypes.number.isRequired,\n\n /**\n * Optional custom id to attach to root Collection element.\n */\n id: PropTypes.string,\n\n /**\n * Enables the `Collection` to horiontally \"overscan\" its content similar to how `Grid` does.\n * This can reduce flicker around the edges when a user scrolls quickly.\n */\n horizontalOverscanSize: PropTypes.number.isRequired,\n isScrollingChange: PropTypes.func,\n\n /**\n * Optional renderer to be used in place of rows when either :rowCount or :cellCount is 0.\n */\n noContentRenderer: PropTypes.func.isRequired,\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n * ({ clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth }): void\n */\n onScroll: PropTypes.func.isRequired,\n\n /**\n * Callback invoked with information about the section of the Collection that was just rendered.\n * This callback is passed a named :indices parameter which is an Array of the most recently rendered section indices.\n */\n onSectionRendered: PropTypes.func.isRequired,\n\n /**\n * Horizontal offset.\n */\n scrollLeft: PropTypes.number,\n\n /**\n * Controls scroll-to-cell behavior of the Grid.\n * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n */\n scrollToAlignment: PropTypes.oneOf(['auto', 'end', 'start', 'center']).isRequired,\n\n /**\n * Cell index to ensure visible (by forcefully scrolling if necessary).\n */\n scrollToCell: PropTypes.number.isRequired,\n\n /**\n * Vertical offset.\n */\n scrollTop: PropTypes.number,\n\n /**\n * Optional custom inline style to attach to root Collection element.\n */\n style: PropTypes.object,\n\n /**\n * Enables the `Collection` to vertically \"overscan\" its content similar to how `Grid` does.\n * This can reduce flicker around the edges when a user scrolls quickly.\n */\n verticalOverscanSize: PropTypes.number.isRequired,\n\n /**\n * Width of Collection; this property determines the number of visible (vs virtualized) columns.\n */\n width: PropTypes.number.isRequired\n} : {};\npolyfill(CollectionView);\nexport default CollectionView;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\n\n/**\n * A section of the Window.\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * Sections have a fixed size and contain 0 to many cells (tracked by their indices).\n */\nvar Section =\n/*#__PURE__*/\nfunction () {\n function Section(_ref) {\n var height = _ref.height,\n width = _ref.width,\n x = _ref.x,\n y = _ref.y;\n\n _classCallCheck(this, Section);\n\n this.height = height;\n this.width = width;\n this.x = x;\n this.y = y;\n this._indexMap = {};\n this._indices = [];\n }\n /** Add a cell to this section. */\n\n\n _createClass(Section, [{\n key: \"addCellIndex\",\n value: function addCellIndex(_ref2) {\n var index = _ref2.index;\n\n if (!this._indexMap[index]) {\n this._indexMap[index] = true;\n\n this._indices.push(index);\n }\n }\n /** Get all cell indices that have been added to this section. */\n\n }, {\n key: \"getCellIndices\",\n value: function getCellIndices() {\n return this._indices;\n }\n /** Intended for debugger/test purposes only */\n\n }, {\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.x, \",\").concat(this.y, \" \").concat(this.width, \"x\").concat(this.height);\n }\n }]);\n\n return Section;\n}();\n\nexport { Section as default };\nimport { bpfrpt_proptype_Index } from \"./types\";\nimport { bpfrpt_proptype_SizeAndPositionInfo } from \"./types\";","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\n\n/**\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * \n */\nimport Section from './Section';\nvar SECTION_SIZE = 100;\n\n/**\n * Contains 0 to many Sections.\n * Grows (and adds Sections) dynamically as cells are registered.\n * Automatically adds cells to the appropriate Section(s).\n */\nvar SectionManager =\n/*#__PURE__*/\nfunction () {\n function SectionManager() {\n var sectionSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SECTION_SIZE;\n\n _classCallCheck(this, SectionManager);\n\n this._sectionSize = sectionSize;\n this._cellMetadata = [];\n this._sections = {};\n }\n /**\n * Gets all cell indices contained in the specified region.\n * A region may encompass 1 or more Sections.\n */\n\n\n _createClass(SectionManager, [{\n key: \"getCellIndices\",\n value: function getCellIndices(_ref) {\n var height = _ref.height,\n width = _ref.width,\n x = _ref.x,\n y = _ref.y;\n var indices = {};\n this.getSections({\n height: height,\n width: width,\n x: x,\n y: y\n }).forEach(function (section) {\n return section.getCellIndices().forEach(function (index) {\n indices[index] = index;\n });\n }); // Object keys are strings; this function returns numbers\n\n return Object.keys(indices).map(function (index) {\n return indices[index];\n });\n }\n /** Get size and position information for the cell specified. */\n\n }, {\n key: \"getCellMetadata\",\n value: function getCellMetadata(_ref2) {\n var index = _ref2.index;\n return this._cellMetadata[index];\n }\n /** Get all Sections overlapping the specified region. */\n\n }, {\n key: \"getSections\",\n value: function getSections(_ref3) {\n var height = _ref3.height,\n width = _ref3.width,\n x = _ref3.x,\n y = _ref3.y;\n var sectionXStart = Math.floor(x / this._sectionSize);\n var sectionXStop = Math.floor((x + width - 1) / this._sectionSize);\n var sectionYStart = Math.floor(y / this._sectionSize);\n var sectionYStop = Math.floor((y + height - 1) / this._sectionSize);\n var sections = [];\n\n for (var sectionX = sectionXStart; sectionX <= sectionXStop; sectionX++) {\n for (var sectionY = sectionYStart; sectionY <= sectionYStop; sectionY++) {\n var key = \"\".concat(sectionX, \".\").concat(sectionY);\n\n if (!this._sections[key]) {\n this._sections[key] = new Section({\n height: this._sectionSize,\n width: this._sectionSize,\n x: sectionX * this._sectionSize,\n y: sectionY * this._sectionSize\n });\n }\n\n sections.push(this._sections[key]);\n }\n }\n\n return sections;\n }\n /** Total number of Sections based on the currently registered cells. */\n\n }, {\n key: \"getTotalSectionCount\",\n value: function getTotalSectionCount() {\n return Object.keys(this._sections).length;\n }\n /** Intended for debugger/test purposes only */\n\n }, {\n key: \"toString\",\n value: function toString() {\n var _this = this;\n\n return Object.keys(this._sections).map(function (index) {\n return _this._sections[index].toString();\n });\n }\n /** Adds a cell to the appropriate Sections and registers it metadata for later retrievable. */\n\n }, {\n key: \"registerCell\",\n value: function registerCell(_ref4) {\n var cellMetadatum = _ref4.cellMetadatum,\n index = _ref4.index;\n this._cellMetadata[index] = cellMetadatum;\n this.getSections(cellMetadatum).forEach(function (section) {\n return section.addCellIndex({\n index: index\n });\n });\n }\n }]);\n\n return SectionManager;\n}();\n\nexport { SectionManager as default };\nimport { bpfrpt_proptype_Index } from \"./types\";\nimport { bpfrpt_proptype_SizeAndPositionInfo } from \"./types\";","/**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n * @param cellOffset Offset (x or y) position for cell\n * @param cellSize Size (width or height) of cell\n * @param containerSize Total size (width or height) of the container\n * @param currentOffset Container's current (x or y) offset\n * @return Offset to use to ensure the specified cell is visible\n */\nexport default function getUpdatedOffsetForIndex(_ref) {\n var _ref$align = _ref.align,\n align = _ref$align === void 0 ? 'auto' : _ref$align,\n cellOffset = _ref.cellOffset,\n cellSize = _ref.cellSize,\n containerSize = _ref.containerSize,\n currentOffset = _ref.currentOffset;\n var maxOffset = cellOffset;\n var minOffset = maxOffset - containerSize + cellSize;\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return maxOffset - (containerSize - cellSize) / 2;\n\n default:\n return Math.max(minOffset, Math.min(maxOffset, currentOffset));\n }\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport CollectionView from './CollectionView';\nimport _calculateSizeAndPositionData from './utils/calculateSizeAndPositionData';\nimport getUpdatedOffsetForIndex from '../utils/getUpdatedOffsetForIndex';\n\n/**\n * Renders scattered or non-linear data.\n * Unlike Grid, which renders checkerboard data, Collection can render arbitrarily positioned- even overlapping- data.\n */\nvar Collection =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(Collection, _React$PureComponent);\n\n function Collection(props, context) {\n var _this;\n\n _classCallCheck(this, Collection);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Collection).call(this, props, context));\n _this._cellMetadata = [];\n _this._lastRenderedCellIndices = []; // Cell cache during scroll (for performance)\n\n _this._cellCache = [];\n _this._isScrollingChange = _this._isScrollingChange.bind(_assertThisInitialized(_this));\n _this._setCollectionViewRef = _this._setCollectionViewRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(Collection, [{\n key: \"forceUpdate\",\n value: function forceUpdate() {\n if (this._collectionView !== undefined) {\n this._collectionView.forceUpdate();\n }\n }\n /** See Collection#recomputeCellSizesAndPositions */\n\n }, {\n key: \"recomputeCellSizesAndPositions\",\n value: function recomputeCellSizesAndPositions() {\n this._cellCache = [];\n\n this._collectionView.recomputeCellSizesAndPositions();\n }\n /** React lifecycle methods */\n\n }, {\n key: \"render\",\n value: function render() {\n var props = _extends({}, this.props);\n\n return React.createElement(CollectionView, _extends({\n cellLayoutManager: this,\n isScrollingChange: this._isScrollingChange,\n ref: this._setCollectionViewRef\n }, props));\n }\n /** CellLayoutManager interface */\n\n }, {\n key: \"calculateSizeAndPositionData\",\n value: function calculateSizeAndPositionData() {\n var _this$props = this.props,\n cellCount = _this$props.cellCount,\n cellSizeAndPositionGetter = _this$props.cellSizeAndPositionGetter,\n sectionSize = _this$props.sectionSize;\n\n var data = _calculateSizeAndPositionData({\n cellCount: cellCount,\n cellSizeAndPositionGetter: cellSizeAndPositionGetter,\n sectionSize: sectionSize\n });\n\n this._cellMetadata = data.cellMetadata;\n this._sectionManager = data.sectionManager;\n this._height = data.height;\n this._width = data.width;\n }\n /**\n * Returns the most recently rendered set of cell indices.\n */\n\n }, {\n key: \"getLastRenderedIndices\",\n value: function getLastRenderedIndices() {\n return this._lastRenderedCellIndices;\n }\n /**\n * Calculates the minimum amount of change from the current scroll position to ensure the specified cell is (fully) visible.\n */\n\n }, {\n key: \"getScrollPositionForCell\",\n value: function getScrollPositionForCell(_ref) {\n var align = _ref.align,\n cellIndex = _ref.cellIndex,\n height = _ref.height,\n scrollLeft = _ref.scrollLeft,\n scrollTop = _ref.scrollTop,\n width = _ref.width;\n var cellCount = this.props.cellCount;\n\n if (cellIndex >= 0 && cellIndex < cellCount) {\n var cellMetadata = this._cellMetadata[cellIndex];\n scrollLeft = getUpdatedOffsetForIndex({\n align: align,\n cellOffset: cellMetadata.x,\n cellSize: cellMetadata.width,\n containerSize: width,\n currentOffset: scrollLeft,\n targetIndex: cellIndex\n });\n scrollTop = getUpdatedOffsetForIndex({\n align: align,\n cellOffset: cellMetadata.y,\n cellSize: cellMetadata.height,\n containerSize: height,\n currentOffset: scrollTop,\n targetIndex: cellIndex\n });\n }\n\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n }\n }, {\n key: \"getTotalSize\",\n value: function getTotalSize() {\n return {\n height: this._height,\n width: this._width\n };\n }\n }, {\n key: \"cellRenderers\",\n value: function cellRenderers(_ref2) {\n var _this2 = this;\n\n var height = _ref2.height,\n isScrolling = _ref2.isScrolling,\n width = _ref2.width,\n x = _ref2.x,\n y = _ref2.y;\n var _this$props2 = this.props,\n cellGroupRenderer = _this$props2.cellGroupRenderer,\n cellRenderer = _this$props2.cellRenderer; // Store for later calls to getLastRenderedIndices()\n\n this._lastRenderedCellIndices = this._sectionManager.getCellIndices({\n height: height,\n width: width,\n x: x,\n y: y\n });\n return cellGroupRenderer({\n cellCache: this._cellCache,\n cellRenderer: cellRenderer,\n cellSizeAndPositionGetter: function cellSizeAndPositionGetter(_ref3) {\n var index = _ref3.index;\n return _this2._sectionManager.getCellMetadata({\n index: index\n });\n },\n indices: this._lastRenderedCellIndices,\n isScrolling: isScrolling\n });\n }\n }, {\n key: \"_isScrollingChange\",\n value: function _isScrollingChange(isScrolling) {\n if (!isScrolling) {\n this._cellCache = [];\n }\n }\n }, {\n key: \"_setCollectionViewRef\",\n value: function _setCollectionViewRef(ref) {\n this._collectionView = ref;\n }\n }]);\n\n return Collection;\n}(React.PureComponent);\n\n_defineProperty(Collection, \"defaultProps\", {\n 'aria-label': 'grid',\n cellGroupRenderer: defaultCellGroupRenderer\n});\n\nexport { Collection as default };\nCollection.propTypes = process.env.NODE_ENV !== \"production\" ? {\n 'aria-label': PropTypes.string,\n\n /**\n * Number of cells in Collection.\n */\n cellCount: PropTypes.number.isRequired,\n\n /**\n * Responsible for rendering a group of cells given their indices.\n * Should implement the following interface: ({\n * cellSizeAndPositionGetter:Function,\n * indices: Array,\n * cellRenderer: Function\n * }): Array\n */\n cellGroupRenderer: PropTypes.func.isRequired,\n\n /**\n * Responsible for rendering a cell given an row and column index.\n * Should implement the following interface: ({ index: number, key: string, style: object }): PropTypes.element\n */\n cellRenderer: PropTypes.func.isRequired,\n\n /**\n * Callback responsible for returning size and offset/position information for a given cell (index).\n * ({ index: number }): { height: number, width: number, x: number, y: number }\n */\n cellSizeAndPositionGetter: PropTypes.func.isRequired,\n\n /**\n * Optionally override the size of the sections a Collection's cells are split into.\n */\n sectionSize: PropTypes.number\n} : {};\n\nfunction defaultCellGroupRenderer(_ref4) {\n var cellCache = _ref4.cellCache,\n cellRenderer = _ref4.cellRenderer,\n cellSizeAndPositionGetter = _ref4.cellSizeAndPositionGetter,\n indices = _ref4.indices,\n isScrolling = _ref4.isScrolling;\n return indices.map(function (index) {\n var cellMetadata = cellSizeAndPositionGetter({\n index: index\n });\n var cellRendererProps = {\n index: index,\n isScrolling: isScrolling,\n key: index,\n style: {\n height: cellMetadata.height,\n left: cellMetadata.x,\n position: 'absolute',\n top: cellMetadata.y,\n width: cellMetadata.width\n }\n }; // Avoid re-creating cells while scrolling.\n // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n // If a scroll is in progress- cache and reuse cells.\n // This cache will be thrown away once scrolling complets.\n\n if (isScrolling) {\n if (!(index in cellCache)) {\n cellCache[index] = cellRenderer(cellRendererProps);\n }\n\n return cellCache[index];\n } else {\n return cellRenderer(cellRendererProps);\n }\n }).filter(function (renderedCell) {\n return !!renderedCell;\n });\n}\n\nimport { bpfrpt_proptype_ScrollPosition } from \"./types\";\nimport { bpfrpt_proptype_SizeInfo } from \"./types\";","import SectionManager from '../SectionManager';\nexport default function calculateSizeAndPositionData(_ref) {\n var cellCount = _ref.cellCount,\n cellSizeAndPositionGetter = _ref.cellSizeAndPositionGetter,\n sectionSize = _ref.sectionSize;\n var cellMetadata = [];\n var sectionManager = new SectionManager(sectionSize);\n var height = 0;\n var width = 0;\n\n for (var index = 0; index < cellCount; index++) {\n var cellMetadatum = cellSizeAndPositionGetter({\n index: index\n });\n\n if (cellMetadatum.height == null || isNaN(cellMetadatum.height) || cellMetadatum.width == null || isNaN(cellMetadatum.width) || cellMetadatum.x == null || isNaN(cellMetadatum.x) || cellMetadatum.y == null || isNaN(cellMetadatum.y)) {\n throw Error(\"Invalid metadata returned for cell \".concat(index, \":\\n x:\").concat(cellMetadatum.x, \", y:\").concat(cellMetadatum.y, \", width:\").concat(cellMetadatum.width, \", height:\").concat(cellMetadatum.height));\n }\n\n height = Math.max(height, cellMetadatum.y + cellMetadatum.height);\n width = Math.max(width, cellMetadatum.x + cellMetadatum.width);\n cellMetadata[index] = cellMetadatum;\n sectionManager.registerCell({\n cellMetadatum: cellMetadatum,\n index: index\n });\n }\n\n return {\n cellMetadata: cellMetadata,\n height: height,\n sectionManager: sectionManager,\n width: width\n };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\n/**\n * High-order component that auto-calculates column-widths for `Grid` cells.\n */\n\nvar ColumnSizer =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(ColumnSizer, _React$PureComponent);\n\n function ColumnSizer(props, context) {\n var _this;\n\n _classCallCheck(this, ColumnSizer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ColumnSizer).call(this, props, context));\n _this._registerChild = _this._registerChild.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ColumnSizer, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props = this.props,\n columnMaxWidth = _this$props.columnMaxWidth,\n columnMinWidth = _this$props.columnMinWidth,\n columnCount = _this$props.columnCount,\n width = _this$props.width;\n\n if (columnMaxWidth !== prevProps.columnMaxWidth || columnMinWidth !== prevProps.columnMinWidth || columnCount !== prevProps.columnCount || width !== prevProps.width) {\n if (this._registeredChild) {\n this._registeredChild.recomputeGridSize();\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n children = _this$props2.children,\n columnMaxWidth = _this$props2.columnMaxWidth,\n columnMinWidth = _this$props2.columnMinWidth,\n columnCount = _this$props2.columnCount,\n width = _this$props2.width;\n var safeColumnMinWidth = columnMinWidth || 1;\n var safeColumnMaxWidth = columnMaxWidth ? Math.min(columnMaxWidth, width) : width;\n var columnWidth = width / columnCount;\n columnWidth = Math.max(safeColumnMinWidth, columnWidth);\n columnWidth = Math.min(safeColumnMaxWidth, columnWidth);\n columnWidth = Math.floor(columnWidth);\n var adjustedWidth = Math.min(width, columnWidth * columnCount);\n return children({\n adjustedWidth: adjustedWidth,\n columnWidth: columnWidth,\n getColumnWidth: function getColumnWidth() {\n return columnWidth;\n },\n registerChild: this._registerChild\n });\n }\n }, {\n key: \"_registerChild\",\n value: function _registerChild(child) {\n if (child && typeof child.recomputeGridSize !== 'function') {\n throw Error('Unexpected child type registered; only Grid/MultiGrid children are supported.');\n }\n\n this._registeredChild = child;\n\n if (this._registeredChild) {\n this._registeredChild.recomputeGridSize();\n }\n }\n }]);\n\n return ColumnSizer;\n}(React.PureComponent);\n\nexport { ColumnSizer as default };\nColumnSizer.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * Function responsible for rendering a virtualized Grid.\n * This function should implement the following signature:\n * ({ adjustedWidth, getColumnWidth, registerChild }) => PropTypes.element\n *\n * The specified :getColumnWidth function should be passed to the Grid's :columnWidth property.\n * The :registerChild should be passed to the Grid's :ref property.\n * The :adjustedWidth property is optional; it reflects the lesser of the overall width or the width of all columns.\n */\n children: PropTypes.func.isRequired,\n\n /** Optional maximum allowed column width */\n columnMaxWidth: PropTypes.number,\n\n /** Optional minimum allowed column width */\n columnMinWidth: PropTypes.number,\n\n /** Number of columns in Grid or Table child */\n columnCount: PropTypes.number.isRequired,\n\n /** Width of Grid or Table child */\n width: PropTypes.number.isRequired\n} : {};","import ColumnSizer from './ColumnSizer';\nexport default ColumnSizer;\nexport { ColumnSizer };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\n/**\n * Higher-order component that manages lazy-loading for \"infinite\" data.\n * This component decorates a virtual component and just-in-time prefetches rows as a user scrolls.\n * It is intended as a convenience component; fork it if you'd like finer-grained control over data-loading.\n */\n\nvar InfiniteLoader =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(InfiniteLoader, _React$PureComponent);\n\n function InfiniteLoader(props, context) {\n var _this;\n\n _classCallCheck(this, InfiniteLoader);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(InfiniteLoader).call(this, props, context));\n _this._loadMoreRowsMemoizer = createCallbackMemoizer();\n _this._onRowsRendered = _this._onRowsRendered.bind(_assertThisInitialized(_this));\n _this._registerChild = _this._registerChild.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(InfiniteLoader, [{\n key: \"resetLoadMoreRowsCache\",\n value: function resetLoadMoreRowsCache(autoReload) {\n this._loadMoreRowsMemoizer = createCallbackMemoizer();\n\n if (autoReload) {\n this._doStuff(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n return children({\n onRowsRendered: this._onRowsRendered,\n registerChild: this._registerChild\n });\n }\n }, {\n key: \"_loadUnloadedRanges\",\n value: function _loadUnloadedRanges(unloadedRanges) {\n var _this2 = this;\n\n var loadMoreRows = this.props.loadMoreRows;\n unloadedRanges.forEach(function (unloadedRange) {\n var promise = loadMoreRows(unloadedRange);\n\n if (promise) {\n promise.then(function () {\n // Refresh the visible rows if any of them have just been loaded.\n // Otherwise they will remain in their unloaded visual state.\n if (isRangeVisible({\n lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n startIndex: unloadedRange.startIndex,\n stopIndex: unloadedRange.stopIndex\n })) {\n if (_this2._registeredChild) {\n forceUpdateReactVirtualizedComponent(_this2._registeredChild, _this2._lastRenderedStartIndex);\n }\n }\n });\n }\n });\n }\n }, {\n key: \"_onRowsRendered\",\n value: function _onRowsRendered(_ref) {\n var startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n this._lastRenderedStartIndex = startIndex;\n this._lastRenderedStopIndex = stopIndex;\n\n this._doStuff(startIndex, stopIndex);\n }\n }, {\n key: \"_doStuff\",\n value: function _doStuff(startIndex, stopIndex) {\n var _ref2,\n _this3 = this;\n\n var _this$props = this.props,\n isRowLoaded = _this$props.isRowLoaded,\n minimumBatchSize = _this$props.minimumBatchSize,\n rowCount = _this$props.rowCount,\n threshold = _this$props.threshold;\n var unloadedRanges = scanForUnloadedRanges({\n isRowLoaded: isRowLoaded,\n minimumBatchSize: minimumBatchSize,\n rowCount: rowCount,\n startIndex: Math.max(0, startIndex - threshold),\n stopIndex: Math.min(rowCount - 1, stopIndex + threshold)\n }); // For memoize comparison\n\n var squashedUnloadedRanges = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(unloadedRanges.map(function (_ref3) {\n var startIndex = _ref3.startIndex,\n stopIndex = _ref3.stopIndex;\n return [startIndex, stopIndex];\n })));\n\n this._loadMoreRowsMemoizer({\n callback: function callback() {\n _this3._loadUnloadedRanges(unloadedRanges);\n },\n indices: {\n squashedUnloadedRanges: squashedUnloadedRanges\n }\n });\n }\n }, {\n key: \"_registerChild\",\n value: function _registerChild(registeredChild) {\n this._registeredChild = registeredChild;\n }\n }]);\n\n return InfiniteLoader;\n}(React.PureComponent);\n/**\n * Determines if the specified start/stop range is visible based on the most recently rendered range.\n */\n\n\n_defineProperty(InfiniteLoader, \"defaultProps\", {\n minimumBatchSize: 10,\n rowCount: 0,\n threshold: 15\n});\n\nexport { InfiniteLoader as default };\nInfiniteLoader.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * Function responsible for rendering a virtualized component.\n * This function should implement the following signature:\n * ({ onRowsRendered, registerChild }) => PropTypes.element\n *\n * The specified :onRowsRendered function should be passed through to the child's :onRowsRendered property.\n * The :registerChild callback should be set as the virtualized component's :ref.\n */\n children: PropTypes.func.isRequired,\n\n /**\n * Function responsible for tracking the loaded state of each row.\n * It should implement the following signature: ({ index: number }): boolean\n */\n isRowLoaded: PropTypes.func.isRequired,\n\n /**\n * Callback to be invoked when more rows must be loaded.\n * It should implement the following signature: ({ startIndex, stopIndex }): Promise\n * The returned Promise should be resolved once row data has finished loading.\n * It will be used to determine when to refresh the list with the newly-loaded data.\n * This callback may be called multiple times in reaction to a single scroll event.\n */\n loadMoreRows: PropTypes.func.isRequired,\n\n /**\n * Minimum number of rows to be loaded at a time.\n * This property can be used to batch requests to reduce HTTP requests.\n */\n minimumBatchSize: PropTypes.number.isRequired,\n\n /**\n * Number of rows in list; can be arbitrary high number if actual number is unknown.\n */\n rowCount: PropTypes.number.isRequired,\n\n /**\n * Threshold at which to pre-fetch data.\n * A threshold X means that data will start loading when a user scrolls within X rows.\n * This value defaults to 15.\n */\n threshold: PropTypes.number.isRequired\n} : {};\nexport function isRangeVisible(_ref4) {\n var lastRenderedStartIndex = _ref4.lastRenderedStartIndex,\n lastRenderedStopIndex = _ref4.lastRenderedStopIndex,\n startIndex = _ref4.startIndex,\n stopIndex = _ref4.stopIndex;\n return !(startIndex > lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n/**\n * Returns all of the ranges within a larger range that contain unloaded rows.\n */\n\nexport function scanForUnloadedRanges(_ref5) {\n var isRowLoaded = _ref5.isRowLoaded,\n minimumBatchSize = _ref5.minimumBatchSize,\n rowCount = _ref5.rowCount,\n startIndex = _ref5.startIndex,\n stopIndex = _ref5.stopIndex;\n var unloadedRanges = [];\n var rangeStartIndex = null;\n var rangeStopIndex = null;\n\n for (var index = startIndex; index <= stopIndex; index++) {\n var loaded = isRowLoaded({\n index: index\n });\n\n if (!loaded) {\n rangeStopIndex = index;\n\n if (rangeStartIndex === null) {\n rangeStartIndex = index;\n }\n } else if (rangeStopIndex !== null) {\n unloadedRanges.push({\n startIndex: rangeStartIndex,\n stopIndex: rangeStopIndex\n });\n rangeStartIndex = rangeStopIndex = null;\n }\n } // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n // Scan forward to try filling our :minimumBatchSize.\n\n\n if (rangeStopIndex !== null) {\n var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), rowCount - 1);\n\n for (var _index = rangeStopIndex + 1; _index <= potentialStopIndex; _index++) {\n if (!isRowLoaded({\n index: _index\n })) {\n rangeStopIndex = _index;\n } else {\n break;\n }\n }\n\n unloadedRanges.push({\n startIndex: rangeStartIndex,\n stopIndex: rangeStopIndex\n });\n } // Check to see if our first range ended prematurely.\n // In this case we should scan backwards to try filling our :minimumBatchSize.\n\n\n if (unloadedRanges.length) {\n var firstUnloadedRange = unloadedRanges[0];\n\n while (firstUnloadedRange.stopIndex - firstUnloadedRange.startIndex + 1 < minimumBatchSize && firstUnloadedRange.startIndex > 0) {\n var _index2 = firstUnloadedRange.startIndex - 1;\n\n if (!isRowLoaded({\n index: _index2\n })) {\n firstUnloadedRange.startIndex = _index2;\n } else {\n break;\n }\n }\n }\n\n return unloadedRanges;\n}\n/**\n * Since RV components use shallowCompare we need to force a render (even though props haven't changed).\n * However InfiniteLoader may wrap a Grid or it may wrap a Table or List.\n * In the first case the built-in React forceUpdate() method is sufficient to force a re-render,\n * But in the latter cases we need to use the RV-specific forceUpdateGrid() method.\n * Else the inner Grid will not be re-rendered and visuals may be stale.\n *\n * Additionally, while a Grid is scrolling the cells can be cached,\n * So it's important to invalidate that cache by recalculating sizes\n * before forcing a rerender.\n */\n\nexport function forceUpdateReactVirtualizedComponent(component) {\n var currentIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var recomputeSize = typeof component.recomputeGridSize === 'function' ? component.recomputeGridSize : component.recomputeRowHeights;\n\n if (recomputeSize) {\n recomputeSize.call(component, currentIndex);\n } else {\n component.forceUpdate();\n }\n}","import InfiniteLoader from './InfiniteLoader';\nexport default InfiniteLoader;\nexport { InfiniteLoader };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nimport Grid, { accessibilityOverscanIndicesGetter } from '../Grid';\nimport * as React from 'react';\nimport clsx from 'clsx';\n/**\n * It is inefficient to create and manage a large list of DOM elements within a scrolling container\n * if only a few of those elements are visible. The primary purpose of this component is to improve\n * performance by only rendering the DOM nodes that a user is able to see based on their current\n * scroll position.\n *\n * This component renders a virtualized list of elements with either fixed or dynamic heights.\n */\n\nvar List = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(List, _React$PureComponent);\n\n function List() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, List);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(List)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"Grid\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_cellRenderer\", function (_ref) {\n var parent = _ref.parent,\n rowIndex = _ref.rowIndex,\n style = _ref.style,\n isScrolling = _ref.isScrolling,\n isVisible = _ref.isVisible,\n key = _ref.key;\n var rowRenderer = _this.props.rowRenderer; // TRICKY The style object is sometimes cached by Grid.\n // This prevents new style objects from bypassing shallowCompare().\n // However as of React 16, style props are auto-frozen (at least in dev mode)\n // Check to make sure we can still modify the style before proceeding.\n // https://github.com/facebook/react/commit/977357765b44af8ff0cfea327866861073095c12#commitcomment-20648713\n\n var widthDescriptor = Object.getOwnPropertyDescriptor(style, 'width');\n\n if (widthDescriptor && widthDescriptor.writable) {\n // By default, List cells should be 100% width.\n // This prevents them from flowing under a scrollbar (if present).\n style.width = '100%';\n }\n\n return rowRenderer({\n index: rowIndex,\n style: style,\n isScrolling: isScrolling,\n isVisible: isVisible,\n key: key,\n parent: parent\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_setRef\", function (ref) {\n _this.Grid = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScroll\", function (_ref2) {\n var clientHeight = _ref2.clientHeight,\n scrollHeight = _ref2.scrollHeight,\n scrollTop = _ref2.scrollTop;\n var onScroll = _this.props.onScroll;\n onScroll({\n clientHeight: clientHeight,\n scrollHeight: scrollHeight,\n scrollTop: scrollTop\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onSectionRendered\", function (_ref3) {\n var rowOverscanStartIndex = _ref3.rowOverscanStartIndex,\n rowOverscanStopIndex = _ref3.rowOverscanStopIndex,\n rowStartIndex = _ref3.rowStartIndex,\n rowStopIndex = _ref3.rowStopIndex;\n var onRowsRendered = _this.props.onRowsRendered;\n onRowsRendered({\n overscanStartIndex: rowOverscanStartIndex,\n overscanStopIndex: rowOverscanStopIndex,\n startIndex: rowStartIndex,\n stopIndex: rowStopIndex\n });\n });\n\n return _this;\n }\n\n _createClass(List, [{\n key: \"forceUpdateGrid\",\n value: function forceUpdateGrid() {\n if (this.Grid) {\n this.Grid.forceUpdate();\n }\n }\n /** See Grid#getOffsetForCell */\n\n }, {\n key: \"getOffsetForRow\",\n value: function getOffsetForRow(_ref4) {\n var alignment = _ref4.alignment,\n index = _ref4.index;\n\n if (this.Grid) {\n var _this$Grid$getOffsetF = this.Grid.getOffsetForCell({\n alignment: alignment,\n rowIndex: index,\n columnIndex: 0\n }),\n scrollTop = _this$Grid$getOffsetF.scrollTop;\n\n return scrollTop;\n }\n\n return 0;\n }\n /** CellMeasurer compatibility */\n\n }, {\n key: \"invalidateCellSizeAfterRender\",\n value: function invalidateCellSizeAfterRender(_ref5) {\n var columnIndex = _ref5.columnIndex,\n rowIndex = _ref5.rowIndex;\n\n if (this.Grid) {\n this.Grid.invalidateCellSizeAfterRender({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n /** See Grid#measureAllCells */\n\n }, {\n key: \"measureAllRows\",\n value: function measureAllRows() {\n if (this.Grid) {\n this.Grid.measureAllCells();\n }\n }\n /** CellMeasurer compatibility */\n\n }, {\n key: \"recomputeGridSize\",\n value: function recomputeGridSize() {\n var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref6$columnIndex = _ref6.columnIndex,\n columnIndex = _ref6$columnIndex === void 0 ? 0 : _ref6$columnIndex,\n _ref6$rowIndex = _ref6.rowIndex,\n rowIndex = _ref6$rowIndex === void 0 ? 0 : _ref6$rowIndex;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n /** See Grid#recomputeGridSize */\n\n }, {\n key: \"recomputeRowHeights\",\n value: function recomputeRowHeights() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: index,\n columnIndex: 0\n });\n }\n }\n /** See Grid#scrollToPosition */\n\n }, {\n key: \"scrollToPosition\",\n value: function scrollToPosition() {\n var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToPosition({\n scrollTop: scrollTop\n });\n }\n }\n /** See Grid#scrollToCell */\n\n }, {\n key: \"scrollToRow\",\n value: function scrollToRow() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToCell({\n columnIndex: 0,\n rowIndex: index\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n noRowsRenderer = _this$props.noRowsRenderer,\n scrollToIndex = _this$props.scrollToIndex,\n width = _this$props.width;\n var classNames = clsx('ReactVirtualized__List', className);\n return React.createElement(Grid, _extends({}, this.props, {\n autoContainerWidth: true,\n cellRenderer: this._cellRenderer,\n className: classNames,\n columnWidth: width,\n columnCount: 1,\n noContentRenderer: noRowsRenderer,\n onScroll: this._onScroll,\n onSectionRendered: this._onSectionRendered,\n ref: this._setRef,\n scrollToRow: scrollToIndex\n }));\n }\n }]);\n\n return List;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n \"aria-label\": PropTypes.string,\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height\n * of rows can stretch the window. Intended for use with WindowScroller\n */\n \"autoHeight\": PropTypes.bool.isRequired,\n\n /** Optional CSS class name */\n \"className\": PropTypes.string,\n\n /**\n * Used to estimate the total height of a List before all of its rows have actually been measured.\n * The estimated total height is adjusted as rows are rendered.\n */\n \"estimatedRowSize\": PropTypes.number.isRequired,\n\n /** Height constraint for list (determines how many actual rows are rendered) */\n \"height\": PropTypes.number.isRequired,\n\n /** Optional renderer to be used in place of rows when rowCount is 0 */\n \"noRowsRenderer\": function noRowsRenderer() {\n return (typeof bpfrpt_proptype_NoContentRenderer === \"function\" ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n },\n\n /** Callback invoked with information about the slice of rows that were just rendered. */\n \"onRowsRendered\": PropTypes.func.isRequired,\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n */\n \"onScroll\": PropTypes.func.isRequired,\n\n /** See Grid#overscanIndicesGetter */\n \"overscanIndicesGetter\": function overscanIndicesGetter() {\n return (typeof bpfrpt_proptype_OverscanIndicesGetter === \"function\" ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n },\n\n /**\n * Number of rows to render above/below the visible bounds of the list.\n * These rows can help for smoother scrolling on touch devices.\n */\n \"overscanRowCount\": PropTypes.number.isRequired,\n\n /** Either a fixed row height (number) or a function that returns the height of a row given its index. */\n \"rowHeight\": function rowHeight() {\n return (typeof bpfrpt_proptype_CellSize === \"function\" ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n },\n\n /** Responsible for rendering a row given an index; ({ index: number }): node */\n \"rowRenderer\": function rowRenderer() {\n return (typeof bpfrpt_proptype_RowRenderer === \"function\" ? bpfrpt_proptype_RowRenderer.isRequired ? bpfrpt_proptype_RowRenderer.isRequired : bpfrpt_proptype_RowRenderer : PropTypes.shape(bpfrpt_proptype_RowRenderer).isRequired).apply(this, arguments);\n },\n\n /** Number of rows in list. */\n \"rowCount\": PropTypes.number.isRequired,\n\n /** See Grid#scrollToAlignment */\n \"scrollToAlignment\": function scrollToAlignment() {\n return (typeof bpfrpt_proptype_Alignment === \"function\" ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n },\n\n /** Row index to ensure visible (by forcefully scrolling if necessary) */\n \"scrollToIndex\": PropTypes.number.isRequired,\n\n /** Vertical offset. */\n \"scrollTop\": PropTypes.number,\n\n /** Optional inline style */\n \"style\": PropTypes.object.isRequired,\n\n /** Tab index for focus */\n \"tabIndex\": PropTypes.number,\n\n /** Width of list */\n \"width\": PropTypes.number.isRequired\n}), _temp);\n\n_defineProperty(List, \"defaultProps\", {\n autoHeight: false,\n estimatedRowSize: 30,\n onScroll: function onScroll() {},\n noRowsRenderer: function noRowsRenderer() {\n return null;\n },\n onRowsRendered: function onRowsRendered() {},\n overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n overscanRowCount: 10,\n scrollToAlignment: 'auto',\n scrollToIndex: -1,\n style: {}\n});\n\nexport { List as default };\nimport { bpfrpt_proptype_NoContentRenderer } from \"../Grid\";\nimport { bpfrpt_proptype_Alignment } from \"../Grid\";\nimport { bpfrpt_proptype_CellSize } from \"../Grid\";\nimport { bpfrpt_proptype_CellPosition } from \"../Grid\";\nimport { bpfrpt_proptype_OverscanIndicesGetter } from \"../Grid\";\nimport { bpfrpt_proptype_RenderedSection } from \"../Grid\";\nimport { bpfrpt_proptype_CellRendererParams } from \"../Grid\";\nimport { bpfrpt_proptype_Scroll as bpfrpt_proptype_GridScroll } from \"../Grid\";\nimport { bpfrpt_proptype_RowRenderer } from \"./types\";\nimport { bpfrpt_proptype_RenderedRows } from \"./types\";\nimport { bpfrpt_proptype_Scroll } from \"./types\";\nimport PropTypes from \"prop-types\";","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/binary-search-bounds\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\nfunction _GEA(a, l, h, y) {\n var i = h + 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (x >= y) {\n i = m;\n h = m - 1;\n } else {\n l = m + 1;\n }\n }\n\n return i;\n}\n\nfunction _GEP(a, l, h, y, c) {\n var i = h + 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (c(x, y) >= 0) {\n i = m;\n h = m - 1;\n } else {\n l = m + 1;\n }\n }\n\n return i;\n}\n\nfunction dispatchBsearchGE(a, y, c, l, h) {\n if (typeof c === 'function') {\n return _GEP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n } else {\n return _GEA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n }\n}\n\nfunction _GTA(a, l, h, y) {\n var i = h + 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (x > y) {\n i = m;\n h = m - 1;\n } else {\n l = m + 1;\n }\n }\n\n return i;\n}\n\nfunction _GTP(a, l, h, y, c) {\n var i = h + 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (c(x, y) > 0) {\n i = m;\n h = m - 1;\n } else {\n l = m + 1;\n }\n }\n\n return i;\n}\n\nfunction dispatchBsearchGT(a, y, c, l, h) {\n if (typeof c === 'function') {\n return _GTP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n } else {\n return _GTA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n }\n}\n\nfunction _LTA(a, l, h, y) {\n var i = l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (x < y) {\n i = m;\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return i;\n}\n\nfunction _LTP(a, l, h, y, c) {\n var i = l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (c(x, y) < 0) {\n i = m;\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return i;\n}\n\nfunction dispatchBsearchLT(a, y, c, l, h) {\n if (typeof c === 'function') {\n return _LTP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n } else {\n return _LTA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n }\n}\n\nfunction _LEA(a, l, h, y) {\n var i = l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (x <= y) {\n i = m;\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return i;\n}\n\nfunction _LEP(a, l, h, y, c) {\n var i = l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (c(x, y) <= 0) {\n i = m;\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return i;\n}\n\nfunction dispatchBsearchLE(a, y, c, l, h) {\n if (typeof c === 'function') {\n return _LEP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n } else {\n return _LEA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n }\n}\n\nfunction _EQA(a, l, h, y) {\n l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n\n if (x === y) {\n return m;\n } else if (x <= y) {\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return -1;\n}\n\nfunction _EQP(a, l, h, y, c) {\n l - 1;\n\n while (l <= h) {\n var m = l + h >>> 1,\n x = a[m];\n var p = c(x, y);\n\n if (p === 0) {\n return m;\n } else if (p <= 0) {\n l = m + 1;\n } else {\n h = m - 1;\n }\n }\n\n return -1;\n}\n\nfunction dispatchBsearchEQ(a, y, c, l, h) {\n if (typeof c === 'function') {\n return _EQP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n } else {\n return _EQA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n }\n}\n\nexport default {\n ge: dispatchBsearchGE,\n gt: dispatchBsearchGT,\n lt: dispatchBsearchLT,\n le: dispatchBsearchLE,\n eq: dispatchBsearchEQ\n};","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/interval-tree-1d\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax in an upstream dependency.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\nimport bounds from './binarySearchBounds';\nvar NOT_FOUND = 0;\nvar SUCCESS = 1;\nvar EMPTY = 2;\n\nfunction IntervalTreeNode(mid, left, right, leftPoints, rightPoints) {\n this.mid = mid;\n this.left = left;\n this.right = right;\n this.leftPoints = leftPoints;\n this.rightPoints = rightPoints;\n this.count = (left ? left.count : 0) + (right ? right.count : 0) + leftPoints.length;\n}\n\nvar proto = IntervalTreeNode.prototype;\n\nfunction copy(a, b) {\n a.mid = b.mid;\n a.left = b.left;\n a.right = b.right;\n a.leftPoints = b.leftPoints;\n a.rightPoints = b.rightPoints;\n a.count = b.count;\n}\n\nfunction rebuild(node, intervals) {\n var ntree = createIntervalTree(intervals);\n node.mid = ntree.mid;\n node.left = ntree.left;\n node.right = ntree.right;\n node.leftPoints = ntree.leftPoints;\n node.rightPoints = ntree.rightPoints;\n node.count = ntree.count;\n}\n\nfunction rebuildWithInterval(node, interval) {\n var intervals = node.intervals([]);\n intervals.push(interval);\n rebuild(node, intervals);\n}\n\nfunction rebuildWithoutInterval(node, interval) {\n var intervals = node.intervals([]);\n var idx = intervals.indexOf(interval);\n\n if (idx < 0) {\n return NOT_FOUND;\n }\n\n intervals.splice(idx, 1);\n rebuild(node, intervals);\n return SUCCESS;\n}\n\nproto.intervals = function (result) {\n result.push.apply(result, this.leftPoints);\n\n if (this.left) {\n this.left.intervals(result);\n }\n\n if (this.right) {\n this.right.intervals(result);\n }\n\n return result;\n};\n\nproto.insert = function (interval) {\n var weight = this.count - this.leftPoints.length;\n this.count += 1;\n\n if (interval[1] < this.mid) {\n if (this.left) {\n if (4 * (this.left.count + 1) > 3 * (weight + 1)) {\n rebuildWithInterval(this, interval);\n } else {\n this.left.insert(interval);\n }\n } else {\n this.left = createIntervalTree([interval]);\n }\n } else if (interval[0] > this.mid) {\n if (this.right) {\n if (4 * (this.right.count + 1) > 3 * (weight + 1)) {\n rebuildWithInterval(this, interval);\n } else {\n this.right.insert(interval);\n }\n } else {\n this.right = createIntervalTree([interval]);\n }\n } else {\n var l = bounds.ge(this.leftPoints, interval, compareBegin);\n var r = bounds.ge(this.rightPoints, interval, compareEnd);\n this.leftPoints.splice(l, 0, interval);\n this.rightPoints.splice(r, 0, interval);\n }\n};\n\nproto.remove = function (interval) {\n var weight = this.count - this.leftPoints;\n\n if (interval[1] < this.mid) {\n if (!this.left) {\n return NOT_FOUND;\n }\n\n var rw = this.right ? this.right.count : 0;\n\n if (4 * rw > 3 * (weight - 1)) {\n return rebuildWithoutInterval(this, interval);\n }\n\n var r = this.left.remove(interval);\n\n if (r === EMPTY) {\n this.left = null;\n this.count -= 1;\n return SUCCESS;\n } else if (r === SUCCESS) {\n this.count -= 1;\n }\n\n return r;\n } else if (interval[0] > this.mid) {\n if (!this.right) {\n return NOT_FOUND;\n }\n\n var lw = this.left ? this.left.count : 0;\n\n if (4 * lw > 3 * (weight - 1)) {\n return rebuildWithoutInterval(this, interval);\n }\n\n var r = this.right.remove(interval);\n\n if (r === EMPTY) {\n this.right = null;\n this.count -= 1;\n return SUCCESS;\n } else if (r === SUCCESS) {\n this.count -= 1;\n }\n\n return r;\n } else {\n if (this.count === 1) {\n if (this.leftPoints[0] === interval) {\n return EMPTY;\n } else {\n return NOT_FOUND;\n }\n }\n\n if (this.leftPoints.length === 1 && this.leftPoints[0] === interval) {\n if (this.left && this.right) {\n var p = this;\n var n = this.left;\n\n while (n.right) {\n p = n;\n n = n.right;\n }\n\n if (p === this) {\n n.right = this.right;\n } else {\n var l = this.left;\n var r = this.right;\n p.count -= n.count;\n p.right = n.left;\n n.left = l;\n n.right = r;\n }\n\n copy(this, n);\n this.count = (this.left ? this.left.count : 0) + (this.right ? this.right.count : 0) + this.leftPoints.length;\n } else if (this.left) {\n copy(this, this.left);\n } else {\n copy(this, this.right);\n }\n\n return SUCCESS;\n }\n\n for (var l = bounds.ge(this.leftPoints, interval, compareBegin); l < this.leftPoints.length; ++l) {\n if (this.leftPoints[l][0] !== interval[0]) {\n break;\n }\n\n if (this.leftPoints[l] === interval) {\n this.count -= 1;\n this.leftPoints.splice(l, 1);\n\n for (var r = bounds.ge(this.rightPoints, interval, compareEnd); r < this.rightPoints.length; ++r) {\n if (this.rightPoints[r][1] !== interval[1]) {\n break;\n } else if (this.rightPoints[r] === interval) {\n this.rightPoints.splice(r, 1);\n return SUCCESS;\n }\n }\n }\n }\n\n return NOT_FOUND;\n }\n};\n\nfunction reportLeftRange(arr, hi, cb) {\n for (var i = 0; i < arr.length && arr[i][0] <= hi; ++i) {\n var r = cb(arr[i]);\n\n if (r) {\n return r;\n }\n }\n}\n\nfunction reportRightRange(arr, lo, cb) {\n for (var i = arr.length - 1; i >= 0 && arr[i][1] >= lo; --i) {\n var r = cb(arr[i]);\n\n if (r) {\n return r;\n }\n }\n}\n\nfunction reportRange(arr, cb) {\n for (var i = 0; i < arr.length; ++i) {\n var r = cb(arr[i]);\n\n if (r) {\n return r;\n }\n }\n}\n\nproto.queryPoint = function (x, cb) {\n if (x < this.mid) {\n if (this.left) {\n var r = this.left.queryPoint(x, cb);\n\n if (r) {\n return r;\n }\n }\n\n return reportLeftRange(this.leftPoints, x, cb);\n } else if (x > this.mid) {\n if (this.right) {\n var r = this.right.queryPoint(x, cb);\n\n if (r) {\n return r;\n }\n }\n\n return reportRightRange(this.rightPoints, x, cb);\n } else {\n return reportRange(this.leftPoints, cb);\n }\n};\n\nproto.queryInterval = function (lo, hi, cb) {\n if (lo < this.mid && this.left) {\n var r = this.left.queryInterval(lo, hi, cb);\n\n if (r) {\n return r;\n }\n }\n\n if (hi > this.mid && this.right) {\n var r = this.right.queryInterval(lo, hi, cb);\n\n if (r) {\n return r;\n }\n }\n\n if (hi < this.mid) {\n return reportLeftRange(this.leftPoints, hi, cb);\n } else if (lo > this.mid) {\n return reportRightRange(this.rightPoints, lo, cb);\n } else {\n return reportRange(this.leftPoints, cb);\n }\n};\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction compareBegin(a, b) {\n var d = a[0] - b[0];\n\n if (d) {\n return d;\n }\n\n return a[1] - b[1];\n}\n\nfunction compareEnd(a, b) {\n var d = a[1] - b[1];\n\n if (d) {\n return d;\n }\n\n return a[0] - b[0];\n}\n\nfunction createIntervalTree(intervals) {\n if (intervals.length === 0) {\n return null;\n }\n\n var pts = [];\n\n for (var i = 0; i < intervals.length; ++i) {\n pts.push(intervals[i][0], intervals[i][1]);\n }\n\n pts.sort(compareNumbers);\n var mid = pts[pts.length >> 1];\n var leftIntervals = [];\n var rightIntervals = [];\n var centerIntervals = [];\n\n for (var i = 0; i < intervals.length; ++i) {\n var s = intervals[i];\n\n if (s[1] < mid) {\n leftIntervals.push(s);\n } else if (mid < s[0]) {\n rightIntervals.push(s);\n } else {\n centerIntervals.push(s);\n }\n } //Split center intervals\n\n\n var leftPoints = centerIntervals;\n var rightPoints = centerIntervals.slice();\n leftPoints.sort(compareBegin);\n rightPoints.sort(compareEnd);\n return new IntervalTreeNode(mid, createIntervalTree(leftIntervals), createIntervalTree(rightIntervals), leftPoints, rightPoints);\n} //User friendly wrapper that makes it possible to support empty trees\n\n\nfunction IntervalTree(root) {\n this.root = root;\n}\n\nvar tproto = IntervalTree.prototype;\n\ntproto.insert = function (interval) {\n if (this.root) {\n this.root.insert(interval);\n } else {\n this.root = new IntervalTreeNode(interval[0], null, null, [interval], [interval]);\n }\n};\n\ntproto.remove = function (interval) {\n if (this.root) {\n var r = this.root.remove(interval);\n\n if (r === EMPTY) {\n this.root = null;\n }\n\n return r !== NOT_FOUND;\n }\n\n return false;\n};\n\ntproto.queryPoint = function (p, cb) {\n if (this.root) {\n return this.root.queryPoint(p, cb);\n }\n};\n\ntproto.queryInterval = function (lo, hi, cb) {\n if (lo <= hi && this.root) {\n return this.root.queryInterval(lo, hi, cb);\n }\n};\n\nObject.defineProperty(tproto, 'count', {\n get: function get() {\n if (this.root) {\n return this.root.count;\n }\n\n return 0;\n }\n});\nObject.defineProperty(tproto, 'intervals', {\n get: function get() {\n if (this.root) {\n return this.root.intervals([]);\n }\n\n return [];\n }\n});\nexport default function createWrapper(intervals) {\n if (!intervals || intervals.length === 0) {\n return new IntervalTree(null);\n }\n\n return new IntervalTree(createIntervalTree(intervals));\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport createIntervalTree from '../vendor/intervalTree';\n\n// Position cache requirements:\n// O(log(n)) lookup of cells to render for a given viewport size\n// O(1) lookup of shortest measured column (so we know when to enter phase 1)\nvar PositionCache =\n/*#__PURE__*/\nfunction () {\n function PositionCache() {\n _classCallCheck(this, PositionCache);\n\n _defineProperty(this, \"_columnSizeMap\", {});\n\n _defineProperty(this, \"_intervalTree\", createIntervalTree());\n\n _defineProperty(this, \"_leftMap\", {});\n }\n\n _createClass(PositionCache, [{\n key: \"estimateTotalHeight\",\n value: function estimateTotalHeight(cellCount, columnCount, defaultCellHeight) {\n var unmeasuredCellCount = cellCount - this.count;\n return this.tallestColumnSize + Math.ceil(unmeasuredCellCount / columnCount) * defaultCellHeight;\n } // Render all cells visible within the viewport range defined.\n\n }, {\n key: \"range\",\n value: function range(scrollTop, clientHeight, renderCallback) {\n var _this = this;\n\n this._intervalTree.queryInterval(scrollTop, scrollTop + clientHeight, function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n top = _ref2[0],\n _ = _ref2[1],\n index = _ref2[2];\n\n return renderCallback(index, _this._leftMap[index], top);\n });\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(index, left, top, height) {\n this._intervalTree.insert([top, top + height, index]);\n\n this._leftMap[index] = left;\n var columnSizeMap = this._columnSizeMap;\n var columnHeight = columnSizeMap[left];\n\n if (columnHeight === undefined) {\n columnSizeMap[left] = top + height;\n } else {\n columnSizeMap[left] = Math.max(columnHeight, top + height);\n }\n }\n }, {\n key: \"count\",\n get: function get() {\n return this._intervalTree.count;\n }\n }, {\n key: \"shortestColumnSize\",\n get: function get() {\n var columnSizeMap = this._columnSizeMap;\n var size = 0;\n\n for (var i in columnSizeMap) {\n var height = columnSizeMap[i];\n size = size === 0 ? height : Math.min(size, height);\n }\n\n return size;\n }\n }, {\n key: \"tallestColumnSize\",\n get: function get() {\n var columnSizeMap = this._columnSizeMap;\n var size = 0;\n\n for (var i in columnSizeMap) {\n var height = columnSizeMap[i];\n size = Math.max(size, height);\n }\n\n return size;\n }\n }]);\n\n return PositionCache;\n}();\n\nexport { PositionCache as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport PositionCache from './PositionCache';\nimport { requestAnimationTimeout, cancelAnimationTimeout } from '../utils/requestAnimationTimeout';\nvar emptyObject = {};\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\n\nexport var DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n/**\n * This component efficiently displays arbitrarily positioned cells using windowing techniques.\n * Cell position is determined by an injected `cellPositioner` property.\n * Windowing is vertical; this component does not support horizontal scrolling.\n *\n * Rendering occurs in two phases:\n * 1) First pass uses estimated cell sizes (provided by the cache) to determine how many cells to measure in a batch.\n * Batch size is chosen using a fast, naive layout algorithm that stacks images in order until the viewport has been filled.\n * After measurement is complete (componentDidMount or componentDidUpdate) this component evaluates positioned cells\n * in order to determine if another measurement pass is required (eg if actual cell sizes were less than estimated sizes).\n * All measurements are permanently cached (keyed by `keyMapper`) for performance purposes.\n * 2) Second pass uses the external `cellPositioner` to layout cells.\n * At this time the positioner has access to cached size measurements for all cells.\n * The positions it returns are cached by Masonry for fast access later.\n * Phase one is repeated if the user scrolls beyond the current layout's bounds.\n * If the layout is invalidated due to eg a resize, cached positions can be cleared using `recomputeCellPositions()`.\n *\n * Animation constraints:\n * Simple animations are supported (eg translate/slide into place on initial reveal).\n * More complex animations are not (eg flying from one position to another on resize).\n *\n * Layout constraints:\n * This component supports multi-column layout.\n * The height of each item may vary.\n * The width of each item must not exceed the width of the column it is \"in\".\n * The left position of all items within a column must align.\n * (Items may not span multiple columns.)\n */\n\nvar Masonry = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(Masonry, _React$PureComponent);\n\n function Masonry() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Masonry);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Masonry)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n isScrolling: false,\n scrollTop: 0\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_debounceResetIsScrollingId\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_invalidateOnUpdateStartIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_invalidateOnUpdateStopIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_positionCache\", new PositionCache());\n\n _defineProperty(_assertThisInitialized(_this), \"_startIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_startIndexMemoized\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_stopIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_stopIndexMemoized\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_debounceResetIsScrollingCallback\", function () {\n _this.setState({\n isScrolling: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_setScrollingContainerRef\", function (ref) {\n _this._scrollingContainer = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScroll\", function (event) {\n var height = _this.props.height;\n var eventScrollTop = event.currentTarget.scrollTop; // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n // This causes a series of rapid renders that is slow for long lists.\n // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n\n var scrollTop = Math.min(Math.max(0, _this._getEstimatedTotalHeight() - height), eventScrollTop); // On iOS, we can arrive at negative offsets by swiping past the start or end.\n // Avoid re-rendering in this case as it can cause problems; see #532 for more.\n\n if (eventScrollTop !== scrollTop) {\n return;\n } // Prevent pointer events from interrupting a smooth scroll\n\n\n _this._debounceResetIsScrolling(); // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n // Don't force a re-render if this is the case.\n // The mouse may move faster then the animation frame does.\n // Use requestAnimationFrame to avoid over-updating.\n\n\n if (_this.state.scrollTop !== scrollTop) {\n _this.setState({\n isScrolling: true,\n scrollTop: scrollTop\n });\n }\n });\n\n return _this;\n }\n\n _createClass(Masonry, [{\n key: \"clearCellPositions\",\n value: function clearCellPositions() {\n this._positionCache = new PositionCache();\n this.forceUpdate();\n } // HACK This method signature was intended for Grid\n\n }, {\n key: \"invalidateCellSizeAfterRender\",\n value: function invalidateCellSizeAfterRender(_ref) {\n var index = _ref.rowIndex;\n\n if (this._invalidateOnUpdateStartIndex === null) {\n this._invalidateOnUpdateStartIndex = index;\n this._invalidateOnUpdateStopIndex = index;\n } else {\n this._invalidateOnUpdateStartIndex = Math.min(this._invalidateOnUpdateStartIndex, index);\n this._invalidateOnUpdateStopIndex = Math.max(this._invalidateOnUpdateStopIndex, index);\n }\n }\n }, {\n key: \"recomputeCellPositions\",\n value: function recomputeCellPositions() {\n var stopIndex = this._positionCache.count - 1;\n this._positionCache = new PositionCache();\n\n this._populatePositionCache(0, stopIndex);\n\n this.forceUpdate();\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._checkInvalidateOnUpdate();\n\n this._invokeOnScrollCallback();\n\n this._invokeOnCellsRenderedCallback();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n this._checkInvalidateOnUpdate();\n\n this._invokeOnScrollCallback();\n\n this._invokeOnCellsRenderedCallback();\n\n if (this.props.scrollTop !== prevProps.scrollTop) {\n this._debounceResetIsScrolling();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this._debounceResetIsScrollingId) {\n cancelAnimationTimeout(this._debounceResetIsScrollingId);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n autoHeight = _this$props.autoHeight,\n cellCount = _this$props.cellCount,\n cellMeasurerCache = _this$props.cellMeasurerCache,\n cellRenderer = _this$props.cellRenderer,\n className = _this$props.className,\n height = _this$props.height,\n id = _this$props.id,\n keyMapper = _this$props.keyMapper,\n overscanByPixels = _this$props.overscanByPixels,\n role = _this$props.role,\n style = _this$props.style,\n tabIndex = _this$props.tabIndex,\n width = _this$props.width,\n rowDirection = _this$props.rowDirection;\n var _this$state = this.state,\n isScrolling = _this$state.isScrolling,\n scrollTop = _this$state.scrollTop;\n var children = [];\n\n var estimateTotalHeight = this._getEstimatedTotalHeight();\n\n var shortestColumnSize = this._positionCache.shortestColumnSize;\n var measuredCellCount = this._positionCache.count;\n var startIndex = 0;\n var stopIndex;\n\n this._positionCache.range(Math.max(0, scrollTop - overscanByPixels), height + overscanByPixels * 2, function (index, left, top) {\n var _style;\n\n if (typeof stopIndex === 'undefined') {\n startIndex = index;\n stopIndex = index;\n } else {\n startIndex = Math.min(startIndex, index);\n stopIndex = Math.max(stopIndex, index);\n }\n\n children.push(cellRenderer({\n index: index,\n isScrolling: isScrolling,\n key: keyMapper(index),\n parent: _this2,\n style: (_style = {\n height: cellMeasurerCache.getHeight(index)\n }, _defineProperty(_style, rowDirection === 'ltr' ? 'left' : 'right', left), _defineProperty(_style, \"position\", 'absolute'), _defineProperty(_style, \"top\", top), _defineProperty(_style, \"width\", cellMeasurerCache.getWidth(index)), _style)\n }));\n }); // We need to measure additional cells for this layout\n\n\n if (shortestColumnSize < scrollTop + height + overscanByPixels && measuredCellCount < cellCount) {\n var batchSize = Math.min(cellCount - measuredCellCount, Math.ceil((scrollTop + height + overscanByPixels - shortestColumnSize) / cellMeasurerCache.defaultHeight * width / cellMeasurerCache.defaultWidth));\n\n for (var _index = measuredCellCount; _index < measuredCellCount + batchSize; _index++) {\n stopIndex = _index;\n children.push(cellRenderer({\n index: _index,\n isScrolling: isScrolling,\n key: keyMapper(_index),\n parent: this,\n style: {\n width: cellMeasurerCache.getWidth(_index)\n }\n }));\n }\n }\n\n this._startIndex = startIndex;\n this._stopIndex = stopIndex;\n return React.createElement(\"div\", {\n ref: this._setScrollingContainerRef,\n \"aria-label\": this.props['aria-label'],\n className: clsx('ReactVirtualized__Masonry', className),\n id: id,\n onScroll: this._onScroll,\n role: role,\n style: _objectSpread({\n boxSizing: 'border-box',\n direction: 'ltr',\n height: autoHeight ? 'auto' : height,\n overflowX: 'hidden',\n overflowY: estimateTotalHeight < height ? 'hidden' : 'auto',\n position: 'relative',\n width: width,\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform'\n }, style),\n tabIndex: tabIndex\n }, React.createElement(\"div\", {\n className: \"ReactVirtualized__Masonry__innerScrollContainer\",\n style: {\n width: '100%',\n height: estimateTotalHeight,\n maxWidth: '100%',\n maxHeight: estimateTotalHeight,\n overflow: 'hidden',\n pointerEvents: isScrolling ? 'none' : '',\n position: 'relative'\n }\n }, children));\n }\n }, {\n key: \"_checkInvalidateOnUpdate\",\n value: function _checkInvalidateOnUpdate() {\n if (typeof this._invalidateOnUpdateStartIndex === 'number') {\n var startIndex = this._invalidateOnUpdateStartIndex;\n var stopIndex = this._invalidateOnUpdateStopIndex;\n this._invalidateOnUpdateStartIndex = null;\n this._invalidateOnUpdateStopIndex = null; // Query external layout logic for position of newly-measured cells\n\n this._populatePositionCache(startIndex, stopIndex);\n\n this.forceUpdate();\n }\n }\n }, {\n key: \"_debounceResetIsScrolling\",\n value: function _debounceResetIsScrolling() {\n var scrollingResetTimeInterval = this.props.scrollingResetTimeInterval;\n\n if (this._debounceResetIsScrollingId) {\n cancelAnimationTimeout(this._debounceResetIsScrollingId);\n }\n\n this._debounceResetIsScrollingId = requestAnimationTimeout(this._debounceResetIsScrollingCallback, scrollingResetTimeInterval);\n }\n }, {\n key: \"_getEstimatedTotalHeight\",\n value: function _getEstimatedTotalHeight() {\n var _this$props2 = this.props,\n cellCount = _this$props2.cellCount,\n cellMeasurerCache = _this$props2.cellMeasurerCache,\n width = _this$props2.width;\n var estimatedColumnCount = Math.max(1, Math.floor(width / cellMeasurerCache.defaultWidth));\n return this._positionCache.estimateTotalHeight(cellCount, estimatedColumnCount, cellMeasurerCache.defaultHeight);\n }\n }, {\n key: \"_invokeOnScrollCallback\",\n value: function _invokeOnScrollCallback() {\n var _this$props3 = this.props,\n height = _this$props3.height,\n onScroll = _this$props3.onScroll;\n var scrollTop = this.state.scrollTop;\n\n if (this._onScrollMemoized !== scrollTop) {\n onScroll({\n clientHeight: height,\n scrollHeight: this._getEstimatedTotalHeight(),\n scrollTop: scrollTop\n });\n this._onScrollMemoized = scrollTop;\n }\n }\n }, {\n key: \"_invokeOnCellsRenderedCallback\",\n value: function _invokeOnCellsRenderedCallback() {\n if (this._startIndexMemoized !== this._startIndex || this._stopIndexMemoized !== this._stopIndex) {\n var onCellsRendered = this.props.onCellsRendered;\n onCellsRendered({\n startIndex: this._startIndex,\n stopIndex: this._stopIndex\n });\n this._startIndexMemoized = this._startIndex;\n this._stopIndexMemoized = this._stopIndex;\n }\n }\n }, {\n key: \"_populatePositionCache\",\n value: function _populatePositionCache(startIndex, stopIndex) {\n var _this$props4 = this.props,\n cellMeasurerCache = _this$props4.cellMeasurerCache,\n cellPositioner = _this$props4.cellPositioner;\n\n for (var _index2 = startIndex; _index2 <= stopIndex; _index2++) {\n var _cellPositioner = cellPositioner(_index2),\n left = _cellPositioner.left,\n top = _cellPositioner.top;\n\n this._positionCache.setPosition(_index2, left, top, cellMeasurerCache.getHeight(_index2));\n }\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.scrollTop !== undefined && prevState.scrollTop !== nextProps.scrollTop) {\n return {\n isScrolling: true,\n scrollTop: nextProps.scrollTop\n };\n }\n\n return null;\n }\n }]);\n\n return Masonry;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n \"autoHeight\": PropTypes.bool.isRequired,\n \"cellCount\": PropTypes.number.isRequired,\n \"cellMeasurerCache\": function cellMeasurerCache() {\n return (typeof CellMeasurerCache === \"function\" ? PropTypes.instanceOf(CellMeasurerCache).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n },\n \"cellPositioner\": function cellPositioner() {\n return (typeof Positioner === \"function\" ? PropTypes.instanceOf(Positioner).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n },\n \"cellRenderer\": function cellRenderer() {\n return (typeof CellRenderer === \"function\" ? PropTypes.instanceOf(CellRenderer).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n },\n \"className\": PropTypes.string,\n \"height\": PropTypes.number.isRequired,\n \"id\": PropTypes.string,\n \"keyMapper\": function keyMapper() {\n return (typeof KeyMapper === \"function\" ? PropTypes.instanceOf(KeyMapper).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n },\n \"onCellsRendered\": function onCellsRendered() {\n return (typeof OnCellsRenderedCallback === \"function\" ? PropTypes.instanceOf(OnCellsRenderedCallback) : PropTypes.any).apply(this, arguments);\n },\n \"onScroll\": function onScroll() {\n return (typeof OnScrollCallback === \"function\" ? PropTypes.instanceOf(OnScrollCallback) : PropTypes.any).apply(this, arguments);\n },\n \"overscanByPixels\": PropTypes.number.isRequired,\n \"role\": PropTypes.string.isRequired,\n \"scrollingResetTimeInterval\": PropTypes.number.isRequired,\n \"style\": function style(props, propName, componentName) {\n if (!Object.prototype.hasOwnProperty.call(props, propName)) {\n throw new Error(\"Prop `\".concat(propName, \"` has type 'any' or 'mixed', but was not provided to `\").concat(componentName, \"`. Pass undefined or any other value.\"));\n }\n },\n \"tabIndex\": PropTypes.number.isRequired,\n \"width\": PropTypes.number.isRequired,\n \"rowDirection\": PropTypes.string.isRequired,\n \"scrollTop\": PropTypes.number\n}), _temp);\n\n_defineProperty(Masonry, \"defaultProps\", {\n autoHeight: false,\n keyMapper: identity,\n onCellsRendered: noop,\n onScroll: noop,\n overscanByPixels: 20,\n role: 'grid',\n scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n style: emptyObject,\n tabIndex: 0,\n rowDirection: 'ltr'\n});\n\nfunction identity(value) {\n return value;\n}\n\nfunction noop() {}\n\nvar bpfrpt_proptype_CellMeasurerCache = process.env.NODE_ENV === 'production' ? null : {\n \"defaultHeight\": PropTypes.number.isRequired,\n \"defaultWidth\": PropTypes.number.isRequired,\n \"getHeight\": PropTypes.func.isRequired,\n \"getWidth\": PropTypes.func.isRequired\n};\npolyfill(Masonry);\nexport default Masonry;\nvar bpfrpt_proptype_Positioner = process.env.NODE_ENV === 'production' ? null : PropTypes.func;\nimport { bpfrpt_proptype_AnimationTimeoutId } from \"../utils/requestAnimationTimeout\";\nimport PropTypes from \"prop-types\";\nexport { bpfrpt_proptype_CellMeasurerCache };\nexport { bpfrpt_proptype_Positioner };","import createCellPositioner from './createCellPositioner';\nimport Masonry from './Masonry';\nexport default Masonry;\nexport { createCellPositioner, Masonry };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { CellMeasurerCache } from '../CellMeasurer';\n\n/**\n * Caches measurements for a given cell.\n */\nvar CellMeasurerCacheDecorator =\n/*#__PURE__*/\nfunction () {\n function CellMeasurerCacheDecorator() {\n var _this = this;\n\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, CellMeasurerCacheDecorator);\n\n _defineProperty(this, \"_cellMeasurerCache\", void 0);\n\n _defineProperty(this, \"_columnIndexOffset\", void 0);\n\n _defineProperty(this, \"_rowIndexOffset\", void 0);\n\n _defineProperty(this, \"columnWidth\", function (_ref) {\n var index = _ref.index;\n\n _this._cellMeasurerCache.columnWidth({\n index: index + _this._columnIndexOffset\n });\n });\n\n _defineProperty(this, \"rowHeight\", function (_ref2) {\n var index = _ref2.index;\n\n _this._cellMeasurerCache.rowHeight({\n index: index + _this._rowIndexOffset\n });\n });\n\n var cellMeasurerCache = params.cellMeasurerCache,\n _params$columnIndexOf = params.columnIndexOffset,\n columnIndexOffset = _params$columnIndexOf === void 0 ? 0 : _params$columnIndexOf,\n _params$rowIndexOffse = params.rowIndexOffset,\n rowIndexOffset = _params$rowIndexOffse === void 0 ? 0 : _params$rowIndexOffse;\n this._cellMeasurerCache = cellMeasurerCache;\n this._columnIndexOffset = columnIndexOffset;\n this._rowIndexOffset = rowIndexOffset;\n }\n\n _createClass(CellMeasurerCacheDecorator, [{\n key: \"clear\",\n value: function clear(rowIndex, columnIndex) {\n this._cellMeasurerCache.clear(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n }\n }, {\n key: \"clearAll\",\n value: function clearAll() {\n this._cellMeasurerCache.clearAll();\n }\n }, {\n key: \"hasFixedHeight\",\n value: function hasFixedHeight() {\n return this._cellMeasurerCache.hasFixedHeight();\n }\n }, {\n key: \"hasFixedWidth\",\n value: function hasFixedWidth() {\n return this._cellMeasurerCache.hasFixedWidth();\n }\n }, {\n key: \"getHeight\",\n value: function getHeight(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return this._cellMeasurerCache.getHeight(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n }\n }, {\n key: \"getWidth\",\n value: function getWidth(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return this._cellMeasurerCache.getWidth(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n }\n }, {\n key: \"has\",\n value: function has(rowIndex) {\n var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return this._cellMeasurerCache.has(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n }\n }, {\n key: \"set\",\n value: function set(rowIndex, columnIndex, width, height) {\n this._cellMeasurerCache.set(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset, width, height);\n }\n }, {\n key: \"defaultHeight\",\n get: function get() {\n return this._cellMeasurerCache.defaultHeight;\n }\n }, {\n key: \"defaultWidth\",\n get: function get() {\n return this._cellMeasurerCache.defaultWidth;\n }\n }]);\n\n return CellMeasurerCacheDecorator;\n}();\n\nexport { CellMeasurerCacheDecorator as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport CellMeasurerCacheDecorator from './CellMeasurerCacheDecorator';\nimport Grid from '../Grid';\nvar SCROLLBAR_SIZE_BUFFER = 20;\n/**\n * Renders 1, 2, or 4 Grids depending on configuration.\n * A main (body) Grid will always be rendered.\n * Optionally, 1-2 Grids for sticky header rows will also be rendered.\n * If no sticky columns, only 1 sticky header Grid will be rendered.\n * If sticky columns, 2 sticky header Grids will be rendered.\n */\n\nvar MultiGrid =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(MultiGrid, _React$PureComponent);\n\n function MultiGrid(props, context) {\n var _this;\n\n _classCallCheck(this, MultiGrid);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(MultiGrid).call(this, props, context));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n scrollLeft: 0,\n scrollTop: 0,\n scrollbarSize: 0,\n showHorizontalScrollbar: false,\n showVerticalScrollbar: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_deferredInvalidateColumnIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_deferredInvalidateRowIndex\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"_bottomLeftGridRef\", function (ref) {\n _this._bottomLeftGrid = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_bottomRightGridRef\", function (ref) {\n _this._bottomRightGrid = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_cellRendererBottomLeftGrid\", function (_ref) {\n var rowIndex = _ref.rowIndex,\n rest = _objectWithoutProperties(_ref, [\"rowIndex\"]);\n\n var _this$props = _this.props,\n cellRenderer = _this$props.cellRenderer,\n fixedRowCount = _this$props.fixedRowCount,\n rowCount = _this$props.rowCount;\n\n if (rowIndex === rowCount - fixedRowCount) {\n return React.createElement(\"div\", {\n key: rest.key,\n style: _objectSpread({}, rest.style, {\n height: SCROLLBAR_SIZE_BUFFER\n })\n });\n } else {\n return cellRenderer(_objectSpread({}, rest, {\n parent: _assertThisInitialized(_this),\n rowIndex: rowIndex + fixedRowCount\n }));\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_cellRendererBottomRightGrid\", function (_ref2) {\n var columnIndex = _ref2.columnIndex,\n rowIndex = _ref2.rowIndex,\n rest = _objectWithoutProperties(_ref2, [\"columnIndex\", \"rowIndex\"]);\n\n var _this$props2 = _this.props,\n cellRenderer = _this$props2.cellRenderer,\n fixedColumnCount = _this$props2.fixedColumnCount,\n fixedRowCount = _this$props2.fixedRowCount;\n return cellRenderer(_objectSpread({}, rest, {\n columnIndex: columnIndex + fixedColumnCount,\n parent: _assertThisInitialized(_this),\n rowIndex: rowIndex + fixedRowCount\n }));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_cellRendererTopRightGrid\", function (_ref3) {\n var columnIndex = _ref3.columnIndex,\n rest = _objectWithoutProperties(_ref3, [\"columnIndex\"]);\n\n var _this$props3 = _this.props,\n cellRenderer = _this$props3.cellRenderer,\n columnCount = _this$props3.columnCount,\n fixedColumnCount = _this$props3.fixedColumnCount;\n\n if (columnIndex === columnCount - fixedColumnCount) {\n return React.createElement(\"div\", {\n key: rest.key,\n style: _objectSpread({}, rest.style, {\n width: SCROLLBAR_SIZE_BUFFER\n })\n });\n } else {\n return cellRenderer(_objectSpread({}, rest, {\n columnIndex: columnIndex + fixedColumnCount,\n parent: _assertThisInitialized(_this)\n }));\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_columnWidthRightGrid\", function (_ref4) {\n var index = _ref4.index;\n var _this$props4 = _this.props,\n columnCount = _this$props4.columnCount,\n fixedColumnCount = _this$props4.fixedColumnCount,\n columnWidth = _this$props4.columnWidth;\n var _this$state = _this.state,\n scrollbarSize = _this$state.scrollbarSize,\n showHorizontalScrollbar = _this$state.showHorizontalScrollbar; // An extra cell is added to the count\n // This gives the smaller Grid extra room for offset,\n // In case the main (bottom right) Grid has a scrollbar\n // If no scrollbar, the extra space is overflow:hidden anyway\n\n if (showHorizontalScrollbar && index === columnCount - fixedColumnCount) {\n return scrollbarSize;\n }\n\n return typeof columnWidth === 'function' ? columnWidth({\n index: index + fixedColumnCount\n }) : columnWidth;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScroll\", function (scrollInfo) {\n var scrollLeft = scrollInfo.scrollLeft,\n scrollTop = scrollInfo.scrollTop;\n\n _this.setState({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n\n var onScroll = _this.props.onScroll;\n\n if (onScroll) {\n onScroll(scrollInfo);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScrollbarPresenceChange\", function (_ref5) {\n var horizontal = _ref5.horizontal,\n size = _ref5.size,\n vertical = _ref5.vertical;\n var _this$state2 = _this.state,\n showHorizontalScrollbar = _this$state2.showHorizontalScrollbar,\n showVerticalScrollbar = _this$state2.showVerticalScrollbar;\n\n if (horizontal !== showHorizontalScrollbar || vertical !== showVerticalScrollbar) {\n _this.setState({\n scrollbarSize: size,\n showHorizontalScrollbar: horizontal,\n showVerticalScrollbar: vertical\n });\n\n var onScrollbarPresenceChange = _this.props.onScrollbarPresenceChange;\n\n if (typeof onScrollbarPresenceChange === 'function') {\n onScrollbarPresenceChange({\n horizontal: horizontal,\n size: size,\n vertical: vertical\n });\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScrollLeft\", function (scrollInfo) {\n var scrollLeft = scrollInfo.scrollLeft;\n\n _this._onScroll({\n scrollLeft: scrollLeft,\n scrollTop: _this.state.scrollTop\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onScrollTop\", function (scrollInfo) {\n var scrollTop = scrollInfo.scrollTop;\n\n _this._onScroll({\n scrollTop: scrollTop,\n scrollLeft: _this.state.scrollLeft\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_rowHeightBottomGrid\", function (_ref6) {\n var index = _ref6.index;\n var _this$props5 = _this.props,\n fixedRowCount = _this$props5.fixedRowCount,\n rowCount = _this$props5.rowCount,\n rowHeight = _this$props5.rowHeight;\n var _this$state3 = _this.state,\n scrollbarSize = _this$state3.scrollbarSize,\n showVerticalScrollbar = _this$state3.showVerticalScrollbar; // An extra cell is added to the count\n // This gives the smaller Grid extra room for offset,\n // In case the main (bottom right) Grid has a scrollbar\n // If no scrollbar, the extra space is overflow:hidden anyway\n\n if (showVerticalScrollbar && index === rowCount - fixedRowCount) {\n return scrollbarSize;\n }\n\n return typeof rowHeight === 'function' ? rowHeight({\n index: index + fixedRowCount\n }) : rowHeight;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_topLeftGridRef\", function (ref) {\n _this._topLeftGrid = ref;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_topRightGridRef\", function (ref) {\n _this._topRightGrid = ref;\n });\n\n var deferredMeasurementCache = props.deferredMeasurementCache,\n _fixedColumnCount = props.fixedColumnCount,\n _fixedRowCount = props.fixedRowCount;\n\n _this._maybeCalculateCachedStyles(true);\n\n if (deferredMeasurementCache) {\n _this._deferredMeasurementCacheBottomLeftGrid = _fixedRowCount > 0 ? new CellMeasurerCacheDecorator({\n cellMeasurerCache: deferredMeasurementCache,\n columnIndexOffset: 0,\n rowIndexOffset: _fixedRowCount\n }) : deferredMeasurementCache;\n _this._deferredMeasurementCacheBottomRightGrid = _fixedColumnCount > 0 || _fixedRowCount > 0 ? new CellMeasurerCacheDecorator({\n cellMeasurerCache: deferredMeasurementCache,\n columnIndexOffset: _fixedColumnCount,\n rowIndexOffset: _fixedRowCount\n }) : deferredMeasurementCache;\n _this._deferredMeasurementCacheTopRightGrid = _fixedColumnCount > 0 ? new CellMeasurerCacheDecorator({\n cellMeasurerCache: deferredMeasurementCache,\n columnIndexOffset: _fixedColumnCount,\n rowIndexOffset: 0\n }) : deferredMeasurementCache;\n }\n\n return _this;\n }\n\n _createClass(MultiGrid, [{\n key: \"forceUpdateGrids\",\n value: function forceUpdateGrids() {\n this._bottomLeftGrid && this._bottomLeftGrid.forceUpdate();\n this._bottomRightGrid && this._bottomRightGrid.forceUpdate();\n this._topLeftGrid && this._topLeftGrid.forceUpdate();\n this._topRightGrid && this._topRightGrid.forceUpdate();\n }\n /** See Grid#invalidateCellSizeAfterRender */\n\n }, {\n key: \"invalidateCellSizeAfterRender\",\n value: function invalidateCellSizeAfterRender() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref7$columnIndex = _ref7.columnIndex,\n columnIndex = _ref7$columnIndex === void 0 ? 0 : _ref7$columnIndex,\n _ref7$rowIndex = _ref7.rowIndex,\n rowIndex = _ref7$rowIndex === void 0 ? 0 : _ref7$rowIndex;\n\n this._deferredInvalidateColumnIndex = typeof this._deferredInvalidateColumnIndex === 'number' ? Math.min(this._deferredInvalidateColumnIndex, columnIndex) : columnIndex;\n this._deferredInvalidateRowIndex = typeof this._deferredInvalidateRowIndex === 'number' ? Math.min(this._deferredInvalidateRowIndex, rowIndex) : rowIndex;\n }\n /** See Grid#measureAllCells */\n\n }, {\n key: \"measureAllCells\",\n value: function measureAllCells() {\n this._bottomLeftGrid && this._bottomLeftGrid.measureAllCells();\n this._bottomRightGrid && this._bottomRightGrid.measureAllCells();\n this._topLeftGrid && this._topLeftGrid.measureAllCells();\n this._topRightGrid && this._topRightGrid.measureAllCells();\n }\n /** See Grid#recomputeGridSize */\n\n }, {\n key: \"recomputeGridSize\",\n value: function recomputeGridSize() {\n var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref8$columnIndex = _ref8.columnIndex,\n columnIndex = _ref8$columnIndex === void 0 ? 0 : _ref8$columnIndex,\n _ref8$rowIndex = _ref8.rowIndex,\n rowIndex = _ref8$rowIndex === void 0 ? 0 : _ref8$rowIndex;\n\n var _this$props6 = this.props,\n fixedColumnCount = _this$props6.fixedColumnCount,\n fixedRowCount = _this$props6.fixedRowCount;\n var adjustedColumnIndex = Math.max(0, columnIndex - fixedColumnCount);\n var adjustedRowIndex = Math.max(0, rowIndex - fixedRowCount);\n this._bottomLeftGrid && this._bottomLeftGrid.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: adjustedRowIndex\n });\n this._bottomRightGrid && this._bottomRightGrid.recomputeGridSize({\n columnIndex: adjustedColumnIndex,\n rowIndex: adjustedRowIndex\n });\n this._topLeftGrid && this._topLeftGrid.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n this._topRightGrid && this._topRightGrid.recomputeGridSize({\n columnIndex: adjustedColumnIndex,\n rowIndex: rowIndex\n });\n this._leftGridWidth = null;\n this._topGridHeight = null;\n\n this._maybeCalculateCachedStyles(true);\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props7 = this.props,\n scrollLeft = _this$props7.scrollLeft,\n scrollTop = _this$props7.scrollTop;\n\n if (scrollLeft > 0 || scrollTop > 0) {\n var newState = {};\n\n if (scrollLeft > 0) {\n newState.scrollLeft = scrollLeft;\n }\n\n if (scrollTop > 0) {\n newState.scrollTop = scrollTop;\n }\n\n this.setState(newState);\n }\n\n this._handleInvalidatedGridSize();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this._handleInvalidatedGridSize();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props8 = this.props,\n onScroll = _this$props8.onScroll,\n onSectionRendered = _this$props8.onSectionRendered,\n onScrollbarPresenceChange = _this$props8.onScrollbarPresenceChange,\n scrollLeftProp = _this$props8.scrollLeft,\n scrollToColumn = _this$props8.scrollToColumn,\n scrollTopProp = _this$props8.scrollTop,\n scrollToRow = _this$props8.scrollToRow,\n rest = _objectWithoutProperties(_this$props8, [\"onScroll\", \"onSectionRendered\", \"onScrollbarPresenceChange\", \"scrollLeft\", \"scrollToColumn\", \"scrollTop\", \"scrollToRow\"]);\n\n this._prepareForRender(); // Don't render any of our Grids if there are no cells.\n // This mirrors what Grid does,\n // And prevents us from recording inaccurage measurements when used with CellMeasurer.\n\n\n if (this.props.width === 0 || this.props.height === 0) {\n return null;\n } // scrollTop and scrollLeft props are explicitly filtered out and ignored\n\n\n var _this$state4 = this.state,\n scrollLeft = _this$state4.scrollLeft,\n scrollTop = _this$state4.scrollTop;\n return React.createElement(\"div\", {\n style: this._containerOuterStyle\n }, React.createElement(\"div\", {\n style: this._containerTopStyle\n }, this._renderTopLeftGrid(rest), this._renderTopRightGrid(_objectSpread({}, rest, {\n onScroll: onScroll,\n scrollLeft: scrollLeft\n }))), React.createElement(\"div\", {\n style: this._containerBottomStyle\n }, this._renderBottomLeftGrid(_objectSpread({}, rest, {\n onScroll: onScroll,\n scrollTop: scrollTop\n })), this._renderBottomRightGrid(_objectSpread({}, rest, {\n onScroll: onScroll,\n onSectionRendered: onSectionRendered,\n scrollLeft: scrollLeft,\n scrollToColumn: scrollToColumn,\n scrollToRow: scrollToRow,\n scrollTop: scrollTop\n }))));\n }\n }, {\n key: \"_getBottomGridHeight\",\n value: function _getBottomGridHeight(props) {\n var height = props.height;\n\n var topGridHeight = this._getTopGridHeight(props);\n\n return height - topGridHeight;\n }\n }, {\n key: \"_getLeftGridWidth\",\n value: function _getLeftGridWidth(props) {\n var fixedColumnCount = props.fixedColumnCount,\n columnWidth = props.columnWidth;\n\n if (this._leftGridWidth == null) {\n if (typeof columnWidth === 'function') {\n var leftGridWidth = 0;\n\n for (var index = 0; index < fixedColumnCount; index++) {\n leftGridWidth += columnWidth({\n index: index\n });\n }\n\n this._leftGridWidth = leftGridWidth;\n } else {\n this._leftGridWidth = columnWidth * fixedColumnCount;\n }\n }\n\n return this._leftGridWidth;\n }\n }, {\n key: \"_getRightGridWidth\",\n value: function _getRightGridWidth(props) {\n var width = props.width;\n\n var leftGridWidth = this._getLeftGridWidth(props);\n\n return width - leftGridWidth;\n }\n }, {\n key: \"_getTopGridHeight\",\n value: function _getTopGridHeight(props) {\n var fixedRowCount = props.fixedRowCount,\n rowHeight = props.rowHeight;\n\n if (this._topGridHeight == null) {\n if (typeof rowHeight === 'function') {\n var topGridHeight = 0;\n\n for (var index = 0; index < fixedRowCount; index++) {\n topGridHeight += rowHeight({\n index: index\n });\n }\n\n this._topGridHeight = topGridHeight;\n } else {\n this._topGridHeight = rowHeight * fixedRowCount;\n }\n }\n\n return this._topGridHeight;\n }\n }, {\n key: \"_handleInvalidatedGridSize\",\n value: function _handleInvalidatedGridSize() {\n if (typeof this._deferredInvalidateColumnIndex === 'number') {\n var columnIndex = this._deferredInvalidateColumnIndex;\n var rowIndex = this._deferredInvalidateRowIndex;\n this._deferredInvalidateColumnIndex = null;\n this._deferredInvalidateRowIndex = null;\n this.recomputeGridSize({\n columnIndex: columnIndex,\n rowIndex: rowIndex\n });\n this.forceUpdate();\n }\n }\n /**\n * Avoid recreating inline styles each render; this bypasses Grid's shallowCompare.\n * This method recalculates styles only when specific props change.\n */\n\n }, {\n key: \"_maybeCalculateCachedStyles\",\n value: function _maybeCalculateCachedStyles(resetAll) {\n var _this$props9 = this.props,\n columnWidth = _this$props9.columnWidth,\n enableFixedColumnScroll = _this$props9.enableFixedColumnScroll,\n enableFixedRowScroll = _this$props9.enableFixedRowScroll,\n height = _this$props9.height,\n fixedColumnCount = _this$props9.fixedColumnCount,\n fixedRowCount = _this$props9.fixedRowCount,\n rowHeight = _this$props9.rowHeight,\n style = _this$props9.style,\n styleBottomLeftGrid = _this$props9.styleBottomLeftGrid,\n styleBottomRightGrid = _this$props9.styleBottomRightGrid,\n styleTopLeftGrid = _this$props9.styleTopLeftGrid,\n styleTopRightGrid = _this$props9.styleTopRightGrid,\n width = _this$props9.width;\n var sizeChange = resetAll || height !== this._lastRenderedHeight || width !== this._lastRenderedWidth;\n var leftSizeChange = resetAll || columnWidth !== this._lastRenderedColumnWidth || fixedColumnCount !== this._lastRenderedFixedColumnCount;\n var topSizeChange = resetAll || fixedRowCount !== this._lastRenderedFixedRowCount || rowHeight !== this._lastRenderedRowHeight;\n\n if (resetAll || sizeChange || style !== this._lastRenderedStyle) {\n this._containerOuterStyle = _objectSpread({\n height: height,\n overflow: 'visible',\n // Let :focus outline show through\n width: width\n }, style);\n }\n\n if (resetAll || sizeChange || topSizeChange) {\n this._containerTopStyle = {\n height: this._getTopGridHeight(this.props),\n position: 'relative',\n width: width\n };\n this._containerBottomStyle = {\n height: height - this._getTopGridHeight(this.props),\n overflow: 'visible',\n // Let :focus outline show through\n position: 'relative',\n width: width\n };\n }\n\n if (resetAll || styleBottomLeftGrid !== this._lastRenderedStyleBottomLeftGrid) {\n this._bottomLeftGridStyle = _objectSpread({\n left: 0,\n overflowX: 'hidden',\n overflowY: enableFixedColumnScroll ? 'auto' : 'hidden',\n position: 'absolute'\n }, styleBottomLeftGrid);\n }\n\n if (resetAll || leftSizeChange || styleBottomRightGrid !== this._lastRenderedStyleBottomRightGrid) {\n this._bottomRightGridStyle = _objectSpread({\n left: this._getLeftGridWidth(this.props),\n position: 'absolute'\n }, styleBottomRightGrid);\n }\n\n if (resetAll || styleTopLeftGrid !== this._lastRenderedStyleTopLeftGrid) {\n this._topLeftGridStyle = _objectSpread({\n left: 0,\n overflowX: 'hidden',\n overflowY: 'hidden',\n position: 'absolute',\n top: 0\n }, styleTopLeftGrid);\n }\n\n if (resetAll || leftSizeChange || styleTopRightGrid !== this._lastRenderedStyleTopRightGrid) {\n this._topRightGridStyle = _objectSpread({\n left: this._getLeftGridWidth(this.props),\n overflowX: enableFixedRowScroll ? 'auto' : 'hidden',\n overflowY: 'hidden',\n position: 'absolute',\n top: 0\n }, styleTopRightGrid);\n }\n\n this._lastRenderedColumnWidth = columnWidth;\n this._lastRenderedFixedColumnCount = fixedColumnCount;\n this._lastRenderedFixedRowCount = fixedRowCount;\n this._lastRenderedHeight = height;\n this._lastRenderedRowHeight = rowHeight;\n this._lastRenderedStyle = style;\n this._lastRenderedStyleBottomLeftGrid = styleBottomLeftGrid;\n this._lastRenderedStyleBottomRightGrid = styleBottomRightGrid;\n this._lastRenderedStyleTopLeftGrid = styleTopLeftGrid;\n this._lastRenderedStyleTopRightGrid = styleTopRightGrid;\n this._lastRenderedWidth = width;\n }\n }, {\n key: \"_prepareForRender\",\n value: function _prepareForRender() {\n if (this._lastRenderedColumnWidth !== this.props.columnWidth || this._lastRenderedFixedColumnCount !== this.props.fixedColumnCount) {\n this._leftGridWidth = null;\n }\n\n if (this._lastRenderedFixedRowCount !== this.props.fixedRowCount || this._lastRenderedRowHeight !== this.props.rowHeight) {\n this._topGridHeight = null;\n }\n\n this._maybeCalculateCachedStyles();\n\n this._lastRenderedColumnWidth = this.props.columnWidth;\n this._lastRenderedFixedColumnCount = this.props.fixedColumnCount;\n this._lastRenderedFixedRowCount = this.props.fixedRowCount;\n this._lastRenderedRowHeight = this.props.rowHeight;\n }\n }, {\n key: \"_renderBottomLeftGrid\",\n value: function _renderBottomLeftGrid(props) {\n var enableFixedColumnScroll = props.enableFixedColumnScroll,\n fixedColumnCount = props.fixedColumnCount,\n fixedRowCount = props.fixedRowCount,\n rowCount = props.rowCount,\n hideBottomLeftGridScrollbar = props.hideBottomLeftGridScrollbar;\n var showVerticalScrollbar = this.state.showVerticalScrollbar;\n\n if (!fixedColumnCount) {\n return null;\n }\n\n var additionalRowCount = showVerticalScrollbar ? 1 : 0,\n height = this._getBottomGridHeight(props),\n width = this._getLeftGridWidth(props),\n scrollbarSize = this.state.showVerticalScrollbar ? this.state.scrollbarSize : 0,\n gridWidth = hideBottomLeftGridScrollbar ? width + scrollbarSize : width;\n\n var bottomLeftGrid = React.createElement(Grid, _extends({}, props, {\n cellRenderer: this._cellRendererBottomLeftGrid,\n className: this.props.classNameBottomLeftGrid,\n columnCount: fixedColumnCount,\n deferredMeasurementCache: this._deferredMeasurementCacheBottomLeftGrid,\n height: height,\n onScroll: enableFixedColumnScroll ? this._onScrollTop : undefined,\n ref: this._bottomLeftGridRef,\n rowCount: Math.max(0, rowCount - fixedRowCount) + additionalRowCount,\n rowHeight: this._rowHeightBottomGrid,\n style: this._bottomLeftGridStyle,\n tabIndex: null,\n width: gridWidth\n }));\n\n if (hideBottomLeftGridScrollbar) {\n return React.createElement(\"div\", {\n className: \"BottomLeftGrid_ScrollWrapper\",\n style: _objectSpread({}, this._bottomLeftGridStyle, {\n height: height,\n width: width,\n overflowY: 'hidden'\n })\n }, bottomLeftGrid);\n }\n\n return bottomLeftGrid;\n }\n }, {\n key: \"_renderBottomRightGrid\",\n value: function _renderBottomRightGrid(props) {\n var columnCount = props.columnCount,\n fixedColumnCount = props.fixedColumnCount,\n fixedRowCount = props.fixedRowCount,\n rowCount = props.rowCount,\n scrollToColumn = props.scrollToColumn,\n scrollToRow = props.scrollToRow;\n return React.createElement(Grid, _extends({}, props, {\n cellRenderer: this._cellRendererBottomRightGrid,\n className: this.props.classNameBottomRightGrid,\n columnCount: Math.max(0, columnCount - fixedColumnCount),\n columnWidth: this._columnWidthRightGrid,\n deferredMeasurementCache: this._deferredMeasurementCacheBottomRightGrid,\n height: this._getBottomGridHeight(props),\n onScroll: this._onScroll,\n onScrollbarPresenceChange: this._onScrollbarPresenceChange,\n ref: this._bottomRightGridRef,\n rowCount: Math.max(0, rowCount - fixedRowCount),\n rowHeight: this._rowHeightBottomGrid,\n scrollToColumn: scrollToColumn - fixedColumnCount,\n scrollToRow: scrollToRow - fixedRowCount,\n style: this._bottomRightGridStyle,\n width: this._getRightGridWidth(props)\n }));\n }\n }, {\n key: \"_renderTopLeftGrid\",\n value: function _renderTopLeftGrid(props) {\n var fixedColumnCount = props.fixedColumnCount,\n fixedRowCount = props.fixedRowCount;\n\n if (!fixedColumnCount || !fixedRowCount) {\n return null;\n }\n\n return React.createElement(Grid, _extends({}, props, {\n className: this.props.classNameTopLeftGrid,\n columnCount: fixedColumnCount,\n height: this._getTopGridHeight(props),\n ref: this._topLeftGridRef,\n rowCount: fixedRowCount,\n style: this._topLeftGridStyle,\n tabIndex: null,\n width: this._getLeftGridWidth(props)\n }));\n }\n }, {\n key: \"_renderTopRightGrid\",\n value: function _renderTopRightGrid(props) {\n var columnCount = props.columnCount,\n enableFixedRowScroll = props.enableFixedRowScroll,\n fixedColumnCount = props.fixedColumnCount,\n fixedRowCount = props.fixedRowCount,\n scrollLeft = props.scrollLeft,\n hideTopRightGridScrollbar = props.hideTopRightGridScrollbar;\n var _this$state5 = this.state,\n showHorizontalScrollbar = _this$state5.showHorizontalScrollbar,\n scrollbarSize = _this$state5.scrollbarSize;\n\n if (!fixedRowCount) {\n return null;\n }\n\n var additionalColumnCount = showHorizontalScrollbar ? 1 : 0,\n height = this._getTopGridHeight(props),\n width = this._getRightGridWidth(props),\n additionalHeight = showHorizontalScrollbar ? scrollbarSize : 0;\n\n var gridHeight = height,\n style = this._topRightGridStyle;\n\n if (hideTopRightGridScrollbar) {\n gridHeight = height + additionalHeight;\n style = _objectSpread({}, this._topRightGridStyle, {\n left: 0\n });\n }\n\n var topRightGrid = React.createElement(Grid, _extends({}, props, {\n cellRenderer: this._cellRendererTopRightGrid,\n className: this.props.classNameTopRightGrid,\n columnCount: Math.max(0, columnCount - fixedColumnCount) + additionalColumnCount,\n columnWidth: this._columnWidthRightGrid,\n deferredMeasurementCache: this._deferredMeasurementCacheTopRightGrid,\n height: gridHeight,\n onScroll: enableFixedRowScroll ? this._onScrollLeft : undefined,\n ref: this._topRightGridRef,\n rowCount: fixedRowCount,\n scrollLeft: scrollLeft,\n style: style,\n tabIndex: null,\n width: width\n }));\n\n if (hideTopRightGridScrollbar) {\n return React.createElement(\"div\", {\n className: \"TopRightGrid_ScrollWrapper\",\n style: _objectSpread({}, this._topRightGridStyle, {\n height: height,\n width: width,\n overflowX: 'hidden'\n })\n }, topRightGrid);\n }\n\n return topRightGrid;\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.scrollLeft !== prevState.scrollLeft || nextProps.scrollTop !== prevState.scrollTop) {\n return {\n scrollLeft: nextProps.scrollLeft != null && nextProps.scrollLeft >= 0 ? nextProps.scrollLeft : prevState.scrollLeft,\n scrollTop: nextProps.scrollTop != null && nextProps.scrollTop >= 0 ? nextProps.scrollTop : prevState.scrollTop\n };\n }\n\n return null;\n }\n }]);\n\n return MultiGrid;\n}(React.PureComponent);\n\n_defineProperty(MultiGrid, \"defaultProps\", {\n classNameBottomLeftGrid: '',\n classNameBottomRightGrid: '',\n classNameTopLeftGrid: '',\n classNameTopRightGrid: '',\n enableFixedColumnScroll: false,\n enableFixedRowScroll: false,\n fixedColumnCount: 0,\n fixedRowCount: 0,\n scrollToColumn: -1,\n scrollToRow: -1,\n style: {},\n styleBottomLeftGrid: {},\n styleBottomRightGrid: {},\n styleTopLeftGrid: {},\n styleTopRightGrid: {},\n hideTopRightGridScrollbar: false,\n hideBottomLeftGridScrollbar: false\n});\n\nMultiGrid.propTypes = process.env.NODE_ENV !== \"production\" ? {\n classNameBottomLeftGrid: PropTypes.string.isRequired,\n classNameBottomRightGrid: PropTypes.string.isRequired,\n classNameTopLeftGrid: PropTypes.string.isRequired,\n classNameTopRightGrid: PropTypes.string.isRequired,\n enableFixedColumnScroll: PropTypes.bool.isRequired,\n enableFixedRowScroll: PropTypes.bool.isRequired,\n fixedColumnCount: PropTypes.number.isRequired,\n fixedRowCount: PropTypes.number.isRequired,\n onScrollbarPresenceChange: PropTypes.func,\n style: PropTypes.object.isRequired,\n styleBottomLeftGrid: PropTypes.object.isRequired,\n styleBottomRightGrid: PropTypes.object.isRequired,\n styleTopLeftGrid: PropTypes.object.isRequired,\n styleTopRightGrid: PropTypes.object.isRequired,\n hideTopRightGridScrollbar: PropTypes.bool,\n hideBottomLeftGridScrollbar: PropTypes.bool\n} : {};\npolyfill(MultiGrid);\nexport default MultiGrid;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\n/**\n * HOC that simplifies the process of synchronizing scrolling between two or more virtualized components.\n */\n\nvar ScrollSync =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(ScrollSync, _React$PureComponent);\n\n function ScrollSync(props, context) {\n var _this;\n\n _classCallCheck(this, ScrollSync);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ScrollSync).call(this, props, context));\n _this.state = {\n clientHeight: 0,\n clientWidth: 0,\n scrollHeight: 0,\n scrollLeft: 0,\n scrollTop: 0,\n scrollWidth: 0\n };\n _this._onScroll = _this._onScroll.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(ScrollSync, [{\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n var _this$state = this.state,\n clientHeight = _this$state.clientHeight,\n clientWidth = _this$state.clientWidth,\n scrollHeight = _this$state.scrollHeight,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop,\n scrollWidth = _this$state.scrollWidth;\n return children({\n clientHeight: clientHeight,\n clientWidth: clientWidth,\n onScroll: this._onScroll,\n scrollHeight: scrollHeight,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: scrollWidth\n });\n }\n }, {\n key: \"_onScroll\",\n value: function _onScroll(_ref) {\n var clientHeight = _ref.clientHeight,\n clientWidth = _ref.clientWidth,\n scrollHeight = _ref.scrollHeight,\n scrollLeft = _ref.scrollLeft,\n scrollTop = _ref.scrollTop,\n scrollWidth = _ref.scrollWidth;\n this.setState({\n clientHeight: clientHeight,\n clientWidth: clientWidth,\n scrollHeight: scrollHeight,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollWidth: scrollWidth\n });\n }\n }]);\n\n return ScrollSync;\n}(React.PureComponent);\n\nexport { ScrollSync as default };\nScrollSync.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * Function responsible for rendering 2 or more virtualized components.\n * This function should implement the following signature:\n * ({ onScroll, scrollLeft, scrollTop }) => PropTypes.element\n */\n children: PropTypes.func.isRequired\n} : {};","import * as React from 'react';\nexport default function defaultHeaderRowRenderer(_ref) {\n var className = _ref.className,\n columns = _ref.columns,\n style = _ref.style;\n return React.createElement(\"div\", {\n className: className,\n role: \"row\",\n style: style\n }, columns);\n}\ndefaultHeaderRowRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_HeaderRowRendererParams === PropTypes.any ? {} : bpfrpt_proptype_HeaderRowRendererParams;\nimport { bpfrpt_proptype_HeaderRowRendererParams } from \"./types\";\nimport PropTypes from \"prop-types\";","var SortDirection = {\n /**\n * Sort items in ascending order.\n * This means arranging from the lowest value to the highest (e.g. a-z, 0-9).\n */\n ASC: 'ASC',\n\n /**\n * Sort items in descending order.\n * This means arranging from the highest value to the lowest (e.g. z-a, 9-0).\n */\n DESC: 'DESC'\n};\nexport default SortDirection;","import clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport SortDirection from './SortDirection';\n/**\n * Displayed beside a header to indicate that a Table is currently sorted by this column.\n */\n\nexport default function SortIndicator(_ref) {\n var sortDirection = _ref.sortDirection;\n var classNames = clsx('ReactVirtualized__Table__sortableHeaderIcon', {\n 'ReactVirtualized__Table__sortableHeaderIcon--ASC': sortDirection === SortDirection.ASC,\n 'ReactVirtualized__Table__sortableHeaderIcon--DESC': sortDirection === SortDirection.DESC\n });\n return React.createElement(\"svg\", {\n className: classNames,\n width: 18,\n height: 18,\n viewBox: \"0 0 24 24\"\n }, sortDirection === SortDirection.ASC ? React.createElement(\"path\", {\n d: \"M7 14l5-5 5 5z\"\n }) : React.createElement(\"path\", {\n d: \"M7 10l5 5 5-5z\"\n }), React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n }));\n}\nSortIndicator.propTypes = process.env.NODE_ENV !== \"production\" ? {\n sortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC])\n} : {};","import * as React from 'react';\nimport SortIndicator from './SortIndicator';\n\n/**\n * Default table header renderer.\n */\nexport default function defaultHeaderRenderer(_ref) {\n var dataKey = _ref.dataKey,\n label = _ref.label,\n sortBy = _ref.sortBy,\n sortDirection = _ref.sortDirection;\n var showSortIndicator = sortBy === dataKey;\n var children = [React.createElement(\"span\", {\n className: \"ReactVirtualized__Table__headerTruncatedText\",\n key: \"label\",\n title: typeof label === 'string' ? label : null\n }, label)];\n\n if (showSortIndicator) {\n children.push(React.createElement(SortIndicator, {\n key: \"SortIndicator\",\n sortDirection: sortDirection\n }));\n }\n\n return children;\n}\ndefaultHeaderRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_HeaderRendererParams === PropTypes.any ? {} : bpfrpt_proptype_HeaderRendererParams;\nimport { bpfrpt_proptype_HeaderRendererParams } from \"./types\";\nimport PropTypes from \"prop-types\";","import _extends from \"@babel/runtime/helpers/extends\";\nimport * as React from 'react';\n\n/**\n * Default row renderer for Table.\n */\nexport default function defaultRowRenderer(_ref) {\n var className = _ref.className,\n columns = _ref.columns,\n index = _ref.index,\n key = _ref.key,\n onRowClick = _ref.onRowClick,\n onRowDoubleClick = _ref.onRowDoubleClick,\n onRowMouseOut = _ref.onRowMouseOut,\n onRowMouseOver = _ref.onRowMouseOver,\n onRowRightClick = _ref.onRowRightClick,\n rowData = _ref.rowData,\n style = _ref.style;\n var a11yProps = {\n 'aria-rowindex': index + 1\n };\n\n if (onRowClick || onRowDoubleClick || onRowMouseOut || onRowMouseOver || onRowRightClick) {\n a11yProps['aria-label'] = 'row';\n a11yProps.tabIndex = 0;\n\n if (onRowClick) {\n a11yProps.onClick = function (event) {\n return onRowClick({\n event: event,\n index: index,\n rowData: rowData\n });\n };\n }\n\n if (onRowDoubleClick) {\n a11yProps.onDoubleClick = function (event) {\n return onRowDoubleClick({\n event: event,\n index: index,\n rowData: rowData\n });\n };\n }\n\n if (onRowMouseOut) {\n a11yProps.onMouseOut = function (event) {\n return onRowMouseOut({\n event: event,\n index: index,\n rowData: rowData\n });\n };\n }\n\n if (onRowMouseOver) {\n a11yProps.onMouseOver = function (event) {\n return onRowMouseOver({\n event: event,\n index: index,\n rowData: rowData\n });\n };\n }\n\n if (onRowRightClick) {\n a11yProps.onContextMenu = function (event) {\n return onRowRightClick({\n event: event,\n index: index,\n rowData: rowData\n });\n };\n }\n }\n\n return React.createElement(\"div\", _extends({}, a11yProps, {\n className: className,\n key: key,\n role: \"row\",\n style: style\n }), columns);\n}\ndefaultRowRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_RowRendererParams === PropTypes.any ? {} : bpfrpt_proptype_RowRendererParams;\nimport { bpfrpt_proptype_RowRendererParams } from \"./types\";\nimport PropTypes from \"prop-types\";","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport defaultHeaderRenderer from './defaultHeaderRenderer';\nimport defaultCellRenderer from './defaultCellRenderer';\nimport defaultCellDataGetter from './defaultCellDataGetter';\nimport SortDirection from './SortDirection';\n/**\n * Describes the header and cell contents of a table column.\n */\n\nvar Column =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(Column, _React$Component);\n\n function Column() {\n _classCallCheck(this, Column);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Column).apply(this, arguments));\n }\n\n return Column;\n}(React.Component);\n\n_defineProperty(Column, \"defaultProps\", {\n cellDataGetter: defaultCellDataGetter,\n cellRenderer: defaultCellRenderer,\n defaultSortDirection: SortDirection.ASC,\n flexGrow: 0,\n flexShrink: 1,\n headerRenderer: defaultHeaderRenderer,\n style: {}\n});\n\nexport { Column as default };\nColumn.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** Optional aria-label value to set on the column header */\n 'aria-label': PropTypes.string,\n\n /**\n * Callback responsible for returning a cell's data, given its :dataKey\n * ({ columnData: any, dataKey: string, rowData: any }): any\n */\n cellDataGetter: PropTypes.func,\n\n /**\n * Callback responsible for rendering a cell's contents.\n * ({ cellData: any, columnData: any, dataKey: string, rowData: any, rowIndex: number }): node\n */\n cellRenderer: PropTypes.func,\n\n /** Optional CSS class to apply to cell */\n className: PropTypes.string,\n\n /** Optional additional data passed to this column's :cellDataGetter */\n columnData: PropTypes.object,\n\n /** Uniquely identifies the row-data attribute corresponding to this cell */\n dataKey: PropTypes.any.isRequired,\n\n /** Optional direction to be used when clicked the first time */\n defaultSortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC]),\n\n /** If sort is enabled for the table at large, disable it for this column */\n disableSort: PropTypes.bool,\n\n /** Flex grow style; defaults to 0 */\n flexGrow: PropTypes.number,\n\n /** Flex shrink style; defaults to 1 */\n flexShrink: PropTypes.number,\n\n /** Optional CSS class to apply to this column's header */\n headerClassName: PropTypes.string,\n\n /**\n * Optional callback responsible for rendering a column header contents.\n * ({ columnData: object, dataKey: string, disableSort: boolean, label: node, sortBy: string, sortDirection: string }): PropTypes.node\n */\n headerRenderer: PropTypes.func.isRequired,\n\n /** Optional inline style to apply to this column's header */\n headerStyle: PropTypes.object,\n\n /** Optional id to set on the column header */\n id: PropTypes.string,\n\n /** Header label for this column */\n label: PropTypes.node,\n\n /** Maximum width of column; this property will only be used if :flexGrow is > 0. */\n maxWidth: PropTypes.number,\n\n /** Minimum width of column. */\n minWidth: PropTypes.number,\n\n /** Optional inline style to apply to cell */\n style: PropTypes.object,\n\n /** Flex basis (width) for this column; This value can grow or shrink based on :flexGrow and :flexShrink properties. */\n width: PropTypes.number.isRequired\n} : {};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport clsx from 'clsx';\nimport Column from './Column';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport Grid, { accessibilityOverscanIndicesGetter } from '../Grid';\nimport defaultRowRenderer from './defaultRowRenderer';\nimport defaultHeaderRowRenderer from './defaultHeaderRowRenderer';\nimport SortDirection from './SortDirection';\n/**\n * Table component with fixed headers and virtualized rows for improved performance with large data sets.\n * This component expects explicit width, height, and padding parameters.\n */\n\nvar Table =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(Table, _React$PureComponent);\n\n function Table(props) {\n var _this;\n\n _classCallCheck(this, Table);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Table).call(this, props));\n _this.state = {\n scrollbarWidth: 0\n };\n _this._createColumn = _this._createColumn.bind(_assertThisInitialized(_this));\n _this._createRow = _this._createRow.bind(_assertThisInitialized(_this));\n _this._onScroll = _this._onScroll.bind(_assertThisInitialized(_this));\n _this._onSectionRendered = _this._onSectionRendered.bind(_assertThisInitialized(_this));\n _this._setRef = _this._setRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(Table, [{\n key: \"forceUpdateGrid\",\n value: function forceUpdateGrid() {\n if (this.Grid) {\n this.Grid.forceUpdate();\n }\n }\n /** See Grid#getOffsetForCell */\n\n }, {\n key: \"getOffsetForRow\",\n value: function getOffsetForRow(_ref) {\n var alignment = _ref.alignment,\n index = _ref.index;\n\n if (this.Grid) {\n var _this$Grid$getOffsetF = this.Grid.getOffsetForCell({\n alignment: alignment,\n rowIndex: index\n }),\n scrollTop = _this$Grid$getOffsetF.scrollTop;\n\n return scrollTop;\n }\n\n return 0;\n }\n /** CellMeasurer compatibility */\n\n }, {\n key: \"invalidateCellSizeAfterRender\",\n value: function invalidateCellSizeAfterRender(_ref2) {\n var columnIndex = _ref2.columnIndex,\n rowIndex = _ref2.rowIndex;\n\n if (this.Grid) {\n this.Grid.invalidateCellSizeAfterRender({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n /** See Grid#measureAllCells */\n\n }, {\n key: \"measureAllRows\",\n value: function measureAllRows() {\n if (this.Grid) {\n this.Grid.measureAllCells();\n }\n }\n /** CellMeasurer compatibility */\n\n }, {\n key: \"recomputeGridSize\",\n value: function recomputeGridSize() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$columnIndex = _ref3.columnIndex,\n columnIndex = _ref3$columnIndex === void 0 ? 0 : _ref3$columnIndex,\n _ref3$rowIndex = _ref3.rowIndex,\n rowIndex = _ref3$rowIndex === void 0 ? 0 : _ref3$rowIndex;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n }\n }\n /** See Grid#recomputeGridSize */\n\n }, {\n key: \"recomputeRowHeights\",\n value: function recomputeRowHeights() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.recomputeGridSize({\n rowIndex: index\n });\n }\n }\n /** See Grid#scrollToPosition */\n\n }, {\n key: \"scrollToPosition\",\n value: function scrollToPosition() {\n var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToPosition({\n scrollTop: scrollTop\n });\n }\n }\n /** See Grid#scrollToCell */\n\n }, {\n key: \"scrollToRow\",\n value: function scrollToRow() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.Grid) {\n this.Grid.scrollToCell({\n columnIndex: 0,\n rowIndex: index\n });\n }\n }\n }, {\n key: \"getScrollbarWidth\",\n value: function getScrollbarWidth() {\n if (this.Grid) {\n var _Grid = findDOMNode(this.Grid);\n\n var clientWidth = _Grid.clientWidth || 0;\n var offsetWidth = _Grid.offsetWidth || 0;\n return offsetWidth - clientWidth;\n }\n\n return 0;\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._setScrollbarWidth();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this._setScrollbarWidth();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n children = _this$props.children,\n className = _this$props.className,\n disableHeader = _this$props.disableHeader,\n gridClassName = _this$props.gridClassName,\n gridStyle = _this$props.gridStyle,\n headerHeight = _this$props.headerHeight,\n headerRowRenderer = _this$props.headerRowRenderer,\n height = _this$props.height,\n id = _this$props.id,\n noRowsRenderer = _this$props.noRowsRenderer,\n rowClassName = _this$props.rowClassName,\n rowStyle = _this$props.rowStyle,\n scrollToIndex = _this$props.scrollToIndex,\n style = _this$props.style,\n width = _this$props.width;\n var scrollbarWidth = this.state.scrollbarWidth;\n var availableRowsHeight = disableHeader ? height : height - headerHeight;\n var rowClass = typeof rowClassName === 'function' ? rowClassName({\n index: -1\n }) : rowClassName;\n var rowStyleObject = typeof rowStyle === 'function' ? rowStyle({\n index: -1\n }) : rowStyle; // Precompute and cache column styles before rendering rows and columns to speed things up\n\n this._cachedColumnStyles = [];\n React.Children.toArray(children).forEach(function (column, index) {\n var flexStyles = _this2._getFlexStyleForColumn(column, column.props.style);\n\n _this2._cachedColumnStyles[index] = _objectSpread({\n overflow: 'hidden'\n }, flexStyles);\n }); // Note that we specify :rowCount, :scrollbarWidth, :sortBy, and :sortDirection as properties on Grid even though these have nothing to do with Grid.\n // This is done because Grid is a pure component and won't update unless its properties or state has changed.\n // Any property that should trigger a re-render of Grid then is specified here to avoid a stale display.\n\n return React.createElement(\"div\", {\n \"aria-label\": this.props['aria-label'],\n \"aria-labelledby\": this.props['aria-labelledby'],\n \"aria-colcount\": React.Children.toArray(children).length,\n \"aria-rowcount\": this.props.rowCount,\n className: clsx('ReactVirtualized__Table', className),\n id: id,\n role: \"grid\",\n style: style\n }, !disableHeader && headerRowRenderer({\n className: clsx('ReactVirtualized__Table__headerRow', rowClass),\n columns: this._getHeaderColumns(),\n style: _objectSpread({\n height: headerHeight,\n overflow: 'hidden',\n paddingRight: scrollbarWidth,\n width: width\n }, rowStyleObject)\n }), React.createElement(Grid, _extends({}, this.props, {\n \"aria-readonly\": null,\n autoContainerWidth: true,\n className: clsx('ReactVirtualized__Table__Grid', gridClassName),\n cellRenderer: this._createRow,\n columnWidth: width,\n columnCount: 1,\n height: availableRowsHeight,\n id: undefined,\n noContentRenderer: noRowsRenderer,\n onScroll: this._onScroll,\n onSectionRendered: this._onSectionRendered,\n ref: this._setRef,\n role: \"rowgroup\",\n scrollbarWidth: scrollbarWidth,\n scrollToRow: scrollToIndex,\n style: _objectSpread({}, gridStyle, {\n overflowX: 'hidden'\n })\n })));\n }\n }, {\n key: \"_createColumn\",\n value: function _createColumn(_ref4) {\n var column = _ref4.column,\n columnIndex = _ref4.columnIndex,\n isScrolling = _ref4.isScrolling,\n parent = _ref4.parent,\n rowData = _ref4.rowData,\n rowIndex = _ref4.rowIndex;\n var onColumnClick = this.props.onColumnClick;\n var _column$props = column.props,\n cellDataGetter = _column$props.cellDataGetter,\n cellRenderer = _column$props.cellRenderer,\n className = _column$props.className,\n columnData = _column$props.columnData,\n dataKey = _column$props.dataKey,\n id = _column$props.id;\n var cellData = cellDataGetter({\n columnData: columnData,\n dataKey: dataKey,\n rowData: rowData\n });\n var renderedCell = cellRenderer({\n cellData: cellData,\n columnData: columnData,\n columnIndex: columnIndex,\n dataKey: dataKey,\n isScrolling: isScrolling,\n parent: parent,\n rowData: rowData,\n rowIndex: rowIndex\n });\n\n var onClick = function onClick(event) {\n onColumnClick && onColumnClick({\n columnData: columnData,\n dataKey: dataKey,\n event: event\n });\n };\n\n var style = this._cachedColumnStyles[columnIndex];\n var title = typeof renderedCell === 'string' ? renderedCell : null; // Avoid using object-spread syntax with multiple objects here,\n // Since it results in an extra method call to 'babel-runtime/helpers/extends'\n // See PR https://github.com/bvaughn/react-virtualized/pull/942\n\n return React.createElement(\"div\", {\n \"aria-colindex\": columnIndex + 1,\n \"aria-describedby\": id,\n className: clsx('ReactVirtualized__Table__rowColumn', className),\n key: 'Row' + rowIndex + '-' + 'Col' + columnIndex,\n onClick: onClick,\n role: \"gridcell\",\n style: style,\n title: title\n }, renderedCell);\n }\n }, {\n key: \"_createHeader\",\n value: function _createHeader(_ref5) {\n var column = _ref5.column,\n index = _ref5.index;\n var _this$props2 = this.props,\n headerClassName = _this$props2.headerClassName,\n headerStyle = _this$props2.headerStyle,\n onHeaderClick = _this$props2.onHeaderClick,\n sort = _this$props2.sort,\n sortBy = _this$props2.sortBy,\n sortDirection = _this$props2.sortDirection;\n var _column$props2 = column.props,\n columnData = _column$props2.columnData,\n dataKey = _column$props2.dataKey,\n defaultSortDirection = _column$props2.defaultSortDirection,\n disableSort = _column$props2.disableSort,\n headerRenderer = _column$props2.headerRenderer,\n id = _column$props2.id,\n label = _column$props2.label;\n var sortEnabled = !disableSort && sort;\n var classNames = clsx('ReactVirtualized__Table__headerColumn', headerClassName, column.props.headerClassName, {\n ReactVirtualized__Table__sortableHeaderColumn: sortEnabled\n });\n\n var style = this._getFlexStyleForColumn(column, _objectSpread({}, headerStyle, {}, column.props.headerStyle));\n\n var renderedHeader = headerRenderer({\n columnData: columnData,\n dataKey: dataKey,\n disableSort: disableSort,\n label: label,\n sortBy: sortBy,\n sortDirection: sortDirection\n });\n var headerOnClick, headerOnKeyDown, headerTabIndex, headerAriaSort, headerAriaLabel;\n\n if (sortEnabled || onHeaderClick) {\n // If this is a sortable header, clicking it should update the table data's sorting.\n var isFirstTimeSort = sortBy !== dataKey; // If this is the firstTime sort of this column, use the column default sort order.\n // Otherwise, invert the direction of the sort.\n\n var newSortDirection = isFirstTimeSort ? defaultSortDirection : sortDirection === SortDirection.DESC ? SortDirection.ASC : SortDirection.DESC;\n\n var onClick = function onClick(event) {\n sortEnabled && sort({\n defaultSortDirection: defaultSortDirection,\n event: event,\n sortBy: dataKey,\n sortDirection: newSortDirection\n });\n onHeaderClick && onHeaderClick({\n columnData: columnData,\n dataKey: dataKey,\n event: event\n });\n };\n\n var onKeyDown = function onKeyDown(event) {\n if (event.key === 'Enter' || event.key === ' ') {\n onClick(event);\n }\n };\n\n headerAriaLabel = column.props['aria-label'] || label || dataKey;\n headerAriaSort = 'none';\n headerTabIndex = 0;\n headerOnClick = onClick;\n headerOnKeyDown = onKeyDown;\n }\n\n if (sortBy === dataKey) {\n headerAriaSort = sortDirection === SortDirection.ASC ? 'ascending' : 'descending';\n } // Avoid using object-spread syntax with multiple objects here,\n // Since it results in an extra method call to 'babel-runtime/helpers/extends'\n // See PR https://github.com/bvaughn/react-virtualized/pull/942\n\n\n return React.createElement(\"div\", {\n \"aria-label\": headerAriaLabel,\n \"aria-sort\": headerAriaSort,\n className: classNames,\n id: id,\n key: 'Header-Col' + index,\n onClick: headerOnClick,\n onKeyDown: headerOnKeyDown,\n role: \"columnheader\",\n style: style,\n tabIndex: headerTabIndex\n }, renderedHeader);\n }\n }, {\n key: \"_createRow\",\n value: function _createRow(_ref6) {\n var _this3 = this;\n\n var index = _ref6.rowIndex,\n isScrolling = _ref6.isScrolling,\n key = _ref6.key,\n parent = _ref6.parent,\n style = _ref6.style;\n var _this$props3 = this.props,\n children = _this$props3.children,\n onRowClick = _this$props3.onRowClick,\n onRowDoubleClick = _this$props3.onRowDoubleClick,\n onRowRightClick = _this$props3.onRowRightClick,\n onRowMouseOver = _this$props3.onRowMouseOver,\n onRowMouseOut = _this$props3.onRowMouseOut,\n rowClassName = _this$props3.rowClassName,\n rowGetter = _this$props3.rowGetter,\n rowRenderer = _this$props3.rowRenderer,\n rowStyle = _this$props3.rowStyle;\n var scrollbarWidth = this.state.scrollbarWidth;\n var rowClass = typeof rowClassName === 'function' ? rowClassName({\n index: index\n }) : rowClassName;\n var rowStyleObject = typeof rowStyle === 'function' ? rowStyle({\n index: index\n }) : rowStyle;\n var rowData = rowGetter({\n index: index\n });\n var columns = React.Children.toArray(children).map(function (column, columnIndex) {\n return _this3._createColumn({\n column: column,\n columnIndex: columnIndex,\n isScrolling: isScrolling,\n parent: parent,\n rowData: rowData,\n rowIndex: index,\n scrollbarWidth: scrollbarWidth\n });\n });\n var className = clsx('ReactVirtualized__Table__row', rowClass);\n\n var flattenedStyle = _objectSpread({}, style, {\n height: this._getRowHeight(index),\n overflow: 'hidden',\n paddingRight: scrollbarWidth\n }, rowStyleObject);\n\n return rowRenderer({\n className: className,\n columns: columns,\n index: index,\n isScrolling: isScrolling,\n key: key,\n onRowClick: onRowClick,\n onRowDoubleClick: onRowDoubleClick,\n onRowRightClick: onRowRightClick,\n onRowMouseOver: onRowMouseOver,\n onRowMouseOut: onRowMouseOut,\n rowData: rowData,\n style: flattenedStyle\n });\n }\n /**\n * Determines the flex-shrink, flex-grow, and width values for a cell (header or column).\n */\n\n }, {\n key: \"_getFlexStyleForColumn\",\n value: function _getFlexStyleForColumn(column) {\n var customStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var flexValue = \"\".concat(column.props.flexGrow, \" \").concat(column.props.flexShrink, \" \").concat(column.props.width, \"px\");\n\n var style = _objectSpread({}, customStyle, {\n flex: flexValue,\n msFlex: flexValue,\n WebkitFlex: flexValue\n });\n\n if (column.props.maxWidth) {\n style.maxWidth = column.props.maxWidth;\n }\n\n if (column.props.minWidth) {\n style.minWidth = column.props.minWidth;\n }\n\n return style;\n }\n }, {\n key: \"_getHeaderColumns\",\n value: function _getHeaderColumns() {\n var _this4 = this;\n\n var _this$props4 = this.props,\n children = _this$props4.children,\n disableHeader = _this$props4.disableHeader;\n var items = disableHeader ? [] : React.Children.toArray(children);\n return items.map(function (column, index) {\n return _this4._createHeader({\n column: column,\n index: index\n });\n });\n }\n }, {\n key: \"_getRowHeight\",\n value: function _getRowHeight(rowIndex) {\n var rowHeight = this.props.rowHeight;\n return typeof rowHeight === 'function' ? rowHeight({\n index: rowIndex\n }) : rowHeight;\n }\n }, {\n key: \"_onScroll\",\n value: function _onScroll(_ref7) {\n var clientHeight = _ref7.clientHeight,\n scrollHeight = _ref7.scrollHeight,\n scrollTop = _ref7.scrollTop;\n var onScroll = this.props.onScroll;\n onScroll({\n clientHeight: clientHeight,\n scrollHeight: scrollHeight,\n scrollTop: scrollTop\n });\n }\n }, {\n key: \"_onSectionRendered\",\n value: function _onSectionRendered(_ref8) {\n var rowOverscanStartIndex = _ref8.rowOverscanStartIndex,\n rowOverscanStopIndex = _ref8.rowOverscanStopIndex,\n rowStartIndex = _ref8.rowStartIndex,\n rowStopIndex = _ref8.rowStopIndex;\n var onRowsRendered = this.props.onRowsRendered;\n onRowsRendered({\n overscanStartIndex: rowOverscanStartIndex,\n overscanStopIndex: rowOverscanStopIndex,\n startIndex: rowStartIndex,\n stopIndex: rowStopIndex\n });\n }\n }, {\n key: \"_setRef\",\n value: function _setRef(ref) {\n this.Grid = ref;\n }\n }, {\n key: \"_setScrollbarWidth\",\n value: function _setScrollbarWidth() {\n var scrollbarWidth = this.getScrollbarWidth();\n this.setState({\n scrollbarWidth: scrollbarWidth\n });\n }\n }]);\n\n return Table;\n}(React.PureComponent);\n\n_defineProperty(Table, \"defaultProps\", {\n disableHeader: false,\n estimatedRowSize: 30,\n headerHeight: 0,\n headerStyle: {},\n noRowsRenderer: function noRowsRenderer() {\n return null;\n },\n onRowsRendered: function onRowsRendered() {\n return null;\n },\n onScroll: function onScroll() {\n return null;\n },\n overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n overscanRowCount: 10,\n rowRenderer: defaultRowRenderer,\n headerRowRenderer: defaultHeaderRowRenderer,\n rowStyle: {},\n scrollToAlignment: 'auto',\n scrollToIndex: -1,\n style: {}\n});\n\nexport { Table as default };\nTable.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /** This is just set on the grid top element. */\n 'aria-label': PropTypes.string,\n\n /** This is just set on the grid top element. */\n 'aria-labelledby': PropTypes.string,\n\n /**\n * Removes fixed height from the scrollingContainer so that the total height\n * of rows can stretch the window. Intended for use with WindowScroller\n */\n autoHeight: PropTypes.bool,\n\n /** One or more Columns describing the data displayed in this row */\n children: function children(props) {\n var children = React.Children.toArray(props.children);\n\n for (var i = 0; i < children.length; i++) {\n var childType = children[i].type;\n\n if (childType !== Column && !(childType.prototype instanceof Column)) {\n return new Error('Table only accepts children of type Column');\n }\n }\n },\n\n /** Optional CSS class name */\n className: PropTypes.string,\n\n /** Disable rendering the header at all */\n disableHeader: PropTypes.bool,\n\n /**\n * Used to estimate the total height of a Table before all of its rows have actually been measured.\n * The estimated total height is adjusted as rows are rendered.\n */\n estimatedRowSize: PropTypes.number.isRequired,\n\n /** Optional custom CSS class name to attach to inner Grid element. */\n gridClassName: PropTypes.string,\n\n /** Optional inline style to attach to inner Grid element. */\n gridStyle: PropTypes.object,\n\n /** Optional CSS class to apply to all column headers */\n headerClassName: PropTypes.string,\n\n /** Fixed height of header row */\n headerHeight: PropTypes.number.isRequired,\n\n /**\n * Responsible for rendering a table row given an array of columns:\n * Should implement the following interface: ({\n * className: string,\n * columns: any[],\n * style: any\n * }): PropTypes.node\n */\n headerRowRenderer: PropTypes.func,\n\n /** Optional custom inline style to attach to table header columns. */\n headerStyle: PropTypes.object,\n\n /** Fixed/available height for out DOM element */\n height: PropTypes.number.isRequired,\n\n /** Optional id */\n id: PropTypes.string,\n\n /** Optional renderer to be used in place of table body rows when rowCount is 0 */\n noRowsRenderer: PropTypes.func,\n\n /**\n * Optional callback when a column is clicked.\n * ({ columnData: any, dataKey: string }): void\n */\n onColumnClick: PropTypes.func,\n\n /**\n * Optional callback when a column's header is clicked.\n * ({ columnData: any, dataKey: string }): void\n */\n onHeaderClick: PropTypes.func,\n\n /**\n * Callback invoked when a user clicks on a table row.\n * ({ index: number }): void\n */\n onRowClick: PropTypes.func,\n\n /**\n * Callback invoked when a user double-clicks on a table row.\n * ({ index: number }): void\n */\n onRowDoubleClick: PropTypes.func,\n\n /**\n * Callback invoked when the mouse leaves a table row.\n * ({ index: number }): void\n */\n onRowMouseOut: PropTypes.func,\n\n /**\n * Callback invoked when a user moves the mouse over a table row.\n * ({ index: number }): void\n */\n onRowMouseOver: PropTypes.func,\n\n /**\n * Callback invoked when a user right-clicks on a table row.\n * ({ index: number }): void\n */\n onRowRightClick: PropTypes.func,\n\n /**\n * Callback invoked with information about the slice of rows that were just rendered.\n * ({ startIndex, stopIndex }): void\n */\n onRowsRendered: PropTypes.func,\n\n /**\n * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n * This callback can be used to sync scrolling between lists, tables, or grids.\n * ({ clientHeight, scrollHeight, scrollTop }): void\n */\n onScroll: PropTypes.func.isRequired,\n\n /** See Grid#overscanIndicesGetter */\n overscanIndicesGetter: PropTypes.func.isRequired,\n\n /**\n * Number of rows to render above/below the visible bounds of the list.\n * These rows can help for smoother scrolling on touch devices.\n */\n overscanRowCount: PropTypes.number.isRequired,\n\n /**\n * Optional CSS class to apply to all table rows (including the header row).\n * This property can be a CSS class name (string) or a function that returns a class name.\n * If a function is provided its signature should be: ({ index: number }): string\n */\n rowClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n\n /**\n * Callback responsible for returning a data row given an index.\n * ({ index: number }): any\n */\n rowGetter: PropTypes.func.isRequired,\n\n /**\n * Either a fixed row height (number) or a function that returns the height of a row given its index.\n * ({ index: number }): number\n */\n rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]).isRequired,\n\n /** Number of rows in table. */\n rowCount: PropTypes.number.isRequired,\n\n /**\n * Responsible for rendering a table row given an array of columns:\n * Should implement the following interface: ({\n * className: string,\n * columns: Array,\n * index: number,\n * isScrolling: boolean,\n * onRowClick: ?Function,\n * onRowDoubleClick: ?Function,\n * onRowMouseOver: ?Function,\n * onRowMouseOut: ?Function,\n * rowData: any,\n * style: any\n * }): PropTypes.node\n */\n rowRenderer: PropTypes.func,\n\n /** Optional custom inline style to attach to table rows. */\n rowStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired,\n\n /** See Grid#scrollToAlignment */\n scrollToAlignment: PropTypes.oneOf(['auto', 'end', 'start', 'center']).isRequired,\n\n /** Row index to ensure visible (by forcefully scrolling if necessary) */\n scrollToIndex: PropTypes.number.isRequired,\n\n /** Vertical offset. */\n scrollTop: PropTypes.number,\n\n /**\n * Sort function to be called if a sortable header is clicked.\n * Should implement the following interface: ({\n * defaultSortDirection: 'ASC' | 'DESC',\n * event: MouseEvent,\n * sortBy: string,\n * sortDirection: SortDirection\n * }): void\n */\n sort: PropTypes.func,\n\n /** Table data is currently sorted by this :dataKey (if it is sorted at all) */\n sortBy: PropTypes.string,\n\n /** Table data is currently sorted in this direction (if it is sorted at all) */\n sortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC]),\n\n /** Optional inline style */\n style: PropTypes.object,\n\n /** Tab index for focus */\n tabIndex: PropTypes.number,\n\n /** Width of list */\n width: PropTypes.number.isRequired\n} : {};\nimport { bpfrpt_proptype_CellPosition } from \"../Grid\";","/**\n * Default accessor for returning a cell value for a given attribute.\n * This function expects to operate on either a vanilla Object or an Immutable Map.\n * You should override the column's cellDataGetter if your data is some other type of object.\n */\nexport default function defaultCellDataGetter(_ref) {\n var dataKey = _ref.dataKey,\n rowData = _ref.rowData;\n\n if (typeof rowData.get === 'function') {\n return rowData.get(dataKey);\n } else {\n return rowData[dataKey];\n }\n}\nimport { bpfrpt_proptype_CellDataGetterParams } from \"./types\";","/**\n * Default cell renderer that displays an attribute as a simple string\n * You should override the column's cellRenderer if your data is some other type of object.\n */\nexport default function defaultCellRenderer(_ref) {\n var cellData = _ref.cellData;\n\n if (cellData == null) {\n return '';\n } else {\n return String(cellData);\n }\n}\nimport { bpfrpt_proptype_CellRendererParams } from \"./types\";","import createMultiSort from './createMultiSort';\nimport defaultCellDataGetter from './defaultCellDataGetter';\nimport defaultCellRenderer from './defaultCellRenderer';\nimport defaultHeaderRowRenderer from './defaultHeaderRowRenderer.js';\nimport defaultHeaderRenderer from './defaultHeaderRenderer';\nimport defaultRowRenderer from './defaultRowRenderer';\nimport Column from './Column';\nimport SortDirection from './SortDirection';\nimport SortIndicator from './SortIndicator';\nimport Table from './Table';\nexport default Table;\nexport { createMultiSort, defaultCellDataGetter, defaultCellRenderer, defaultHeaderRowRenderer, defaultHeaderRenderer, defaultRowRenderer, Column, SortDirection, SortIndicator, Table };","import { requestAnimationTimeout, cancelAnimationTimeout } from '../../utils/requestAnimationTimeout';\nvar mountedInstances = [];\nvar originalBodyPointerEvents = null;\nvar disablePointerEventsTimeoutId = null;\n\nfunction enablePointerEventsIfDisabled() {\n if (disablePointerEventsTimeoutId) {\n disablePointerEventsTimeoutId = null;\n\n if (document.body && originalBodyPointerEvents != null) {\n document.body.style.pointerEvents = originalBodyPointerEvents;\n }\n\n originalBodyPointerEvents = null;\n }\n}\n\nfunction enablePointerEventsAfterDelayCallback() {\n enablePointerEventsIfDisabled();\n mountedInstances.forEach(function (instance) {\n return instance.__resetIsScrolling();\n });\n}\n\nfunction enablePointerEventsAfterDelay() {\n if (disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(disablePointerEventsTimeoutId);\n }\n\n var maximumTimeout = 0;\n mountedInstances.forEach(function (instance) {\n maximumTimeout = Math.max(maximumTimeout, instance.props.scrollingResetTimeInterval);\n });\n disablePointerEventsTimeoutId = requestAnimationTimeout(enablePointerEventsAfterDelayCallback, maximumTimeout);\n}\n\nfunction onScrollWindow(event) {\n if (event.currentTarget === window && originalBodyPointerEvents == null && document.body) {\n originalBodyPointerEvents = document.body.style.pointerEvents;\n document.body.style.pointerEvents = 'none';\n }\n\n enablePointerEventsAfterDelay();\n mountedInstances.forEach(function (instance) {\n if (instance.props.scrollElement === event.currentTarget) {\n instance.__handleWindowScrollEvent();\n }\n });\n}\n\nexport function registerScrollListener(component, element) {\n if (!mountedInstances.some(function (instance) {\n return instance.props.scrollElement === element;\n })) {\n element.addEventListener('scroll', onScrollWindow);\n }\n\n mountedInstances.push(component);\n}\nexport function unregisterScrollListener(component, element) {\n mountedInstances = mountedInstances.filter(function (instance) {\n return instance !== component;\n });\n\n if (!mountedInstances.length) {\n element.removeEventListener('scroll', onScrollWindow);\n\n if (disablePointerEventsTimeoutId) {\n cancelAnimationTimeout(disablePointerEventsTimeoutId);\n enablePointerEventsIfDisabled();\n }\n }\n}\nimport { bpfrpt_proptype_WindowScroller } from \"../WindowScroller.js\";","/**\n * Gets the dimensions of the element, accounting for API differences between\n * `window` and other DOM elements.\n */\n// TODO Move this into WindowScroller and import from there\nvar isWindow = function isWindow(element) {\n return element === window;\n};\n\nvar getBoundingBox = function getBoundingBox(element) {\n return element.getBoundingClientRect();\n};\n\nexport function getDimensions(scrollElement, props) {\n if (!scrollElement) {\n return {\n height: props.serverHeight,\n width: props.serverWidth\n };\n } else if (isWindow(scrollElement)) {\n var _window = window,\n innerHeight = _window.innerHeight,\n innerWidth = _window.innerWidth;\n return {\n height: typeof innerHeight === 'number' ? innerHeight : 0,\n width: typeof innerWidth === 'number' ? innerWidth : 0\n };\n } else {\n return getBoundingBox(scrollElement);\n }\n}\n/**\n * Gets the vertical and horizontal position of an element within its scroll container.\n * Elements that have been “scrolled past” return negative values.\n * Handles edge-case where a user is navigating back (history) from an already-scrolled page.\n * In this case the body’s top or left position will be a negative number and this element’s top or left will be increased (by that amount).\n */\n\nexport function getPositionOffset(element, container) {\n if (isWindow(container) && document.documentElement) {\n var containerElement = document.documentElement;\n var elementRect = getBoundingBox(element);\n var containerRect = getBoundingBox(containerElement);\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left\n };\n } else {\n var scrollOffset = getScrollOffset(container);\n\n var _elementRect = getBoundingBox(element);\n\n var _containerRect = getBoundingBox(container);\n\n return {\n top: _elementRect.top + scrollOffset.top - _containerRect.top,\n left: _elementRect.left + scrollOffset.left - _containerRect.left\n };\n }\n}\n/**\n * Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility\n * and API differences between `window` and other DOM elements.\n */\n\nexport function getScrollOffset(element) {\n if (isWindow(element) && document.documentElement) {\n return {\n top: 'scrollY' in window ? window.scrollY : document.documentElement.scrollTop,\n left: 'scrollX' in window ? window.scrollX : document.documentElement.scrollLeft\n };\n } else {\n return {\n top: element.scrollTop,\n left: element.scrollLeft\n };\n }\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar _class, _temp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { registerScrollListener, unregisterScrollListener } from './utils/onScroll';\nimport { getDimensions, getPositionOffset, getScrollOffset } from './utils/dimensions';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var IS_SCROLLING_TIMEOUT = 150;\n\nvar getWindow = function getWindow() {\n return typeof window !== 'undefined' ? window : undefined;\n};\n\nvar WindowScroller = (_temp = _class =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(WindowScroller, _React$PureComponent);\n\n function WindowScroller() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, WindowScroller);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(WindowScroller)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"_window\", getWindow());\n\n _defineProperty(_assertThisInitialized(_this), \"_isMounted\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"_positionFromTop\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_positionFromLeft\", 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_detectElementResize\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_child\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"state\", _objectSpread({}, getDimensions(_this.props.scrollElement, _this.props), {\n isScrolling: false,\n scrollLeft: 0,\n scrollTop: 0\n }));\n\n _defineProperty(_assertThisInitialized(_this), \"_registerChild\", function (element) {\n if (element && !(element instanceof Element)) {\n console.warn('WindowScroller registerChild expects to be passed Element or null');\n }\n\n _this._child = element;\n\n _this.updatePosition();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onChildScroll\", function (_ref) {\n var scrollTop = _ref.scrollTop;\n\n if (_this.state.scrollTop === scrollTop) {\n return;\n }\n\n var scrollElement = _this.props.scrollElement;\n\n if (scrollElement) {\n if (typeof scrollElement.scrollTo === 'function') {\n scrollElement.scrollTo(0, scrollTop + _this._positionFromTop);\n } else {\n scrollElement.scrollTop = scrollTop + _this._positionFromTop;\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_registerResizeListener\", function (element) {\n if (element === window) {\n window.addEventListener('resize', _this._onResize, false);\n } else {\n _this._detectElementResize.addResizeListener(element, _this._onResize);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_unregisterResizeListener\", function (element) {\n if (element === window) {\n window.removeEventListener('resize', _this._onResize, false);\n } else if (element) {\n _this._detectElementResize.removeResizeListener(element, _this._onResize);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_onResize\", function () {\n _this.updatePosition();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"__handleWindowScrollEvent\", function () {\n if (!_this._isMounted) {\n return;\n }\n\n var onScroll = _this.props.onScroll;\n var scrollElement = _this.props.scrollElement;\n\n if (scrollElement) {\n var scrollOffset = getScrollOffset(scrollElement);\n var scrollLeft = Math.max(0, scrollOffset.left - _this._positionFromLeft);\n var scrollTop = Math.max(0, scrollOffset.top - _this._positionFromTop);\n\n _this.setState({\n isScrolling: true,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n\n onScroll({\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"__resetIsScrolling\", function () {\n _this.setState({\n isScrolling: false\n });\n });\n\n return _this;\n }\n\n _createClass(WindowScroller, [{\n key: \"updatePosition\",\n value: function updatePosition() {\n var scrollElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.scrollElement;\n var onResize = this.props.onResize;\n var _this$state = this.state,\n height = _this$state.height,\n width = _this$state.width;\n var thisNode = this._child || ReactDOM.findDOMNode(this);\n\n if (thisNode instanceof Element && scrollElement) {\n var offset = getPositionOffset(thisNode, scrollElement);\n this._positionFromTop = offset.top;\n this._positionFromLeft = offset.left;\n }\n\n var dimensions = getDimensions(scrollElement, this.props);\n\n if (height !== dimensions.height || width !== dimensions.width) {\n this.setState({\n height: dimensions.height,\n width: dimensions.width\n });\n onResize({\n height: dimensions.height,\n width: dimensions.width\n });\n }\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var scrollElement = this.props.scrollElement;\n this._detectElementResize = createDetectElementResize();\n this.updatePosition(scrollElement);\n\n if (scrollElement) {\n registerScrollListener(this, scrollElement);\n\n this._registerResizeListener(scrollElement);\n }\n\n this._isMounted = true;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var scrollElement = this.props.scrollElement;\n var prevScrollElement = prevProps.scrollElement;\n\n if (prevScrollElement !== scrollElement && prevScrollElement != null && scrollElement != null) {\n this.updatePosition(scrollElement);\n unregisterScrollListener(this, prevScrollElement);\n registerScrollListener(this, scrollElement);\n\n this._unregisterResizeListener(prevScrollElement);\n\n this._registerResizeListener(scrollElement);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var scrollElement = this.props.scrollElement;\n\n if (scrollElement) {\n unregisterScrollListener(this, scrollElement);\n\n this._unregisterResizeListener(scrollElement);\n }\n\n this._isMounted = false;\n }\n }, {\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n var _this$state2 = this.state,\n isScrolling = _this$state2.isScrolling,\n scrollTop = _this$state2.scrollTop,\n scrollLeft = _this$state2.scrollLeft,\n height = _this$state2.height,\n width = _this$state2.width;\n return children({\n onChildScroll: this._onChildScroll,\n registerChild: this._registerChild,\n height: height,\n isScrolling: isScrolling,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n width: width\n });\n }\n }]);\n\n return WindowScroller;\n}(React.PureComponent), _defineProperty(_class, \"propTypes\", process.env.NODE_ENV === 'production' ? null : {\n /**\n * Function responsible for rendering children.\n * This function should implement the following signature:\n * ({ height, isScrolling, scrollLeft, scrollTop, width }) => PropTypes.element\n */\n \"children\": PropTypes.func.isRequired,\n\n /** Callback to be invoked on-resize: ({ height, width }) */\n \"onResize\": PropTypes.func.isRequired,\n\n /** Callback to be invoked on-scroll: ({ scrollLeft, scrollTop }) */\n \"onScroll\": PropTypes.func.isRequired,\n\n /** Element to attach scroll event listeners. Defaults to window. */\n \"scrollElement\": PropTypes.oneOfType([PropTypes.any, function () {\n return (typeof Element === \"function\" ? PropTypes.instanceOf(Element) : PropTypes.any).apply(this, arguments);\n }]),\n\n /**\n * Wait this amount of time after the last scroll event before resetting child `pointer-events`.\n */\n \"scrollingResetTimeInterval\": PropTypes.number.isRequired,\n\n /** Height used for server-side rendering */\n \"serverHeight\": PropTypes.number.isRequired,\n\n /** Width used for server-side rendering */\n \"serverWidth\": PropTypes.number.isRequired\n}), _temp);\n\n_defineProperty(WindowScroller, \"defaultProps\", {\n onResize: function onResize() {},\n onScroll: function onScroll() {},\n scrollingResetTimeInterval: IS_SCROLLING_TIMEOUT,\n scrollElement: getWindow(),\n serverHeight: 0,\n serverWidth: 0\n});\n\nexport { WindowScroller as default };\nimport PropTypes from \"prop-types\";"],"names":["getInputAdornmentUtilityClass","slot","generateUtilityClass","_span","generateUtilityClasses","_excluded","InputAdornmentRoot","styled","name","overridesResolver","props","styles","ownerState","root","concat","capitalize","position","disablePointerEvents","variant","_ref","theme","_extends","display","height","maxHeight","alignItems","whiteSpace","color","vars","palette","action","active","_defineProperty","inputAdornmentClasses","positionStart","hiddenLabel","marginTop","marginRight","marginLeft","pointerEvents","React","inProps","ref","useThemeProps","children","className","_props$component","component","_props$disablePointer","_props$disableTypogra","disableTypography","variantProp","other","_objectWithoutPropertiesLoose","muiFormControl","useFormControl","size","classes","slots","composeClasses","useUtilityClasses","_jsx","FormControlContext","Provider","value","as","clsx","_jsxs","Typography","componentWillMount","state","this","constructor","getDerivedStateFromProps","undefined","setState","componentWillReceiveProps","nextProps","prevState","bind","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","Component","prototype","isReactComponent","Error","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","componentName","displayName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","call","__suppressDeprecationWarning","calculateSizeAndPositionDataAndUpdateScrollOffset","cellCount","cellSize","computeMetadataCallback","computeMetadataCallbackProps","nextCellsCount","nextCellSize","nextScrollToIndex","scrollToIndex","updateScrollOffsetForScrollToIndex","CellSizeAndPositionManager","cellSizeGetter","estimatedCellSize","_classCallCheck","_cellSizeGetter","_cellCount","_estimatedCellSize","_createClass","key","_ref2","_lastMeasuredIndex","index","lastMeasuredCellSizeAndPosition","getSizeAndPositionOfLastMeasuredCell","offset","i","isNaN","_cellSizeAndPositionData","_lastBatchedIndex","_ref3","_ref3$align","align","containerSize","currentOffset","targetIndex","idealOffset","datum","getSizeAndPositionOfCell","maxOffset","minOffset","Math","max","min","totalSize","getTotalSize","params","start","_findNearestCell","stop","high","low","middle","floor","interval","_binarySearch","lastMeasuredIndex","_exponentialSearch","getMaxElementSize","window","chrome","ScalingCellSizeAndPositionManager","_ref$maxScrollSize","maxScrollSize","_objectWithoutProperties","_cellSizeAndPositionManager","_maxScrollSize","configure","getCellCount","getEstimatedCellSize","getLastMeasuredIndex","safeTotalSize","offsetPercentage","_getOffsetPercentage","round","_safeOffsetToOffset","getUpdatedOffsetForIndex","_offsetToSafeOffset","_ref4","getVisibleCellRange","resetCell","_ref5","_ref6","_ref7","createCallbackMemoizer","requireAllKeys","arguments","length","cachedIndices","callback","indices","keys","Object","allInitialized","every","Array","isArray","indexChanged","some","cachedValue","join","updateScrollIndexHelper","cellSizeAndPositionManager","previousCellsCount","previousCellSize","previousScrollToAlignment","previousScrollToIndex","previousSize","scrollOffset","scrollToAlignment","sizeJustIncreasedFromZero","updateScrollIndexCallback","hasScrollToIndex","win","document","createElement","scrollbarSize","recalc","canUseDOM","scrollDiv","style","top","width","overflow","body","appendChild","offsetWidth","clientWidth","removeChild","_class","_temp","request","self","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","cancel","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","id","clearTimeout","raf","caf","cancelAnimationTimeout","frame","requestAnimationTimeout","delay","Promise","resolve","then","Date","now","timeout","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","source","forEach","getOwnPropertyDescriptors","defineProperties","defineProperty","SCROLL_POSITION_CHANGE_REASONS","Grid","_React$PureComponent","_this","_possibleConstructorReturn","_getPrototypeOf","_assertThisInitialized","_disablePointerEventsTimeoutId","isScrolling","needToResetStyleCache","onSectionRendered","_onGridRenderedMemoizer","columnOverscanStartIndex","_columnStartIndex","columnOverscanStopIndex","_columnStopIndex","columnStartIndex","_renderedColumnStartIndex","columnStopIndex","_renderedColumnStopIndex","rowOverscanStartIndex","_rowStartIndex","rowOverscanStopIndex","_rowStopIndex","rowStartIndex","_renderedRowStartIndex","rowStopIndex","_renderedRowStopIndex","_scrollingContainer","event","handleScrollEvent","columnSizeAndPositionManager","columnCount","_wrapSizeGetter","columnWidth","_getEstimatedColumnSize","rowSizeAndPositionManager","rowCount","rowHeight","_getEstimatedRowSize","instanceProps","prevColumnWidth","prevRowHeight","prevColumnCount","prevRowCount","prevIsScrolling","prevScrollToColumn","scrollToColumn","prevScrollToRow","scrollToRow","scrollbarSizeMeasured","scrollDirectionHorizontal","scrollDirectionVertical","scrollLeft","scrollTop","scrollPositionChangeReason","_initialScrollTop","_getCalculatedScrollTop","_initialScrollLeft","_getCalculatedScrollLeft","_inherits","_ref$alignment","alignment","_ref$columnIndex","columnIndex","_ref$rowIndex","rowIndex","offsetProps","_ref2$scrollLeft","scrollLeftParam","_ref2$scrollTop","scrollTopParam","_debounceScrollEnded","_this$props","autoHeight","autoWidth","totalRowsHeight","totalColumnsWidth","newState","_invokeOnScrollMemoizer","_deferredInvalidateColumnIndex","_deferredInvalidateRowIndex","_this$props2","_ref4$columnIndex","_ref4$rowIndex","_this$props3","_recomputeScrollLeftFlag","_recomputeScrollTopFlag","_styleCache","_cellCache","forceUpdate","_updateScrollLeftForScrollToColumn","_updateScrollTopForScrollToRow","_this$props4","getScrollbarSize","_handleInvalidatedGridSize","stateUpdate","_getScrollToPositionStateUpdate","sizeIsBiggerThanZero","_invokeOnGridRenderedHelper","_maybeCallOnScrollbarPresenceChange","_this2","_this$props5","_this$state","columnOrRowCountJustIncreasedFromZero","_this$props6","autoContainerWidth","containerProps","containerRole","containerStyle","noContentRenderer","role","tabIndex","_this$state2","_isScrolling","gridStyle","boxSizing","direction","WebkitOverflowScrolling","willChange","_resetStyleCache","_calculateChildrenToRender","verticalScrollBarSize","horizontalScrollBarSize","_horizontalScrollBarSize","_verticalScrollBarSize","_scrollbarPresenceChanged","overflowX","overflowY","childrenToDisplay","_childrenToDisplay","showNoContentRenderer","_setScrollingContainerRef","onScroll","_onScroll","maxWidth","cellRenderer","cellRangeRenderer","deferredMeasurementCache","overscanColumnCount","overscanIndicesGetter","overscanRowCount","isScrollingOptOut","visibleColumnIndices","visibleRowIndices","horizontalOffsetAdjustment","getOffsetAdjustment","verticalOffsetAdjustment","overscanColumnIndices","overscanCellsCount","scrollDirection","startIndex","stopIndex","overscanRowIndices","overscanStartIndex","overscanStopIndex","hasFixedHeight","has","hasFixedWidth","cellCache","parent","styleCache","scrollingResetTimeInterval","_debounceScrollEndedCallback","recomputeGridSize","_this3","_onScrollMemoizer","_this3$props","clientHeight","scrollHeight","scrollWidth","hasOwnProperty","Boolean","onScrollbarPresenceChange","horizontal","vertical","_ref8","_getScrollLeftForScrollToColumnStateUpdate","_getScrollTopForScrollToRowStateUpdate","assign","maybeStateA","maybeStateB","estimatedColumnSize","estimatedRowSize","_ref9","finalColumn","scrollBarSize","calculatedScrollLeft","finalRow","calculatedScrollTop","renderedCells","areOffsetsAdjusted","canCacheStyle","rowDatum","columnDatum","isVisible","left","cellRendererParams","renderedCell","defaultOverscanIndicesGetter","ArrowKeyStepper","_getPrototypeOf2","_len","args","_key","disabled","mode","_this$_getScrollState","_getScrollState","scrollToColumnPrevious","scrollToRowPrevious","_this$_getScrollState2","preventDefault","_updateScrollState","_this$_getScrollState3","onKeyDown","_onKeyDown","_onSectionRendered","isControlled","onScrollToChange","createDetectElementResize","nonce","hostWindow","_window","attachEvent","global","requestFrame","fn","cancelFrame","resetTriggers","element","triggers","__resizeTriggers__","expand","firstElementChild","contract","lastElementChild","expandChild","offsetHeight","scrollListener","e","indexOf","__resizeRAF__","__resizeLast__","checkTriggers","__resizeListeners__","animation","keyframeprefix","animationstartevent","domPrefixes","split","startEvents","elm","animationName","toLowerCase","animationKeyframes","animationStyle","addResizeListener","doc","ownerDocument","elementStyle","getComputedStyle","getElementById","css","head","getElementsByTagName","type","setAttribute","styleSheet","cssText","createTextNode","createStyles","resizeTriggersHtml","trustedTypes","staticPolicy","createPolicy","createHTML","innerHTML","addEventListener","__animationListener__","removeResizeListener","detachEvent","splice","removeEventListener","AutoSizer","_React$Component","defaultHeight","defaultWidth","disableHeight","disableWidth","onResize","_parentNode","paddingLeft","parseInt","paddingRight","paddingTop","paddingBottom","newHeight","newWidth","autoSizer","_autoSizer","parentNode","defaultView","HTMLElement","_detectElementResize","_onResize","outerStyle","childParams","_setRef","CellMeasurer","cache","_this$props$columnInd","_this$props$rowIndex","_this$_getCellMeasure","_getCellMeasurements","getHeight","getWidth","set","Element","console","warn","_child","_maybeMeasureCell","measure","_measure","registerChild","_registerChild","node","findDOMNode","styleWidth","styleHeight","ceil","_this$props2$columnIn","_this$props2$rowIndex","_this$_getCellMeasure2","invalidateCellSizeAfterRender","CellMeasurerCache","_keyMapper","_columnWidthCache","_defaultWidth","_rowHeightCache","_defaultHeight","fixedHeight","fixedWidth","keyMapper","minHeight","minWidth","_hasFixedHeight","_hasFixedWidth","_minHeight","_minWidth","defaultKeyMapper","_cellHeightCache","_cellWidthCache","_updateCachedColumnAndRowSizes","_rowCount","_columnCount","_key2","columnKey","_i","rowKey","get","CollectionView","cellLayoutManager","_onSectionRenderedMemoizer","getLastRenderedIndices","scrollToCell","scrollPosition","getScrollPositionForCell","cellIndex","_setScrollPosition","_enablePointerEventsAfterDelay","isScrollingChange","_scrollbarSize","_cellLayoutManager$ge","totalHeight","totalWidth","cancelable","_scrollbarSizeMeasured","_calculateSizeAndPositionDataOnNextUpdate","_updateScrollPositionForScrollToCell","_invokeOnSectionRenderedHelper","_cellLayoutManager$ge2","horizontalOverscanSize","verticalOverscanSize","_this$state3","_lastRenderedCellCount","_lastRenderedCellLayoutManager","calculateSizeAndPositionData","_cellLayoutManager$ge3","right","bottom","cellRenderers","x","y","collectionStyle","propTypes","Section","_indexMap","_indices","SectionManager","sectionSize","_sectionSize","_cellMetadata","_sections","getSections","section","getCellIndices","map","sectionXStart","sectionXStop","sectionYStart","sectionYStop","sections","sectionX","sectionY","toString","cellMetadatum","addCellIndex","_ref$align","cellOffset","Collection","context","_lastRenderedCellIndices","_isScrollingChange","_setCollectionViewRef","_collectionView","recomputeCellSizesAndPositions","data","cellSizeAndPositionGetter","cellMetadata","sectionManager","registerCell","_calculateSizeAndPositionData","_sectionManager","_height","_width","cellGroupRenderer","getCellMetadata","cellRendererProps","ColumnSizer","columnMaxWidth","columnMinWidth","_registeredChild","safeColumnMinWidth","safeColumnMaxWidth","adjustedWidth","getColumnWidth","child","InfiniteLoader","_loadMoreRowsMemoizer","_onRowsRendered","autoReload","_doStuff","_lastRenderedStartIndex","_lastRenderedStopIndex","onRowsRendered","unloadedRanges","loadMoreRows","unloadedRange","promise","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","currentIndex","recomputeSize","recomputeRowHeights","forceUpdateReactVirtualizedComponent","isRowLoaded","minimumBatchSize","threshold","rangeStartIndex","rangeStopIndex","potentialStopIndex","_index","firstUnloadedRange","_index2","scanForUnloadedRanges","squashedUnloadedRanges","_toConsumableArray","_loadUnloadedRanges","registeredChild","List","rowRenderer","widthDescriptor","writable","getOffsetForCell","measureAllCells","_ref6$columnIndex","_ref6$rowIndex","scrollToPosition","noRowsRenderer","classNames","_cellRenderer","accessibilityOverscanIndicesGetter","ge","a","c","l","h","m","_GEP","_GEA","gt","_GTP","_GTA","lt","_LTP","_LTA","le","_LEP","_LEA","eq","p","_EQP","_EQA","IntervalTreeNode","mid","leftPoints","rightPoints","count","proto","copy","b","rebuild","intervals","ntree","createIntervalTree","rebuildWithInterval","rebuildWithoutInterval","idx","reportLeftRange","arr","hi","cb","r","reportRightRange","lo","reportRange","compareNumbers","compareBegin","d","compareEnd","pts","sort","leftIntervals","rightIntervals","centerIntervals","s","slice","IntervalTree","result","insert","weight","bounds","remove","n","queryPoint","queryInterval","tproto","PositionCache","defaultCellHeight","unmeasuredCellCount","tallestColumnSize","renderCallback","_intervalTree","_slicedToArray","_leftMap","columnSizeMap","_columnSizeMap","columnHeight","Masonry","eventScrollTop","currentTarget","_getEstimatedTotalHeight","_debounceResetIsScrolling","_positionCache","_invalidateOnUpdateStartIndex","_invalidateOnUpdateStopIndex","_populatePositionCache","_checkInvalidateOnUpdate","_invokeOnScrollCallback","_invokeOnCellsRenderedCallback","_debounceResetIsScrollingId","cellMeasurerCache","overscanByPixels","rowDirection","estimateTotalHeight","shortestColumnSize","measuredCellCount","range","_style","batchSize","_startIndex","_stopIndex","_debounceResetIsScrollingCallback","estimatedColumnCount","_onScrollMemoized","_startIndexMemoized","_stopIndexMemoized","onCellsRendered","cellPositioner","_cellPositioner","setPosition","noop","CellMeasurerCacheDecorator","_cellMeasurerCache","_columnIndexOffset","_rowIndexOffset","_params$columnIndexOf","columnIndexOffset","_params$rowIndexOffse","rowIndexOffset","clear","clearAll","MultiGrid","showHorizontalScrollbar","showVerticalScrollbar","_bottomLeftGrid","_bottomRightGrid","rest","fixedRowCount","fixedColumnCount","scrollInfo","_topLeftGrid","_topRightGrid","_fixedColumnCount","_fixedRowCount","_maybeCalculateCachedStyles","_deferredMeasurementCacheBottomLeftGrid","_deferredMeasurementCacheBottomRightGrid","_deferredMeasurementCacheTopRightGrid","_ref7$columnIndex","_ref7$rowIndex","_ref8$columnIndex","_ref8$rowIndex","adjustedColumnIndex","adjustedRowIndex","_leftGridWidth","_topGridHeight","_this$props7","_this$props8","_prepareForRender","_this$state4","_containerOuterStyle","_containerTopStyle","_renderTopLeftGrid","_renderTopRightGrid","_containerBottomStyle","_renderBottomLeftGrid","_renderBottomRightGrid","_getTopGridHeight","leftGridWidth","_getLeftGridWidth","topGridHeight","resetAll","_this$props9","enableFixedColumnScroll","enableFixedRowScroll","styleBottomLeftGrid","styleBottomRightGrid","styleTopLeftGrid","styleTopRightGrid","sizeChange","_lastRenderedHeight","_lastRenderedWidth","leftSizeChange","_lastRenderedColumnWidth","_lastRenderedFixedColumnCount","topSizeChange","_lastRenderedFixedRowCount","_lastRenderedRowHeight","_lastRenderedStyle","_lastRenderedStyleBottomLeftGrid","_bottomLeftGridStyle","_lastRenderedStyleBottomRightGrid","_bottomRightGridStyle","_lastRenderedStyleTopLeftGrid","_topLeftGridStyle","_lastRenderedStyleTopRightGrid","_topRightGridStyle","hideBottomLeftGridScrollbar","additionalRowCount","_getBottomGridHeight","gridWidth","bottomLeftGrid","_cellRendererBottomLeftGrid","classNameBottomLeftGrid","_onScrollTop","_bottomLeftGridRef","_rowHeightBottomGrid","_cellRendererBottomRightGrid","classNameBottomRightGrid","_columnWidthRightGrid","_onScrollbarPresenceChange","_bottomRightGridRef","_getRightGridWidth","classNameTopLeftGrid","_topLeftGridRef","hideTopRightGridScrollbar","_this$state5","additionalColumnCount","additionalHeight","gridHeight","topRightGrid","_cellRendererTopRightGrid","classNameTopRightGrid","_onScrollLeft","_topRightGridRef","ScrollSync","defaultHeaderRowRenderer","columns","ASC","DESC","SortIndicator","sortDirection","SortDirection","viewBox","fill","defaultHeaderRenderer","dataKey","label","sortBy","showSortIndicator","title","defaultRowRenderer","onRowClick","onRowDoubleClick","onRowMouseOut","onRowMouseOver","onRowRightClick","rowData","a11yProps","onClick","onDoubleClick","onMouseOut","onMouseOver","onContextMenu","Column","cellDataGetter","cellData","String","defaultSortDirection","flexGrow","flexShrink","headerRenderer","Table","scrollbarWidth","_createColumn","_createRow","_ref3$columnIndex","_ref3$rowIndex","_Grid","_setScrollbarWidth","disableHeader","gridClassName","headerHeight","headerRowRenderer","rowClassName","rowStyle","availableRowsHeight","rowClass","rowStyleObject","_cachedColumnStyles","toArray","column","flexStyles","_getFlexStyleForColumn","_getHeaderColumns","onColumnClick","_column$props","columnData","headerOnClick","headerOnKeyDown","headerTabIndex","headerAriaSort","headerAriaLabel","headerClassName","headerStyle","onHeaderClick","_column$props2","disableSort","sortEnabled","ReactVirtualized__Table__sortableHeaderColumn","renderedHeader","newSortDirection","rowGetter","flattenedStyle","_getRowHeight","customStyle","flexValue","flex","msFlex","WebkitFlex","_this4","_createHeader","getScrollbarWidth","mountedInstances","originalBodyPointerEvents","disablePointerEventsTimeoutId","enablePointerEventsIfDisabled","enablePointerEventsAfterDelayCallback","instance","__resetIsScrolling","onScrollWindow","maximumTimeout","enablePointerEventsAfterDelay","scrollElement","__handleWindowScrollEvent","registerScrollListener","unregisterScrollListener","isWindow","getBoundingBox","getBoundingClientRect","getDimensions","innerHeight","innerWidth","serverHeight","serverWidth","getScrollOffset","documentElement","scrollY","scrollX","getWindow","WindowScroller","updatePosition","scrollTo","_positionFromTop","_isMounted","_positionFromLeft","thisNode","ReactDOM","container","containerElement","elementRect","containerRect","_elementRect","_containerRect","getPositionOffset","dimensions","_registerResizeListener","prevScrollElement","_unregisterResizeListener","onChildScroll","_onChildScroll"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/426.32092f8a.chunk.js b/web-app/build/static/js/426.32092f8a.chunk.js new file mode 100644 index 00000000000..1270a0eabd4 --- /dev/null +++ b/web-app/build/static/js/426.32092f8a.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[426],{426:(e,s,n)=>{n.r(s),n.d(s,{default:()=>p});var t=n(2791),r=n(9434),a=n(9945),c=n(7689),o=n(5248),l=n(1320),i=n(7995),d=n(1207),x=n(5450),j=n(184);const p=()=>{const e=(0,l.TL)(),s=(0,c.UO)(),n=(0,r.v9)((e=>e.tenants.loadingTenant)),[p,h]=(0,t.useState)([]),[m,g]=(0,t.useState)(!0),u=s.tenantName||"",v=s.tenantNamespace||"";return(0,t.useEffect)((()=>{n&&g(!0)}),[n]),(0,t.useEffect)((()=>{m&&d.Z.invoke("GET","/api/v1/namespaces/".concat(v,"/tenants/").concat(u,"/events")).then((e=>{for(let s=0;s{e((0,i.Ih)(s)),g(!1)}))}),[m,v,u,e]),(0,j.jsxs)(t.Fragment,{children:[(0,j.jsx)(a.NZf,{separator:!0,sx:{marginBottom:15},children:"Events"}),(0,j.jsx)(a.rjZ,{item:!0,xs:12,children:(0,j.jsx)(x.Z,{events:p,loading:m})})]})}},5450:(e,s,n)=>{n.d(s,{Z:()=>o});var t=n(2791),r=n(9945),a=n(184);const c=e=>{const{event:s}=e,[n,c]=t.useState(!1);return(0,a.jsxs)(t.Fragment,{children:[(0,a.jsxs)(r.SCH,{sx:{cursor:"pointer"},children:[(0,a.jsx)(r.bil,{scope:"row",onClick:()=>c(!n),sx:{borderBottom:0},children:s.event_type}),(0,a.jsx)(r.pj1,{onClick:()=>c(!n),sx:{borderBottom:0},children:s.reason}),(0,a.jsx)(r.pj1,{onClick:()=>c(!n),sx:{borderBottom:0},children:s.seen}),(0,a.jsx)(r.pj1,{onClick:()=>c(!n),sx:{borderBottom:0},children:s.message.length>=30?"".concat(s.message.slice(0,30),"..."):s.message}),(0,a.jsx)(r.pj1,{onClick:()=>c(!n),sx:{borderBottom:0},children:n?(0,a.jsx)(r.ZyT,{}):(0,a.jsx)(r.ASC,{})})]}),(0,a.jsx)(r.SCH,{children:(0,a.jsx)(r.pj1,{style:{paddingBottom:0,paddingTop:0},colSpan:5,children:n&&(0,a.jsx)(r.xuv,{useBackground:!0,sx:{padding:10,marginBottom:10},children:s.message})})})]})},o=e=>{let{events:s,loading:n}=e;return n?(0,a.jsx)(r.kod,{}):(0,a.jsx)(r.xuv,{withBorders:!0,customBorderPadding:"0px",children:(0,a.jsxs)(r.iA_,{"aria-label":"collapsible table",children:[(0,a.jsx)(r.ssF,{children:(0,a.jsxs)(r.SCH,{children:[(0,a.jsx)(r.pj1,{children:"Type"}),(0,a.jsx)(r.pj1,{children:"Reason"}),(0,a.jsx)(r.pj1,{children:"Age"}),(0,a.jsx)(r.pj1,{children:"Message"}),(0,a.jsx)(r.pj1,{})]})}),(0,a.jsx)(r.RMI,{children:s.map((e=>(0,a.jsx)(c,{event:e},"".concat(e.event_type,"-").concat(e.seen))))})]})})}}}]); +//# sourceMappingURL=426.32092f8a.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/426.32092f8a.chunk.js.map b/web-app/build/static/js/426.32092f8a.chunk.js.map new file mode 100644 index 00000000000..3daf2ce0bfa --- /dev/null +++ b/web-app/build/static/js/426.32092f8a.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/426.32092f8a.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/TenantEvents.tsx","screens/Console/Tenants/TenantDetails/events/EventsList.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Grid, SectionTitle } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { IEvent } from \"../ListTenants/types\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport EventsList from \"./events/EventsList\";\n\nconst TenantEvents = () => {\n const dispatch = useAppDispatch();\n const params = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [events, setEvents] = useState([]);\n const [loading, setLoading] = useState(true);\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/events`,\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvents(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, tenantNamespace, tenantName, dispatch]);\n\n return (\n \n \n Events\n \n \n \n \n \n );\n};\n\nexport default TenantEvents;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n ProgressBar,\n Table,\n TableBody,\n TableHeadCell,\n TableCell,\n TableHead,\n TableRow,\n Box,\n ExpandCaret,\n CollapseCaret,\n} from \"mds\";\nimport { IEvent } from \"../../ListTenants/types\";\n\ninterface IEventsListProps {\n events: IEvent[];\n loading: boolean;\n}\n\nconst Event = (props: { event: IEvent }) => {\n const { event } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n \n \n setOpen(!open)}\n sx={{ borderBottom: 0 }}\n >\n {event.event_type}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.reason}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.seen}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.message.length >= 30\n ? `${event.message.slice(0, 30)}...`\n : event.message}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {open ? : }\n \n \n \n \n {open && (\n \n {event.message}\n \n )}\n \n \n \n );\n};\n\nconst EventsList = ({ events, loading }: IEventsListProps) => {\n if (loading) {\n return ;\n }\n return (\n \n \n \n \n Type\n Reason\n Age\n Message\n \n \n \n \n {events.map((event) => (\n \n ))}\n \n
\n
\n );\n};\n\nexport default EventsList;\n"],"names":["TenantEvents","dispatch","useAppDispatch","params","useParams","loadingTenant","useSelector","state","tenants","events","setEvents","useState","loading","setLoading","tenantName","tenantNamespace","useEffect","api","invoke","concat","then","res","i","length","currentTime","Date","now","seen","niceDays","last_seen","toString","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","Grid","item","xs","EventsList","Event","props","event","open","setOpen","React","TableRow","cursor","TableHeadCell","scope","onClick","borderBottom","event_type","TableCell","reason","message","slice","CollapseCaret","ExpandCaret","style","paddingBottom","paddingTop","colSpan","Box","useBackground","padding","_ref","ProgressBar","withBorders","customBorderPadding","Table","TableHead","TableBody","map"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/426.b7b6b84b.chunk.js b/web-app/build/static/js/426.b7b6b84b.chunk.js deleted file mode 100644 index 5b5ced9487c..00000000000 --- a/web-app/build/static/js/426.b7b6b84b.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[426],{426:function(n,e,t){t.r(e);var s=t(29439),c=t(1413),r=t(72791),i=t(78687),a=t(57689),o=t(11135),l=t(25787),u=t(23814),d=t(61889),Z=t(45248),x=t(81207),h=t(41320),j=t(5450),f=t(87995),p=t(80184),g=(0,i.$j)((function(n){return{loadingTenant:n.tenants.loadingTenant}}),null);e.default=(0,l.Z)((function(n){return(0,o.Z)((0,c.Z)((0,c.Z)((0,c.Z)((0,c.Z)({},u.OR),u.qg),u.VX),u.Bz))}))(g((function(n){var e=n.classes,t=(0,h.TL)(),c=(0,a.UO)(),o=(0,i.v9)((function(n){return n.tenants.loadingTenant})),l=(0,r.useState)([]),u=(0,s.Z)(l,2),g=u[0],m=u[1],v=(0,r.useState)(!0),k=(0,s.Z)(v,2),b=k[0],T=k[1],C=c.tenantName||"",w=c.tenantNamespace||"";return(0,r.useEffect)((function(){o&&T(!0)}),[o]),(0,r.useEffect)((function(){b&&x.Z.invoke("GET","/api/v1/namespaces/".concat(w,"/tenants/").concat(C,"/events")).then((function(n){for(var e=0;e *":{borderBottom:"unset"},cursor:"pointer"},children:[(0,g.jsx)(o.Z,{component:"th",scope:"row",onClick:function(){return a(!i)},children:e.event_type}),(0,g.jsx)(o.Z,{onClick:function(){return a(!i)},children:e.reason}),(0,g.jsx)(o.Z,{onClick:function(){return a(!i)},children:e.seen}),(0,g.jsx)(o.Z,{onClick:function(){return a(!i)},children:e.message.length>=30?"".concat(e.message.slice(0,30),"..."):e.message}),(0,g.jsx)(o.Z,{onClick:function(){return a(!i)},children:i?(0,g.jsx)(j.Z,{}):(0,g.jsx)(h.Z,{})})]}),(0,g.jsx)(u.Z,{children:(0,g.jsx)(o.Z,{style:{paddingBottom:0,paddingTop:0},colSpan:5,children:(0,g.jsx)(Z.Z,{in:i,timeout:"auto",unmountOnExit:!0,children:(0,g.jsx)(d.Z,{sx:{margin:1},children:(0,g.jsx)(x.Z,{style:{background:"#efefef",border:"1px solid #dedede",padding:4,fontSize:14,color:"#666666"},children:e.message})})})})})]})};e.Z=function(n){var e=n.events;return n.loading?(0,g.jsx)(r.Z,{}):(0,g.jsx)(f.Z,{component:p.Z,children:(0,g.jsxs)(i.Z,{"aria-label":"collapsible table",children:[(0,g.jsx)(l.Z,{children:(0,g.jsxs)(u.Z,{children:[(0,g.jsx)(o.Z,{children:"Type"}),(0,g.jsx)(o.Z,{children:"Reason"}),(0,g.jsx)(o.Z,{children:"Age"}),(0,g.jsx)(o.Z,{children:"Message"}),(0,g.jsx)(o.Z,{})]})}),(0,g.jsx)(a.Z,{children:e.map((function(n){return(0,g.jsx)(m,{event:n},"".concat(n.event_type,"-").concat(n.seen))}))})]})})}}}]); -//# sourceMappingURL=426.b7b6b84b.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/426.b7b6b84b.chunk.js.map b/web-app/build/static/js/426.b7b6b84b.chunk.js.map deleted file mode 100644 index 116a43deb8c..00000000000 --- a/web-app/build/static/js/426.b7b6b84b.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/426.b7b6b84b.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/TenantEvents.tsx","screens/Console/Tenants/TenantDetails/events/EventsList.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { useParams } from \"react-router-dom\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n tableStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { IEvent } from \"../ListTenants/types\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport api from \"../../../../common/api\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport EventsList from \"./events/EventsList\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\n\ninterface ITenantEventsProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...tableStyles,\n ...containerForHeader,\n });\n\nconst TenantEvents = ({ classes }: ITenantEventsProps) => {\n const dispatch = useAppDispatch();\n const params = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [events, setEvents] = useState([]);\n const [loading, setLoading] = useState(true);\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/events`,\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvents(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, tenantNamespace, tenantName, dispatch]);\n\n return (\n \n

Events

\n \n \n \n
\n );\n};\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.loadingTenant,\n});\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(TenantEvents));\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { LinearProgress } from \"@mui/material\";\nimport { IEvent } from \"../../ListTenants/types\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport Box from \"@mui/material/Box\";\nimport Collapse from \"@mui/material/Collapse\";\nimport Typography from \"@mui/material/Typography\";\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\nimport KeyboardArrowUpIcon from \"@mui/icons-material/KeyboardArrowUp\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport Paper from \"@mui/material/Paper\";\n\ninterface IEventsListProps {\n events: IEvent[];\n loading: boolean;\n}\n\nconst Event = (props: { event: IEvent }) => {\n const { event } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n \n *\": { borderBottom: \"unset\" }, cursor: \"pointer\" }}>\n setOpen(!open)}>\n {event.event_type}\n \n setOpen(!open)}>{event.reason}\n setOpen(!open)}>{event.seen}\n setOpen(!open)}>\n {event.message.length >= 30\n ? `${event.message.slice(0, 30)}...`\n : event.message}\n \n setOpen(!open)}>\n {open ? : }\n \n \n \n \n \n \n \n {event.message}\n \n \n \n \n \n \n );\n};\n\nconst EventsList = ({ events, loading }: IEventsListProps) => {\n if (loading) {\n return ;\n }\n return (\n \n \n \n \n Type\n Reason\n Age\n Message\n \n \n \n \n {events.map((event) => (\n \n ))}\n \n
\n
\n );\n};\n\nexport default EventsList;\n"],"names":["connector","connect","state","loadingTenant","tenants","withStyles","theme","createStyles","_objectSpread","actionsTray","searchField","tableStyles","containerForHeader","_ref","classes","dispatch","useAppDispatch","params","useParams","useSelector","_useState","useState","_useState2","_slicedToArray","events","setEvents","_useState3","_useState4","loading","setLoading","tenantName","tenantNamespace","useEffect","api","invoke","concat","then","res","i","length","currentTime","Date","now","seen","niceDays","last_seen","toString","catch","err","setErrorSnackMessage","_jsxs","React","children","_jsx","className","sectionTitle","Grid","item","xs","EventsList","Event","props","event","_React$useState","_React$useState2","open","setOpen","TableRow","sx","borderBottom","cursor","TableCell","component","scope","onClick","event_type","reason","message","slice","KeyboardArrowUpIcon","KeyboardArrowDownIcon","style","paddingBottom","paddingTop","colSpan","Collapse","in","timeout","unmountOnExit","Box","margin","Typography","background","border","padding","fontSize","color","LinearProgress","TableContainer","Paper","Table","TableHead","TableBody","map"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/455.36b87621.chunk.js b/web-app/build/static/js/455.36b87621.chunk.js deleted file mode 100644 index 70e2140a65a..00000000000 --- a/web-app/build/static/js/455.36b87621.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[455],{79762:function(e,t,n){var r=n(72791);var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,i=n.minimumBatchSize,l=void 0===i?10:i,s=n.threshold,a=void 0===s?15:s,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,i=e.stopIndex,l=[],s=null,a=null,c=o;c<=i;c++)t(c)?null!==a&&(l.push(s,a),s=a=null):(a=c,null===s&&(s=c));if(null!==a){for(var u=Math.min(Math.max(a,s+r-1),n-1),d=a+1;d<=u&&!t(d);d++)a=d;l.push(s,a)}if(l.length)for(;l[1]-l[0]+10;){var f=l[0]-1;if(t(f))break;l[0]=f}return l}({isItemLoaded:r,itemCount:o,minimumBatchSize:l,startIndex:Math.max(0,e-a),stopIndex:Math.min(o-1,t+a)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],i=e[r+1],l=n(o,i);null!=l&&l.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var h=-1;function p(e){if(void 0===e&&(e=!1),-1===h||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),h=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return h}var m=null;function v(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var g=function(e,t){return e};function S(e){var t,n=e.getItemOffset,l=e.getEstimatedTotalSize,s=e.getItemSize,u=e.getOffsetForIndexAndAlignment,h=e.getStartIndexForOffset,m=e.getStopIndexForStartIndex,S=e.initInstanceProps,I=e.shouldResetStyleCacheOnItemSizeChange,y=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=S(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"===typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=a((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=a((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,i=o.direction,l=o.itemSize,a=o.layout,c=r._getItemStyleCache(I&&l,I&&a,I&&i);if(c.hasOwnProperty(e))t=c[e];else{var u=n(r.props,e,r._instanceProps),d=s(r.props,e,r._instanceProps),f="horizontal"===i||"horizontal"===a,h="rtl"===i,p=f?u:0;c[e]=t={position:"absolute",left:h?void 0:p,right:h?p:void 0,top:f?0:u,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=a((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,i=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,l=o;if("rtl"===t)switch(v()){case"negative":l=-o;break;case"positive-descending":l=i-n-o}return l=Math.max(0,Math.min(l,i-n)),{isScrolling:!0,scrollDirection:e.scrollOffsets.clientWidth?p():0:s.scrollHeight>s.clientHeight?p():0}this.scrollTo(u(this.props,e,t,i,this._instanceProps,l))},R.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"===typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},R.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var i=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(v()){case"negative":i.scrollLeft=-o;break;case"positive-ascending":i.scrollLeft=o;break;default:var l=i.clientWidth,s=i.scrollWidth;i.scrollLeft=s-l-o}else i.scrollLeft=o;else i.scrollTop=o}this._callPropsCallbacks()},R.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&d(this._resetIsScrollingTimeoutId)},R.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,i=e.height,s=e.innerRef,a=e.innerElementType,u=e.innerTagName,d=e.itemCount,f=e.itemData,h=e.itemKey,p=void 0===h?g:h,m=e.layout,v=e.outerElementType,S=e.outerTagName,_=e.style,I=e.useIsScrolling,y=e.width,R=this.state.isScrolling,x="horizontal"===o||"horizontal"===m,b=x?this._onScrollHorizontal:this._onScrollVertical,w=this._getRangeToRender(),O=w[0],C=w[1],z=[];if(d>0)for(var M=O;M<=C;M++)z.push((0,c.createElement)(t,{data:f,key:p(M,f),index:M,isScrolling:I?R:void 0,style:this._getItemStyle(M)}));var T=l(this.props,this._instanceProps);return(0,c.createElement)(v||S||"div",{className:n,onScroll:b,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,c.createElement)(a||u||"div",{children:z,ref:s,style:{height:x?"100%":T,pointerEvents:R?"none":void 0,width:x?T:"100%"}}))},R._callPropsCallbacks=function(){if("function"===typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"===typeof this.props.onScroll){var i=this.state,l=i.scrollDirection,s=i.scrollOffset,a=i.scrollUpdateWasRequested;this._callOnScroll(l,s,a)}},R._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,i=r.scrollDirection,l=r.scrollOffset;if(0===t)return[0,0,0,0];var s=h(this.props,l,this._instanceProps),a=m(this.props,s,l,this._instanceProps),c=o&&"backward"!==i?1:Math.max(1,n),u=o&&"forward"!==i?1:Math.max(1,n);return[Math.max(0,s-c),Math.max(0,Math.min(t-1,a+u)),s,a]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var _=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},I=S({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,i){var l=e.direction,s=e.height,a=e.itemCount,c=e.itemSize,u=e.layout,d=e.width,f="horizontal"===l||"horizontal"===u?d:s,h=Math.max(0,a*c-f),p=Math.min(h,t*c),m=Math.max(0,t*c-f+c+i);switch("smart"===n&&(n=r>=m-f&&r<=p+f?"auto":"center"),n){case"start":return p;case"end":return m;case"center":var v=Math.round(m+(p-m)/2);return vh+Math.floor(f/2)?h:v;default:return r>=m&&r<=p?r:r lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n\nfunction scanForUnloadedRanges(_ref) {\n var isItemLoaded = _ref.isItemLoaded,\n itemCount = _ref.itemCount,\n minimumBatchSize = _ref.minimumBatchSize,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n var unloadedRanges = [];\n\n var rangeStartIndex = null;\n var rangeStopIndex = null;\n\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n var loaded = isItemLoaded(_index);\n\n if (!loaded) {\n rangeStopIndex = _index;\n if (rangeStartIndex === null) {\n rangeStartIndex = _index;\n }\n } else if (rangeStopIndex !== null) {\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n\n rangeStartIndex = rangeStopIndex = null;\n }\n }\n\n // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n // Scan forward to try filling our :minimumBatchSize.\n if (rangeStopIndex !== null) {\n var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), itemCount - 1);\n\n for (var _index2 = rangeStopIndex + 1; _index2 <= potentialStopIndex; _index2++) {\n if (!isItemLoaded(_index2)) {\n rangeStopIndex = _index2;\n } else {\n break;\n }\n }\n\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n }\n\n // Check to see if our first range ended prematurely.\n // In this case we should scan backwards to try filling our :minimumBatchSize.\n if (unloadedRanges.length) {\n while (unloadedRanges[1] - unloadedRanges[0] + 1 < minimumBatchSize && unloadedRanges[0] > 0) {\n var _index3 = unloadedRanges[0] - 1;\n\n if (!isItemLoaded(_index3)) {\n unloadedRanges[0] = _index3;\n } else {\n break;\n }\n }\n }\n\n return unloadedRanges;\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar InfiniteLoader = function (_PureComponent) {\n inherits(InfiniteLoader, _PureComponent);\n\n function InfiniteLoader() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, InfiniteLoader);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = InfiniteLoader.__proto__ || Object.getPrototypeOf(InfiniteLoader)).call.apply(_ref, [this].concat(args))), _this), _this._lastRenderedStartIndex = -1, _this._lastRenderedStopIndex = -1, _this._memoizedUnloadedRanges = [], _this._onItemsRendered = function (_ref2) {\n var visibleStartIndex = _ref2.visibleStartIndex,\n visibleStopIndex = _ref2.visibleStopIndex;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isInteger(visibleStartIndex) || !isInteger(visibleStopIndex)) {\n console.warn('Invalid onItemsRendered signature; please refer to InfiniteLoader documentation.');\n }\n\n if (typeof _this.props.loadMoreRows === 'function') {\n console.warn('InfiniteLoader \"loadMoreRows\" prop has been renamed to \"loadMoreItems\".');\n }\n }\n\n _this._lastRenderedStartIndex = visibleStartIndex;\n _this._lastRenderedStopIndex = visibleStopIndex;\n\n _this._ensureRowsLoaded(visibleStartIndex, visibleStopIndex);\n }, _this._setRef = function (listRef) {\n _this._listRef = listRef;\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n createClass(InfiniteLoader, [{\n key: 'resetloadMoreItemsCache',\n value: function resetloadMoreItemsCache() {\n var autoReload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this._memoizedUnloadedRanges = [];\n\n if (autoReload) {\n this._ensureRowsLoaded(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (process.env.NODE_ENV !== 'production') {\n if (this._listRef == null) {\n console.warn('Invalid list ref; please refer to InfiniteLoader documentation.');\n }\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var children = this.props.children;\n\n\n return children({\n onItemsRendered: this._onItemsRendered,\n ref: this._setRef\n });\n }\n }, {\n key: '_ensureRowsLoaded',\n value: function _ensureRowsLoaded(startIndex, stopIndex) {\n var _props = this.props,\n isItemLoaded = _props.isItemLoaded,\n itemCount = _props.itemCount,\n _props$minimumBatchSi = _props.minimumBatchSize,\n minimumBatchSize = _props$minimumBatchSi === undefined ? 10 : _props$minimumBatchSi,\n _props$threshold = _props.threshold,\n threshold = _props$threshold === undefined ? 15 : _props$threshold;\n\n\n var unloadedRanges = scanForUnloadedRanges({\n isItemLoaded: isItemLoaded,\n itemCount: itemCount,\n minimumBatchSize: minimumBatchSize,\n startIndex: Math.max(0, startIndex - threshold),\n stopIndex: Math.min(itemCount - 1, stopIndex + threshold)\n });\n\n // Avoid calling load-rows unless range has changed.\n // This shouldn't be strictly necessary, but is maybe nice to do.\n if (this._memoizedUnloadedRanges.length !== unloadedRanges.length || this._memoizedUnloadedRanges.some(function (startOrStop, index) {\n return unloadedRanges[index] !== startOrStop;\n })) {\n this._memoizedUnloadedRanges = unloadedRanges;\n this._loadUnloadedRanges(unloadedRanges);\n }\n }\n }, {\n key: '_loadUnloadedRanges',\n value: function _loadUnloadedRanges(unloadedRanges) {\n var _this2 = this;\n\n // loadMoreRows was renamed to loadMoreItems in v1.0.3; will be removed in v2.0\n var loadMoreItems = this.props.loadMoreItems || this.props.loadMoreRows;\n\n var _loop = function _loop(i) {\n var startIndex = unloadedRanges[i];\n var stopIndex = unloadedRanges[i + 1];\n var promise = loadMoreItems(startIndex, stopIndex);\n if (promise != null) {\n promise.then(function () {\n // Refresh the visible rows if any of them have just been loaded.\n // Otherwise they will remain in their unloaded visual state.\n if (isRangeVisible({\n lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n startIndex: startIndex,\n stopIndex: stopIndex\n })) {\n // Handle an unmount while promises are still in flight.\n if (_this2._listRef == null) {\n return;\n }\n\n // Resize cached row sizes for VariableSizeList,\n // otherwise just re-render the list.\n if (typeof _this2._listRef.resetAfterIndex === 'function') {\n _this2._listRef.resetAfterIndex(startIndex, true);\n } else {\n // HACK reset temporarily cached item styles to force PureComponent to re-render.\n // This is pretty gross, but I'm okay with it for now.\n // Don't judge me.\n if (typeof _this2._listRef._getItemStyleCache === 'function') {\n _this2._listRef._getItemStyleCache(-1);\n }\n _this2._listRef.forceUpdate();\n }\n }\n });\n }\n };\n\n for (var i = 0; i < unloadedRanges.length; i += 2) {\n _loop(i);\n }\n }\n }]);\n return InfiniteLoader;\n}(PureComponent);\n\nexport default InfiniteLoader;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount, layout } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n let scrollbarSize = 0;\n if (this._outerRef) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (layout === 'vertical') {\n scrollbarSize =\n outerRef.scrollWidth > outerRef.clientWidth\n ? getScrollbarSize()\n : 0;\n } else {\n scrollbarSize =\n outerRef.scrollHeight > outerRef.clientHeight\n ? getScrollbarSize()\n : 0;\n }\n }\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps,\n scrollbarSize\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\ntype InstanceProps = any;\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: InstanceProps,\n scrollbarSize: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) -\n size +\n ((itemSize: any): number) +\n scrollbarSize\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n"],"names":["createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","possibleConstructorReturn","self","call","ReferenceError","InfiniteLoader","_PureComponent","_ref","_temp","_this","instance","TypeError","classCallCheck","this","_len","arguments","args","Array","_key","__proto__","getPrototypeOf","apply","concat","_lastRenderedStartIndex","_lastRenderedStopIndex","_memoizedUnloadedRanges","_onItemsRendered","_ref2","visibleStartIndex","visibleStopIndex","_ensureRowsLoaded","_setRef","listRef","_listRef","subClass","superClass","create","constructor","value","setPrototypeOf","inherits","autoReload","undefined","process","children","onItemsRendered","ref","startIndex","stopIndex","_props","isItemLoaded","itemCount","_props$minimumBatchSi","minimumBatchSize","_props$threshold","threshold","unloadedRanges","rangeStartIndex","rangeStopIndex","_index","push","potentialStopIndex","Math","min","max","_index2","_index3","scanForUnloadedRanges","some","startOrStop","index","_loadUnloadedRanges","_this2","loadMoreItems","loadMoreRows","_loop","promise","then","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","resetAfterIndex","_getItemStyleCache","forceUpdate","PureComponent","safeIsNaN","Number","isNaN","areInputsEqual","newInputs","lastInputs","first","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","requestTimeout","callback","delay","start","requestAnimationFrame","tick","size","getScrollbarSize","recalculate","div","document","createElement","style","width","height","overflow","body","appendChild","offsetWidth","clientWidth","removeChild","cachedRTLResult","getRTLOffsetType","outerDiv","outerStyle","direction","innerDiv","innerStyle","scrollLeft","defaultItemKey$1","data","createListComponent","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","List","_instanceProps","_assertThisInitialized","_outerRef","_resetIsScrollingTimeoutId","state","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","memoizeOne","overscanStartIndex","overscanStopIndex","_callOnScroll","onScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","hasOwnProperty","_offset","isHorizontal","isRtl","offsetHorizontal","position","left","right","top","_","__","___","_onScrollHorizontal","event","_event$currentTarget","currentTarget","scrollWidth","setState","prevState","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","clientHeight","scrollHeight","scrollTop","_outerRefSetter","outerRef","current","_resetIsScrolling","_inheritsLoose","getDerivedStateFromProps","nextProps","validateSharedProps$1","_proto","scrollTo","scrollToItem","align","_this$props2","scrollbarSize","componentDidMount","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","componentWillUnmount","render","_this$props5","className","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","items","estimatedTotalSize","_extends","WebkitOverflowScrolling","willChange","pointerEvents","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","defaultProps","_ref3","FixedSizeList","_ref4","instanceProps","lastItemOffset","maxOffset","minOffset","middleOffset","round","ceil","floor","_ref5","offset","_ref6","numVisibleItems","_ref7"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/463.39c0be1b.chunk.js b/web-app/build/static/js/463.39c0be1b.chunk.js new file mode 100644 index 00000000000..95e4fc05758 --- /dev/null +++ b/web-app/build/static/js/463.39c0be1b.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[463],{8182:(e,t,o)=>{function i(e){var t,o,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tn});const n=function(){for(var e,t,o=0,n="";o{function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}o.d(t,{qj:()=>Q,Z8:()=>ie,t1:()=>ne,aV:()=>we});var n=o(9142);function r(e,t){for(var o=0;o=0&&a===s&&c())}function S(e,t){if(null==e)return{};var o,i,n=function(e,t){if(null==e)return{};var o,i,n={},r=Object.keys(e);for(i=0;i=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var C=function(){function e(t){var o=t.cellCount,n=t.cellSizeGetter,r=t.estimatedCellSize;i(this,e),(0,f.Z)(this,"_cellSizeAndPositionData",{}),(0,f.Z)(this,"_lastMeasuredIndex",-1),(0,f.Z)(this,"_lastBatchedIndex",-1),(0,f.Z)(this,"_cellCount",void 0),(0,f.Z)(this,"_cellSizeGetter",void 0),(0,f.Z)(this,"_estimatedCellSize",void 0),this._cellSizeGetter=n,this._cellCount=o,this._estimatedCellSize=r}return l(e,[{key:"areOffsetsAdjusted",value:function(){return!1}},{key:"configure",value:function(e){var t=e.cellCount,o=e.estimatedCellSize,i=e.cellSizeGetter;this._cellCount=t,this._estimatedCellSize=o,this._cellSizeGetter=i}},{key:"getCellCount",value:function(){return this._cellCount}},{key:"getEstimatedCellSize",value:function(){return this._estimatedCellSize}},{key:"getLastMeasuredIndex",value:function(){return this._lastMeasuredIndex}},{key:"getOffsetAdjustment",value:function(){return 0}},{key:"getSizeAndPositionOfCell",value:function(e){if(e<0||e>=this._cellCount)throw Error("Requested index ".concat(e," is outside of range 0..").concat(this._cellCount));if(e>this._lastMeasuredIndex)for(var t=this.getSizeAndPositionOfLastMeasuredCell(),o=t.offset+t.size,i=this._lastMeasuredIndex+1;i<=e;i++){var n=this._cellSizeGetter({index:i});if(void 0===n||isNaN(n))throw Error("Invalid size returned for cell ".concat(i," of value ").concat(n));null===n?(this._cellSizeAndPositionData[i]={offset:o,size:0},this._lastBatchedIndex=e):(this._cellSizeAndPositionData[i]={offset:o,size:n},o+=n,this._lastMeasuredIndex=e)}return this._cellSizeAndPositionData[e]}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}}},{key:"getTotalSize",value:function(){var e=this.getSizeAndPositionOfLastMeasuredCell();return e.offset+e.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;if(i<=0)return 0;var l,s=this.getSizeAndPositionOfCell(r),a=s.offset,c=a-i+s.size;switch(o){case"start":l=a;break;case"end":l=c;break;case"center":l=a-(i-s.size)/2;break;default:l=Math.max(c,Math.min(a,n))}var d=this.getTotalSize();return Math.max(0,Math.min(d-i,l))}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;if(0===this.getTotalSize())return{};var i=o+t,n=this._findNearestCell(o),r=this.getSizeAndPositionOfCell(n);o=r.offset+r.size;for(var l=n;oo&&(e=i-1)}return t>0?t-1:0}},{key:"_exponentialSearch",value:function(e,t){for(var o=1;e=e?this._binarySearch(o,0,e):this._exponentialSearch(o,e)}}]),e}(),y=function(){return"undefined"!==typeof window&&window.chrome?16777100:15e5},w=function(){function e(t){var o=t.maxScrollSize,n=void 0===o?y():o,r=S(t,["maxScrollSize"]);i(this,e),(0,f.Z)(this,"_cellSizeAndPositionManager",void 0),(0,f.Z)(this,"_maxScrollSize",void 0),this._cellSizeAndPositionManager=new C(r),this._maxScrollSize=n}return l(e,[{key:"areOffsetsAdjusted",value:function(){return this._cellSizeAndPositionManager.getTotalSize()>this._maxScrollSize}},{key:"configure",value:function(e){this._cellSizeAndPositionManager.configure(e)}},{key:"getCellCount",value:function(){return this._cellSizeAndPositionManager.getCellCount()}},{key:"getEstimatedCellSize",value:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()}},{key:"getLastMeasuredIndex",value:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()}},{key:"getOffsetAdjustment",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize(),r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(n-i))}},{key:"getSizeAndPositionOfCell",value:function(e){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(e)}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()}},{key:"getTotalSize",value:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;n=this._safeOffsetToOffset({containerSize:i,offset:n});var l=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({align:o,containerSize:i,currentOffset:n,targetIndex:r});return this._offsetToSafeOffset({containerSize:i,offset:l})}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;return o=this._safeOffsetToOffset({containerSize:t,offset:o}),this._cellSizeAndPositionManager.getVisibleCellRange({containerSize:t,offset:o})}},{key:"resetCell",value:function(e){this._cellSizeAndPositionManager.resetCell(e)}},{key:"_getOffsetPercentage",value:function(e){var t=e.containerSize,o=e.offset,i=e.totalSize;return i<=t?0:o/(i-t)}},{key:"_offsetToSafeOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:i});return Math.round(r*(n-t))}},{key:"_safeOffsetToOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(i-t))}}]),e}();function x(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t={};return function(o){var i=o.callback,n=o.indices,r=Object.keys(n),l=!e||r.every((function(e){var t=n[e];return Array.isArray(t)?t.length>0:t>=0})),s=r.length!==Object.keys(t).length||r.some((function(e){var o=t[e],i=n[e];return Array.isArray(i)?o.join(",")!==i.join(","):o!==i}));t=n,l&&s&&i(n)}}function R(e){var t=e.cellSize,o=e.cellSizeAndPositionManager,i=e.previousCellsCount,n=e.previousCellSize,r=e.previousScrollToAlignment,l=e.previousScrollToIndex,s=e.previousSize,a=e.scrollOffset,c=e.scrollToAlignment,d=e.scrollToIndex,h=e.size,u=e.sizeJustIncreasedFromZero,f=e.updateScrollIndexCallback,p=o.getCellCount(),g=d>=0&&d0&&(ho.getTotalSize()-h&&f(p-1)}const b=!("undefined"===typeof window||!window.document||!window.document.createElement);var T,z;function I(e){if((!T&&0!==T||e)&&b){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),T=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return T}var M,k,P=(z="undefined"!==typeof window?window:"undefined"!==typeof self?self:{}).requestAnimationFrame||z.webkitRequestAnimationFrame||z.mozRequestAnimationFrame||z.oRequestAnimationFrame||z.msRequestAnimationFrame||function(e){return z.setTimeout(e,1e3/60)},O=z.cancelAnimationFrame||z.webkitCancelAnimationFrame||z.mozCancelAnimationFrame||z.oCancelAnimationFrame||z.msCancelAnimationFrame||function(e){z.clearTimeout(e)},Z=P,L=O,G=function(e){return L(e.id)},A=function(e,t){var o;Promise.resolve().then((function(){o=Date.now()}));var i={id:Z((function n(){Date.now()-o>=t?e.call():i.id=Z(n)}))};return i};function H(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function W(e){for(var t=1;t0&&(o._initialScrollTop=o._getCalculatedScrollTop(e,o.state)),e.scrollToColumn>0&&(o._initialScrollLeft=o._getCalculatedScrollLeft(e,o.state)),o}return u(t,e),l(t,[{key:"getOffsetForCell",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.alignment,o=void 0===t?this.props.scrollToAlignment:t,i=e.columnIndex,n=void 0===i?this.props.scrollToColumn:i,r=e.rowIndex,l=void 0===r?this.props.scrollToRow:r,s=W({},this.props,{scrollToAlignment:o,scrollToColumn:n,scrollToRow:l});return{scrollLeft:this._getCalculatedScrollLeft(s),scrollTop:this._getCalculatedScrollTop(s)}}},{key:"getTotalRowsHeight",value:function(){return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize()}},{key:"getTotalColumnsWidth",value:function(){return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize()}},{key:"handleScrollEvent",value:function(e){var t=e.scrollLeft,o=void 0===t?0:t,i=e.scrollTop,n=void 0===i?0:i;if(!(n<0)){this._debounceScrollEnded();var r=this.props,l=r.autoHeight,s=r.autoWidth,a=r.height,c=r.width,d=this.state.instanceProps,h=d.scrollbarSize,u=d.rowSizeAndPositionManager.getTotalSize(),f=d.columnSizeAndPositionManager.getTotalSize(),p=Math.min(Math.max(0,f-c+h),o),g=Math.min(Math.max(0,u-a+h),n);if(this.state.scrollLeft!==p||this.state.scrollTop!==g){var v={isScrolling:!0,scrollDirectionHorizontal:p!==this.state.scrollLeft?p>this.state.scrollLeft?1:-1:this.state.scrollDirectionHorizontal,scrollDirectionVertical:g!==this.state.scrollTop?g>this.state.scrollTop?1:-1:this.state.scrollDirectionVertical,scrollPositionChangeReason:E};l||(v.scrollTop=g),s||(v.scrollLeft=p),v.needToResetStyleCache=!1,this.setState(v)}this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:g,totalColumnsWidth:f,totalRowsHeight:u})}}},{key:"invalidateCellSizeAfterRender",value:function(e){var t=e.columnIndex,o=e.rowIndex;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,t):t,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,o):o}},{key:"measureAllCells",value:function(){var e=this.props,t=e.columnCount,o=e.rowCount,i=this.state.instanceProps;i.columnSizeAndPositionManager.getSizeAndPositionOfCell(t-1),i.rowSizeAndPositionManager.getSizeAndPositionOfCell(o-1)}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.scrollToColumn,s=r.scrollToRow,a=this.state.instanceProps;a.columnSizeAndPositionManager.resetCell(o),a.rowSizeAndPositionManager.resetCell(n),this._recomputeScrollLeftFlag=l>=0&&(1===this.state.scrollDirectionHorizontal?o<=l:o>=l),this._recomputeScrollTopFlag=s>=0&&(1===this.state.scrollDirectionVertical?n<=s:n>=s),this._styleCache={},this._cellCache={},this.forceUpdate()}},{key:"scrollToCell",value:function(e){var t=e.columnIndex,o=e.rowIndex,i=this.props.columnCount,n=this.props;i>1&&void 0!==t&&this._updateScrollLeftForScrollToColumn(W({},n,{scrollToColumn:t})),void 0!==o&&this._updateScrollTopForScrollToRow(W({},n,{scrollToRow:o}))}},{key:"componentDidMount",value:function(){var e=this.props,o=e.getScrollbarSize,i=e.height,n=e.scrollLeft,r=e.scrollToColumn,l=e.scrollTop,s=e.scrollToRow,a=e.width,c=this.state.instanceProps;if(this._initialScrollTop=0,this._initialScrollLeft=0,this._handleInvalidatedGridSize(),c.scrollbarSizeMeasured||this.setState((function(e){var t=W({},e,{needToResetStyleCache:!1});return t.instanceProps.scrollbarSize=o(),t.instanceProps.scrollbarSizeMeasured=!0,t})),"number"===typeof n&&n>=0||"number"===typeof l&&l>=0){var d=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:n,scrollTop:l});d&&(d.needToResetStyleCache=!1,this.setState(d))}this._scrollingContainer&&(this._scrollingContainer.scrollLeft!==this.state.scrollLeft&&(this._scrollingContainer.scrollLeft=this.state.scrollLeft),this._scrollingContainer.scrollTop!==this.state.scrollTop&&(this._scrollingContainer.scrollTop=this.state.scrollTop));var h=i>0&&a>0;r>=0&&h&&this._updateScrollLeftForScrollToColumn(),s>=0&&h&&this._updateScrollTopForScrollToRow(),this._invokeOnGridRenderedHelper(),this._invokeOnScrollMemoizer({scrollLeft:n||0,scrollTop:l||0,totalColumnsWidth:c.columnSizeAndPositionManager.getTotalSize(),totalRowsHeight:c.rowSizeAndPositionManager.getTotalSize()}),this._maybeCallOnScrollbarPresenceChange()}},{key:"componentDidUpdate",value:function(e,t){var o=this,i=this.props,n=i.autoHeight,r=i.autoWidth,l=i.columnCount,s=i.height,a=i.rowCount,c=i.scrollToAlignment,d=i.scrollToColumn,h=i.scrollToRow,u=i.width,f=this.state,p=f.scrollLeft,g=f.scrollPositionChangeReason,v=f.scrollTop,_=f.instanceProps;this._handleInvalidatedGridSize();var m=l>0&&0===e.columnCount||a>0&&0===e.rowCount;g===D&&(!r&&p>=0&&(p!==this._scrollingContainer.scrollLeft||m)&&(this._scrollingContainer.scrollLeft=p),!n&&v>=0&&(v!==this._scrollingContainer.scrollTop||m)&&(this._scrollingContainer.scrollTop=v));var S=(0===e.width||0===e.height)&&s>0&&u>0;if(this._recomputeScrollLeftFlag?(this._recomputeScrollLeftFlag=!1,this._updateScrollLeftForScrollToColumn(this.props)):R({cellSizeAndPositionManager:_.columnSizeAndPositionManager,previousCellsCount:e.columnCount,previousCellSize:e.columnWidth,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToColumn,previousSize:e.width,scrollOffset:p,scrollToAlignment:c,scrollToIndex:d,size:u,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollLeftForScrollToColumn(o.props)}}),this._recomputeScrollTopFlag?(this._recomputeScrollTopFlag=!1,this._updateScrollTopForScrollToRow(this.props)):R({cellSizeAndPositionManager:_.rowSizeAndPositionManager,previousCellsCount:e.rowCount,previousCellSize:e.rowHeight,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToRow,previousSize:e.height,scrollOffset:v,scrollToAlignment:c,scrollToIndex:h,size:s,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollTopForScrollToRow(o.props)}}),this._invokeOnGridRenderedHelper(),p!==t.scrollLeft||v!==t.scrollTop){var C=_.rowSizeAndPositionManager.getTotalSize(),y=_.columnSizeAndPositionManager.getTotalSize();this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:v,totalColumnsWidth:y,totalRowsHeight:C})}this._maybeCallOnScrollbarPresenceChange()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&G(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoContainerWidth,o=e.autoHeight,i=e.autoWidth,n=e.className,r=e.containerProps,l=e.containerRole,s=e.containerStyle,a=e.height,c=e.id,d=e.noContentRenderer,h=e.role,u=e.style,f=e.tabIndex,g=e.width,m=this.state,S=m.instanceProps,C=m.needToResetStyleCache,y=this._isScrolling(),w={boxSizing:"border-box",direction:"ltr",height:o?"auto":a,position:"relative",width:i?"auto":g,WebkitOverflowScrolling:"touch",willChange:"transform"};C&&(this._styleCache={}),this.state.isScrolling||this._resetStyleCache(),this._calculateChildrenToRender(this.props,this.state);var x=S.columnSizeAndPositionManager.getTotalSize(),R=S.rowSizeAndPositionManager.getTotalSize(),b=R>a?S.scrollbarSize:0,T=x>g?S.scrollbarSize:0;T===this._horizontalScrollBarSize&&b===this._verticalScrollBarSize||(this._horizontalScrollBarSize=T,this._verticalScrollBarSize=b,this._scrollbarPresenceChanged=!0),w.overflowX=x+b<=g?"hidden":"auto",w.overflowY=R+T<=a?"hidden":"auto";var z=this._childrenToDisplay,I=0===z.length&&a>0&&g>0;return p.createElement("div",(0,v.Z)({ref:this._setScrollingContainerRef},r,{"aria-label":this.props["aria-label"],"aria-readonly":this.props["aria-readonly"],className:(0,_.Z)("ReactVirtualized__Grid",n),id:c,onScroll:this._onScroll,role:h,style:W({},w,{},u),tabIndex:f}),z.length>0&&p.createElement("div",{className:"ReactVirtualized__Grid__innerScrollContainer",role:l,style:W({width:t?"auto":x,height:R,maxWidth:x,maxHeight:R,overflow:"hidden",pointerEvents:y?"none":"",position:"relative"},s)},z),I&&d())}},{key:"_calculateChildrenToRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,o=e.cellRenderer,i=e.cellRangeRenderer,n=e.columnCount,r=e.deferredMeasurementCache,l=e.height,s=e.overscanColumnCount,a=e.overscanIndicesGetter,c=e.overscanRowCount,d=e.rowCount,h=e.width,u=e.isScrollingOptOut,f=t.scrollDirectionHorizontal,p=t.scrollDirectionVertical,g=t.instanceProps,v=this._initialScrollTop>0?this._initialScrollTop:t.scrollTop,_=this._initialScrollLeft>0?this._initialScrollLeft:t.scrollLeft,m=this._isScrolling(e,t);if(this._childrenToDisplay=[],l>0&&h>0){var S=g.columnSizeAndPositionManager.getVisibleCellRange({containerSize:h,offset:_}),C=g.rowSizeAndPositionManager.getVisibleCellRange({containerSize:l,offset:v}),y=g.columnSizeAndPositionManager.getOffsetAdjustment({containerSize:h,offset:_}),w=g.rowSizeAndPositionManager.getOffsetAdjustment({containerSize:l,offset:v});this._renderedColumnStartIndex=S.start,this._renderedColumnStopIndex=S.stop,this._renderedRowStartIndex=C.start,this._renderedRowStopIndex=C.stop;var x=a({direction:"horizontal",cellCount:n,overscanCellsCount:s,scrollDirection:f,startIndex:"number"===typeof S.start?S.start:0,stopIndex:"number"===typeof S.stop?S.stop:-1}),R=a({direction:"vertical",cellCount:d,overscanCellsCount:c,scrollDirection:p,startIndex:"number"===typeof C.start?C.start:0,stopIndex:"number"===typeof C.stop?C.stop:-1}),b=x.overscanStartIndex,T=x.overscanStopIndex,z=R.overscanStartIndex,I=R.overscanStopIndex;if(r){if(!r.hasFixedHeight())for(var M=z;M<=I;M++)if(!r.has(M,0)){b=0,T=n-1;break}if(!r.hasFixedWidth())for(var k=b;k<=T;k++)if(!r.has(0,k)){z=0,I=d-1;break}}this._childrenToDisplay=i({cellCache:this._cellCache,cellRenderer:o,columnSizeAndPositionManager:g.columnSizeAndPositionManager,columnStartIndex:b,columnStopIndex:T,deferredMeasurementCache:r,horizontalOffsetAdjustment:y,isScrolling:m,isScrollingOptOut:u,parent:this,rowSizeAndPositionManager:g.rowSizeAndPositionManager,rowStartIndex:z,rowStopIndex:I,scrollLeft:_,scrollTop:v,styleCache:this._styleCache,verticalOffsetAdjustment:w,visibleColumnIndices:S,visibleRowIndices:C}),this._columnStartIndex=b,this._columnStopIndex=T,this._rowStartIndex=z,this._rowStopIndex=I}}},{key:"_debounceScrollEnded",value:function(){var e=this.props.scrollingResetTimeInterval;this._disablePointerEventsTimeoutId&&G(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=A(this._debounceScrollEndedCallback,e)}},{key:"_handleInvalidatedGridSize",value:function(){if("number"===typeof this._deferredInvalidateColumnIndex&&"number"===typeof this._deferredInvalidateRowIndex){var e=this._deferredInvalidateColumnIndex,t=this._deferredInvalidateRowIndex;this._deferredInvalidateColumnIndex=null,this._deferredInvalidateRowIndex=null,this.recomputeGridSize({columnIndex:e,rowIndex:t})}}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalColumnsWidth,r=e.totalRowsHeight;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:r,scrollLeft:o,scrollTop:i,scrollWidth:n})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_isScrolling",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return Object.hasOwnProperty.call(e,"isScrolling")?Boolean(e.isScrolling):Boolean(t.isScrolling)}},{key:"_maybeCallOnScrollbarPresenceChange",value:function(){if(this._scrollbarPresenceChanged){var e=this.props.onScrollbarPresenceChange;this._scrollbarPresenceChanged=!1,e({horizontal:this._horizontalScrollBarSize>0,size:this.state.instanceProps.scrollbarSize,vertical:this._verticalScrollBarSize>0})}}},{key:"scrollToPosition",value:function(e){var o=e.scrollLeft,i=e.scrollTop,n=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:o,scrollTop:i});n&&(n.needToResetStyleCache=!1,this.setState(n))}},{key:"_getCalculatedScrollLeft",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollLeft(e,o)}},{key:"_updateScrollLeftForScrollToColumn",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollLeftForScrollToColumnStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}},{key:"_getCalculatedScrollTop",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollTop(e,o)}},{key:"_resetStyleCache",value:function(){var e=this._styleCache,t=this._cellCache,o=this.props.isScrollingOptOut;this._cellCache={},this._styleCache={};for(var i=this._rowStartIndex;i<=this._rowStopIndex;i++)for(var n=this._columnStartIndex;n<=this._columnStopIndex;n++){var r="".concat(i,"-").concat(n);this._styleCache[r]=e[r],o&&(this._cellCache[r]=t[r])}}},{key:"_updateScrollTopForScrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollTopForScrollToRowStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}}],[{key:"getDerivedStateFromProps",value:function(e,o){var i={};0===e.columnCount&&0!==o.scrollLeft||0===e.rowCount&&0!==o.scrollTop?(i.scrollLeft=0,i.scrollTop=0):(e.scrollLeft!==o.scrollLeft&&e.scrollToColumn<0||e.scrollTop!==o.scrollTop&&e.scrollToRow<0)&&Object.assign(i,t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}));var n,r,l=o.instanceProps;return i.needToResetStyleCache=!1,e.columnWidth===l.prevColumnWidth&&e.rowHeight===l.prevRowHeight||(i.needToResetStyleCache=!0),l.columnSizeAndPositionManager.configure({cellCount:e.columnCount,estimatedCellSize:t._getEstimatedColumnSize(e),cellSizeGetter:t._wrapSizeGetter(e.columnWidth)}),l.rowSizeAndPositionManager.configure({cellCount:e.rowCount,estimatedCellSize:t._getEstimatedRowSize(e),cellSizeGetter:t._wrapSizeGetter(e.rowHeight)}),0!==l.prevColumnCount&&0!==l.prevRowCount||(l.prevColumnCount=0,l.prevRowCount=0),e.autoHeight&&!1===e.isScrolling&&!0===l.prevIsScrolling&&Object.assign(i,{isScrolling:!1}),m({cellCount:l.prevColumnCount,cellSize:"number"===typeof l.prevColumnWidth?l.prevColumnWidth:null,computeMetadataCallback:function(){return l.columnSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.columnCount,nextCellSize:"number"===typeof e.columnWidth?e.columnWidth:null,nextScrollToIndex:e.scrollToColumn,scrollToIndex:l.prevScrollToColumn,updateScrollOffsetForScrollToIndex:function(){n=t._getScrollLeftForScrollToColumnStateUpdate(e,o)}}),m({cellCount:l.prevRowCount,cellSize:"number"===typeof l.prevRowHeight?l.prevRowHeight:null,computeMetadataCallback:function(){return l.rowSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.rowCount,nextCellSize:"number"===typeof e.rowHeight?e.rowHeight:null,nextScrollToIndex:e.scrollToRow,scrollToIndex:l.prevScrollToRow,updateScrollOffsetForScrollToIndex:function(){r=t._getScrollTopForScrollToRowStateUpdate(e,o)}}),l.prevColumnCount=e.columnCount,l.prevColumnWidth=e.columnWidth,l.prevIsScrolling=!0===e.isScrolling,l.prevRowCount=e.rowCount,l.prevRowHeight=e.rowHeight,l.prevScrollToColumn=e.scrollToColumn,l.prevScrollToRow=e.scrollToRow,l.scrollbarSize=e.getScrollbarSize(),void 0===l.scrollbarSize?(l.scrollbarSizeMeasured=!1,l.scrollbarSize=0):l.scrollbarSizeMeasured=!0,i.instanceProps=l,W({},i,{},n,{},r)}},{key:"_getEstimatedColumnSize",value:function(e){return"number"===typeof e.columnWidth?e.columnWidth:e.estimatedColumnSize}},{key:"_getEstimatedRowSize",value:function(e){return"number"===typeof e.rowHeight?e.rowHeight:e.estimatedRowSize}},{key:"_getScrollToPositionStateUpdate",value:function(e){var t=e.prevState,o=e.scrollLeft,i=e.scrollTop,n={scrollPositionChangeReason:D};return"number"===typeof o&&o>=0&&(n.scrollDirectionHorizontal=o>t.scrollLeft?1:-1,n.scrollLeft=o),"number"===typeof i&&i>=0&&(n.scrollDirectionVertical=i>t.scrollTop?1:-1,n.scrollTop=i),"number"===typeof o&&o>=0&&o!==t.scrollLeft||"number"===typeof i&&i>=0&&i!==t.scrollTop?n:{}}},{key:"_wrapSizeGetter",value:function(e){return"function"===typeof e?e:function(){return e}}},{key:"_getCalculatedScrollLeft",value:function(e,t){var o=e.columnCount,i=e.height,n=e.scrollToAlignment,r=e.scrollToColumn,l=e.width,s=t.scrollLeft,a=t.instanceProps;if(o>0){var c=o-1,d=r<0?c:Math.min(c,r),h=a.rowSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>i?a.scrollbarSize:0;return a.columnSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:l-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollLeftForScrollToColumnStateUpdate",value:function(e,o){var i=o.scrollLeft,n=t._getCalculatedScrollLeft(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:n,scrollTop:-1}):{}}},{key:"_getCalculatedScrollTop",value:function(e,t){var o=e.height,i=e.rowCount,n=e.scrollToAlignment,r=e.scrollToRow,l=e.width,s=t.scrollTop,a=t.instanceProps;if(i>0){var c=i-1,d=r<0?c:Math.min(c,r),h=a.columnSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>l?a.scrollbarSize:0;return a.rowSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:o-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollTopForScrollToRowStateUpdate",value:function(e,o){var i=o.scrollTop,n=t._getCalculatedScrollTop(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:-1,scrollTop:n}):{}}}]),t}(p.PureComponent),(0,f.Z)(M,"propTypes",null),k);(0,f.Z)(j,"defaultProps",{"aria-label":"grid","aria-readonly":!0,autoContainerWidth:!1,autoHeight:!1,autoWidth:!1,cellRangeRenderer:function(e){for(var t=e.cellCache,o=e.cellRenderer,i=e.columnSizeAndPositionManager,n=e.columnStartIndex,r=e.columnStopIndex,l=e.deferredMeasurementCache,s=e.horizontalOffsetAdjustment,a=e.isScrolling,c=e.isScrollingOptOut,d=e.parent,h=e.rowSizeAndPositionManager,u=e.rowStartIndex,f=e.rowStopIndex,p=e.styleCache,g=e.verticalOffsetAdjustment,v=e.visibleColumnIndices,_=e.visibleRowIndices,m=[],S=i.areOffsetsAdjusted()||h.areOffsetsAdjusted(),C=!a&&!S,y=u;y<=f;y++)for(var w=h.getSizeAndPositionOfCell(y),x=n;x<=r;x++){var R=i.getSizeAndPositionOfCell(x),b=x>=v.start&&x<=v.stop&&y>=_.start&&y<=_.stop,T="".concat(y,"-").concat(x),z=void 0;C&&p[T]?z=p[T]:l&&!l.has(y,x)?z={height:"auto",left:0,position:"absolute",top:0,width:"auto"}:(z={height:w.size,left:R.offset+s,position:"absolute",top:w.offset+g,width:R.size},p[T]=z);var I={columnIndex:x,isScrolling:a,isVisible:b,key:T,parent:d,rowIndex:y,style:z},M=void 0;!c&&!a||s||g?M=o(I):(t[T]||(t[T]=o(I)),M=t[T]),null!=M&&!1!==M&&m.push(M)}return m},containerRole:"rowgroup",containerStyle:{},estimatedColumnSize:100,estimatedRowSize:30,getScrollbarSize:I,noContentRenderer:function(){return null},onScroll:function(){},onScrollbarPresenceChange:function(){},onSectionRendered:function(){},overscanColumnCount:0,overscanIndicesGetter:function(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return 1===i?{overscanStartIndex:Math.max(0,n),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r)}},overscanRowCount:10,role:"grid",scrollingResetTimeInterval:150,scrollToAlignment:"auto",scrollToColumn:-1,scrollToRow:-1,style:{},tabIndex:0,isScrollingOptOut:!1}),(0,g.polyfill)(j);const F=j;function N(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return o=Math.max(1,o),1===i?{overscanStartIndex:Math.max(0,n-1),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r+1)}}var U,B;function V(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var q=(B=U=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=t.head||t.getElementsByTagName("head")[0],n=t.createElement("style");n.id="detectElementResize",n.type="text/css",null!=e&&n.setAttribute("nonce",e),n.styleSheet?n.styleSheet.cssText=o:n.appendChild(t.createTextNode(o)),i.appendChild(n)}}(r),t.__resizeLast__={},t.__resizeListeners__=[],(t.__resizeTriggers__=r.createElement("div")).className="resize-triggers";var c='
';if(window.trustedTypes){var d=trustedTypes.createPolicy("react-virtualized-auto-sizer",{createHTML:function(){return c}});t.__resizeTriggers__.innerHTML=d.createHTML("")}else t.__resizeTriggers__.innerHTML=c;t.appendChild(t.__resizeTriggers__),s(t),t.addEventListener("scroll",a,!0),h&&(t.__resizeTriggers__.__animationListener__=function(e){e.animationName==v&&s(t)},t.__resizeTriggers__.addEventListener(h,t.__resizeTriggers__.__animationListener__))}t.__resizeListeners__.push(o)}},removeResizeListener:function(e,t){if(n)e.detachEvent("onresize",t);else if(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),!e.__resizeListeners__.length){e.removeEventListener("scroll",a,!0),e.__resizeTriggers__.__animationListener__&&(e.__resizeTriggers__.removeEventListener(h,e.__resizeTriggers__.__animationListener__),e.__resizeTriggers__.__animationListener__=null);try{e.__resizeTriggers__=!e.removeChild(e.__resizeTriggers__)}catch(o){}}}}}var X,Y;function J(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function $(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),(0,f.Z)(this,"_cellHeightCache",{}),(0,f.Z)(this,"_cellWidthCache",{}),(0,f.Z)(this,"_columnWidthCache",{}),(0,f.Z)(this,"_rowHeightCache",{}),(0,f.Z)(this,"_defaultHeight",void 0),(0,f.Z)(this,"_defaultWidth",void 0),(0,f.Z)(this,"_minHeight",void 0),(0,f.Z)(this,"_minWidth",void 0),(0,f.Z)(this,"_keyMapper",void 0),(0,f.Z)(this,"_hasFixedHeight",void 0),(0,f.Z)(this,"_hasFixedWidth",void 0),(0,f.Z)(this,"_columnCount",0),(0,f.Z)(this,"_rowCount",0),(0,f.Z)(this,"columnWidth",(function(e){var o=e.index,i=t._keyMapper(0,o);return void 0!==t._columnWidthCache[i]?t._columnWidthCache[i]:t._defaultWidth})),(0,f.Z)(this,"rowHeight",(function(e){var o=e.index,i=t._keyMapper(o,0);return void 0!==t._rowHeightCache[i]?t._rowHeightCache[i]:t._defaultHeight}));var n=o.defaultHeight,r=o.defaultWidth,l=o.fixedHeight,s=o.fixedWidth,a=o.keyMapper,c=o.minHeight,d=o.minWidth;this._hasFixedHeight=!0===l,this._hasFixedWidth=!0===s,this._minHeight=c||0,this._minWidth=d||0,this._keyMapper=a||re,this._defaultHeight=Math.max(this._minHeight,"number"===typeof n?n:30),this._defaultWidth=Math.max(this._minWidth,"number"===typeof r?r:100)}return l(e,[{key:"clear",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);delete this._cellHeightCache[o],delete this._cellWidthCache[o],this._updateCachedColumnAndRowSizes(e,t)}},{key:"clearAll",value:function(){this._cellHeightCache={},this._cellWidthCache={},this._columnWidthCache={},this._rowHeightCache={},this._rowCount=0,this._columnCount=0}},{key:"hasFixedHeight",value:function(){return this._hasFixedHeight}},{key:"hasFixedWidth",value:function(){return this._hasFixedWidth}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedHeight)return this._defaultHeight;var o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]?Math.max(this._minHeight,this._cellHeightCache[o]):this._defaultHeight}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedWidth)return this._defaultWidth;var o=this._keyMapper(e,t);return void 0!==this._cellWidthCache[o]?Math.max(this._minWidth,this._cellWidthCache[o]):this._defaultWidth}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]}},{key:"set",value:function(e,t,o,i){var n=this._keyMapper(e,t);t>=this._columnCount&&(this._columnCount=t+1),e>=this._rowCount&&(this._rowCount=e+1),this._cellHeightCache[n]=i,this._cellWidthCache[n]=o,this._updateCachedColumnAndRowSizes(e,t)}},{key:"_updateCachedColumnAndRowSizes",value:function(e,t){if(!this._hasFixedWidth){for(var o=0,i=0;i=0){var d=t.getScrollPositionForCell({align:n,cellIndex:r,height:i,scrollLeft:a,scrollTop:c,width:l});d.scrollLeft===a&&d.scrollTop===c||o._setScrollPosition(d)}})),(0,f.Z)((0,a.Z)(o),"_onScroll",(function(e){if(e.target===o._scrollingContainer){o._enablePointerEventsAfterDelay();var t=o.props,i=t.cellLayoutManager,n=t.height,r=t.isScrollingChange,l=t.width,s=o._scrollbarSize,a=i.getTotalSize(),c=a.height,d=a.width,h=Math.max(0,Math.min(d-l+s,e.target.scrollLeft)),u=Math.max(0,Math.min(c-n+s,e.target.scrollTop));if(o.state.scrollLeft!==h||o.state.scrollTop!==u){var f=e.cancelable?ae:ce;o.state.isScrolling||r(!0),o.setState({isScrolling:!0,scrollLeft:h,scrollPositionChangeReason:f,scrollTop:u})}o._invokeOnScrollMemoizer({scrollLeft:h,scrollTop:u,totalWidth:d,totalHeight:c})}})),o._scrollbarSize=I(),void 0===o._scrollbarSize?(o._scrollbarSizeMeasured=!1,o._scrollbarSize=0):o._scrollbarSizeMeasured=!0,o}return u(t,e),l(t,[{key:"recomputeCellSizesAndPositions",value:function(){this._calculateSizeAndPositionDataOnNextUpdate=!0,this.forceUpdate()}},{key:"componentDidMount",value:function(){var e=this.props,t=e.cellLayoutManager,o=e.scrollLeft,i=e.scrollToCell,n=e.scrollTop;this._scrollbarSizeMeasured||(this._scrollbarSize=I(),this._scrollbarSizeMeasured=!0,this.setState({})),i>=0?this._updateScrollPositionForScrollToCell():(o>=0||n>=0)&&this._setScrollPosition({scrollLeft:o,scrollTop:n}),this._invokeOnSectionRenderedHelper();var r=t.getTotalSize(),l=r.height,s=r.width;this._invokeOnScrollMemoizer({scrollLeft:o||0,scrollTop:n||0,totalHeight:l,totalWidth:s})}},{key:"componentDidUpdate",value:function(e,t){var o=this.props,i=o.height,n=o.scrollToAlignment,r=o.scrollToCell,l=o.width,s=this.state,a=s.scrollLeft,c=s.scrollPositionChangeReason,d=s.scrollTop;c===ce&&(a>=0&&a!==t.scrollLeft&&a!==this._scrollingContainer.scrollLeft&&(this._scrollingContainer.scrollLeft=a),d>=0&&d!==t.scrollTop&&d!==this._scrollingContainer.scrollTop&&(this._scrollingContainer.scrollTop=d)),i===e.height&&n===e.scrollToAlignment&&r===e.scrollToCell&&l===e.width||this._updateScrollPositionForScrollToCell(),this._invokeOnSectionRenderedHelper()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoHeight,o=e.cellCount,i=e.cellLayoutManager,n=e.className,r=e.height,l=e.horizontalOverscanSize,s=e.id,a=e.noContentRenderer,c=e.style,d=e.verticalOverscanSize,h=e.width,u=this.state,f=u.isScrolling,g=u.scrollLeft,v=u.scrollTop;(this._lastRenderedCellCount!==o||this._lastRenderedCellLayoutManager!==i||this._calculateSizeAndPositionDataOnNextUpdate)&&(this._lastRenderedCellCount=o,this._lastRenderedCellLayoutManager=i,this._calculateSizeAndPositionDataOnNextUpdate=!1,i.calculateSizeAndPositionData());var m=i.getTotalSize(),S=m.height,C=m.width,y=Math.max(0,g-l),w=Math.max(0,v-d),x=Math.min(C,g+h+l),R=Math.min(S,v+r+d),b=r>0&&h>0?i.cellRenderers({height:R-w,isScrolling:f,width:x-y,x:y,y:w}):[],T={boxSizing:"border-box",direction:"ltr",height:t?"auto":r,position:"relative",WebkitOverflowScrolling:"touch",width:h,willChange:"transform"},z=S>r?this._scrollbarSize:0,I=C>h?this._scrollbarSize:0;return T.overflowX=C+z<=h?"hidden":"auto",T.overflowY=S+I<=r?"hidden":"auto",p.createElement("div",{ref:this._setScrollingContainerRef,"aria-label":this.props["aria-label"],className:(0,_.Z)("ReactVirtualized__Collection",n),id:s,onScroll:this._onScroll,role:"grid",style:se({},T,{},c),tabIndex:0},o>0&&p.createElement("div",{className:"ReactVirtualized__Collection__innerScrollContainer",style:{height:S,maxHeight:S,maxWidth:C,overflow:"hidden",pointerEvents:f?"none":"",width:C}},b),0===o&&a())}},{key:"_enablePointerEventsAfterDelay",value:function(){var e=this;this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=setTimeout((function(){(0,e.props.isScrollingChange)(!1),e._disablePointerEventsTimeoutId=null,e.setState({isScrolling:!1})}),150)}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalHeight,r=e.totalWidth;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:n,scrollLeft:o,scrollTop:i,scrollWidth:r})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_setScrollPosition",value:function(e){var t=e.scrollLeft,o=e.scrollTop,i={scrollPositionChangeReason:ce};t>=0&&(i.scrollLeft=t),o>=0&&(i.scrollTop=o),(t>=0&&t!==this.state.scrollLeft||o>=0&&o!==this.state.scrollTop)&&this.setState(i)}}],[{key:"getDerivedStateFromProps",value:function(e,t){return 0!==e.cellCount||0===t.scrollLeft&&0===t.scrollTop?e.scrollLeft!==t.scrollLeft||e.scrollTop!==t.scrollTop?{scrollLeft:null!=e.scrollLeft?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop?e.scrollTop:t.scrollTop,scrollPositionChangeReason:ce}:null:{scrollLeft:0,scrollTop:0,scrollPositionChangeReason:ce}}}]),t}(p.PureComponent);(0,f.Z)(de,"defaultProps",{"aria-label":"grid",horizontalOverscanSize:0,noContentRenderer:function(){return null},onScroll:function(){return null},onSectionRendered:function(){return null},scrollToAlignment:"auto",scrollToCell:-1,style:{},verticalOverscanSize:0}),de.propTypes={},(0,g.polyfill)(de);const he=de;var ue=function(){function e(t){var o=t.height,n=t.width,r=t.x,l=t.y;i(this,e),this.height=o,this.width=n,this.x=r,this.y=l,this._indexMap={},this._indices=[]}return l(e,[{key:"addCellIndex",value:function(e){var t=e.index;this._indexMap[t]||(this._indexMap[t]=!0,this._indices.push(t))}},{key:"getCellIndices",value:function(){return this._indices}},{key:"toString",value:function(){return"".concat(this.x,",").concat(this.y," ").concat(this.width,"x").concat(this.height)}}]),e}(),fe=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;i(this,e),this._sectionSize=t,this._cellMetadata=[],this._sections={}}return l(e,[{key:"getCellIndices",value:function(e){var t=e.height,o=e.width,i=e.x,n=e.y,r={};return this.getSections({height:t,width:o,x:i,y:n}).forEach((function(e){return e.getCellIndices().forEach((function(e){r[e]=e}))})),Object.keys(r).map((function(e){return r[e]}))}},{key:"getCellMetadata",value:function(e){var t=e.index;return this._cellMetadata[t]}},{key:"getSections",value:function(e){for(var t=e.height,o=e.width,i=e.x,n=e.y,r=Math.floor(i/this._sectionSize),l=Math.floor((i+o-1)/this._sectionSize),s=Math.floor(n/this._sectionSize),a=Math.floor((n+t-1)/this._sectionSize),c=[],d=r;d<=l;d++)for(var h=s;h<=a;h++){var u="".concat(d,".").concat(h);this._sections[u]||(this._sections[u]=new ue({height:this._sectionSize,width:this._sectionSize,x:d*this._sectionSize,y:h*this._sectionSize})),c.push(this._sections[u])}return c}},{key:"getTotalSectionCount",value:function(){return Object.keys(this._sections).length}},{key:"toString",value:function(){var e=this;return Object.keys(this._sections).map((function(t){return e._sections[t].toString()}))}},{key:"registerCell",value:function(e){var t=e.cellMetadatum,o=e.index;this._cellMetadata[o]=t,this.getSections(t).forEach((function(e){return e.addCellIndex({index:o})}))}}]),e}();function pe(e){var t=e.align,o=void 0===t?"auto":t,i=e.cellOffset,n=e.cellSize,r=e.containerSize,l=e.currentOffset,s=i,a=s-r+n;switch(o){case"start":return s;case"end":return a;case"center":return s-(r-n)/2;default:return Math.max(a,Math.min(s,l))}}var ge=function(e){function t(e,o){var n;return i(this,t),(n=c(this,d(t).call(this,e,o)))._cellMetadata=[],n._lastRenderedCellIndices=[],n._cellCache=[],n._isScrollingChange=n._isScrollingChange.bind((0,a.Z)(n)),n._setCollectionViewRef=n._setCollectionViewRef.bind((0,a.Z)(n)),n}return u(t,e),l(t,[{key:"forceUpdate",value:function(){void 0!==this._collectionView&&this._collectionView.forceUpdate()}},{key:"recomputeCellSizesAndPositions",value:function(){this._cellCache=[],this._collectionView.recomputeCellSizesAndPositions()}},{key:"render",value:function(){var e=(0,v.Z)({},this.props);return p.createElement(he,(0,v.Z)({cellLayoutManager:this,isScrollingChange:this._isScrollingChange,ref:this._setCollectionViewRef},e))}},{key:"calculateSizeAndPositionData",value:function(){var e=this.props,t=function(e){for(var t=e.cellCount,o=e.cellSizeAndPositionGetter,i=e.sectionSize,n=[],r=new fe(i),l=0,s=0,a=0;a=0&&oe.length)&&(t=e.length);for(var o=0,i=new Array(t);oo||n1&&void 0!==arguments[1]?arguments[1]:0,o="function"===typeof e.recomputeGridSize?e.recomputeGridSize:e.recomputeRowHeights;o?o.call(e,t):e.forceUpdate()}(t._registeredChild,t._lastRenderedStartIndex)}))}))}},{key:"_onRowsRendered",value:function(e){var t=e.startIndex,o=e.stopIndex;this._lastRenderedStartIndex=t,this._lastRenderedStopIndex=o,this._doStuff(t,o)}},{key:"_doStuff",value:function(e,t){var o,i=this,n=this.props,r=n.isRowLoaded,l=n.minimumBatchSize,s=n.rowCount,a=n.threshold,c=function(e){for(var t=e.isRowLoaded,o=e.minimumBatchSize,i=e.rowCount,n=e.startIndex,r=e.stopIndex,l=[],s=null,a=null,c=n;c<=r;c++){t({index:c})?null!==a&&(l.push({startIndex:s,stopIndex:a}),s=a=null):(a=c,null===s&&(s=c))}if(null!==a){for(var d=Math.min(Math.max(a,s+o-1),i-1),h=a+1;h<=d&&!t({index:h});h++)a=h;l.push({startIndex:s,stopIndex:a})}if(l.length)for(var u=l[0];u.stopIndex-u.startIndex+10;){var f=u.startIndex-1;if(t({index:f}))break;u.startIndex=f}return l}({isRowLoaded:r,minimumBatchSize:l,rowCount:s,startIndex:Math.max(0,e-a),stopIndex:Math.min(s-1,t+a)}),d=(o=[]).concat.apply(o,me(c.map((function(e){return[e.startIndex,e.stopIndex]}))));this._loadMoreRowsMemoizer({callback:function(){i._loadUnloadedRanges(c)},indices:{squashedUnloadedRanges:d}})}},{key:"_registerChild",value:function(e){this._registeredChild=e}}]),t}(p.PureComponent);(0,f.Z)(Se,"defaultProps",{minimumBatchSize:10,rowCount:0,threshold:15}),Se.propTypes={};var Ce,ye,we=(ye=Ce=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e,columnIndex:0})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"render",value:function(){var e=this.props,t=e.className,o=e.noRowsRenderer,i=e.scrollToIndex,n=e.width,r=(0,_.Z)("ReactVirtualized__List",t);return p.createElement(F,(0,v.Z)({},this.props,{autoContainerWidth:!0,cellRenderer:this._cellRenderer,className:r,columnWidth:n,columnCount:1,noContentRenderer:o,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,scrollToRow:i}))}}]),t}(p.PureComponent),(0,f.Z)(Ce,"propTypes",null),ye);function xe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i,n,r,l,s=[],a=!0,c=!1;try{if(r=(o=o.call(e)).next,0===t){if(Object(o)!==o)return;a=!1}else for(;!(a=(i=r.call(o)).done)&&(s.push(i.value),s.length!==t);a=!0);}catch(e){c=!0,n=e}finally{try{if(!a&&null!=o.return&&(l=o.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(e,t)||_e(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(0,f.Z)(we,"defaultProps",{autoHeight:!1,estimatedRowSize:30,onScroll:function(){},noRowsRenderer:function(){return null},onRowsRendered:function(){},overscanIndicesGetter:N,overscanRowCount:10,scrollToAlignment:"auto",scrollToIndex:-1,style:{}});const Re={ge:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>=0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>=i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},gt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},lt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=t-1;t<=o;){var l=t+o>>>1;n(e[l],i)<0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]>>1;n(e[l],i)<=0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]<=i?(n=r,t=r+1):o=r-1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},eq:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(;t<=o;){var r=t+o>>>1,l=n(e[r],i);if(0===l)return r;l<=0?t=r+1:o=r-1}return-1}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(;t<=o;){var n=t+o>>>1,r=e[n];if(r===i)return n;r<=i?t=n+1:o=n-1}return-1}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)}};function be(e,t,o,i,n){this.mid=e,this.left=t,this.right=o,this.leftPoints=i,this.rightPoints=n,this.count=(t?t.count:0)+(o?o.count:0)+i.length}var Te=be.prototype;function ze(e,t){e.mid=t.mid,e.left=t.left,e.right=t.right,e.leftPoints=t.leftPoints,e.rightPoints=t.rightPoints,e.count=t.count}function Ie(e,t){var o=He(t);e.mid=o.mid,e.left=o.left,e.right=o.right,e.leftPoints=o.leftPoints,e.rightPoints=o.rightPoints,e.count=o.count}function Me(e,t){var o=e.intervals([]);o.push(t),Ie(e,o)}function ke(e,t){var o=e.intervals([]),i=o.indexOf(t);return i<0?0:(o.splice(i,1),Ie(e,o),1)}function Pe(e,t,o){for(var i=0;i=0&&e[i][1]>=t;--i){var n=o(e[i]);if(n)return n}}function Ze(e,t){for(var o=0;o>1],n=[],r=[],l=[];for(o=0;o3*(t+1)?Me(this,e):this.left.insert(e):this.left=He([e]);else if(e[0]>this.mid)this.right?4*(this.right.count+1)>3*(t+1)?Me(this,e):this.right.insert(e):this.right=He([e]);else{var o=Re.ge(this.leftPoints,e,Ge),i=Re.ge(this.rightPoints,e,Ae);this.leftPoints.splice(o,0,e),this.rightPoints.splice(i,0,e)}},Te.remove=function(e){var t=this.count-this.leftPoints;if(e[1]3*(t-1)?ke(this,e):2===(r=this.left.remove(e))?(this.left=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(e[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(t-1)?ke(this,e):2===(r=this.right.remove(e))?(this.right=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(1===this.count)return this.leftPoints[0]===e?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===e){if(this.left&&this.right){for(var o=this,i=this.left;i.right;)o=i,i=i.right;if(o===this)i.right=this.right;else{var n=this.left,r=this.right;o.count-=i.count,o.right=i.left,i.left=n,i.right=r}ze(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?ze(this,this.left):ze(this,this.right);return 1}for(n=Re.ge(this.leftPoints,e,Ge);nthis.mid){var o;if(this.right)if(o=this.right.queryPoint(e,t))return o;return Oe(this.rightPoints,e,t)}return Ze(this.leftPoints,t)},Te.queryInterval=function(e,t,o){var i;if(ethis.mid&&this.right&&(i=this.right.queryInterval(e,t,o)))return i;return tthis.mid?Oe(this.rightPoints,e,o):Ze(this.leftPoints,o)};var Ee=We.prototype;Ee.insert=function(e){this.root?this.root.insert(e):this.root=new be(e[0],null,null,[e],[e])},Ee.remove=function(e){if(this.root){var t=this.root.remove(e);return 2===t&&(this.root=null),0!==t}return!1},Ee.queryPoint=function(e,t){if(this.root)return this.root.queryPoint(e,t)},Ee.queryInterval=function(e,t,o){if(e<=t&&this.root)return this.root.queryInterval(e,t,o)},Object.defineProperty(Ee,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(Ee,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});var De,je,Fe=function(){function e(){var t;i(this,e),(0,f.Z)(this,"_columnSizeMap",{}),(0,f.Z)(this,"_intervalTree",t&&0!==t.length?new We(He(t)):new We(null)),(0,f.Z)(this,"_leftMap",{})}return l(e,[{key:"estimateTotalHeight",value:function(e,t,o){var i=e-this.count;return this.tallestColumnSize+Math.ceil(i/t)*o}},{key:"range",value:function(e,t,o){var i=this;this._intervalTree.queryInterval(e,e+t,(function(e){var t=xe(e,3),n=t[0],r=(t[1],t[2]);return o(r,i._leftMap[r],n)}))}},{key:"setPosition",value:function(e,t,o,i){this._intervalTree.insert([o,o+i,e]),this._leftMap[e]=t;var n=this._columnSizeMap,r=n[t];n[t]=void 0===r?o+i:Math.max(r,o+i)}},{key:"count",get:function(){return this._intervalTree.count}},{key:"shortestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=0===t?i:Math.min(t,i)}return t}},{key:"tallestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=Math.max(t,i)}return t}}]),e}();function Ne(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function Ue(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),(0,f.Z)(this,"_cellMeasurerCache",void 0),(0,f.Z)(this,"_columnIndexOffset",void 0),(0,f.Z)(this,"_rowIndexOffset",void 0),(0,f.Z)(this,"columnWidth",(function(e){var o=e.index;t._cellMeasurerCache.columnWidth({index:o+t._columnIndexOffset})})),(0,f.Z)(this,"rowHeight",(function(e){var o=e.index;t._cellMeasurerCache.rowHeight({index:o+t._rowIndexOffset})}));var n=o.cellMeasurerCache,r=o.columnIndexOffset,l=void 0===r?0:r,s=o.rowIndexOffset,a=void 0===s?0:s;this._cellMeasurerCache=n,this._columnIndexOffset=l,this._rowIndexOffset=a}return l(e,[{key:"clear",value:function(e,t){this._cellMeasurerCache.clear(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"clearAll",value:function(){this._cellMeasurerCache.clearAll()}},{key:"hasFixedHeight",value:function(){return this._cellMeasurerCache.hasFixedHeight()}},{key:"hasFixedWidth",value:function(){return this._cellMeasurerCache.hasFixedWidth()}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getHeight(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getWidth(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.has(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"set",value:function(e,t,o,i){this._cellMeasurerCache.set(e+this._rowIndexOffset,t+this._columnIndexOffset,o,i)}},{key:"defaultHeight",get:function(){return this._cellMeasurerCache.defaultHeight}},{key:"defaultWidth",get:function(){return this._cellMeasurerCache.defaultWidth}}]),e}();function Ke(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function Xe(e){for(var t=1;t0?new qe({cellMeasurerCache:r,columnIndexOffset:0,rowIndexOffset:s}):r,n._deferredMeasurementCacheBottomRightGrid=l>0||s>0?new qe({cellMeasurerCache:r,columnIndexOffset:l,rowIndexOffset:s}):r,n._deferredMeasurementCacheTopRightGrid=l>0?new qe({cellMeasurerCache:r,columnIndexOffset:l,rowIndexOffset:0}):r),n}return u(t,e),l(t,[{key:"forceUpdateGrids",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.forceUpdate(),this._bottomRightGrid&&this._bottomRightGrid.forceUpdate(),this._topLeftGrid&&this._topLeftGrid.forceUpdate(),this._topRightGrid&&this._topRightGrid.forceUpdate()}},{key:"invalidateCellSizeAfterRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,o):o,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,n):n}},{key:"measureAllCells",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.measureAllCells(),this._bottomRightGrid&&this._bottomRightGrid.measureAllCells(),this._topLeftGrid&&this._topLeftGrid.measureAllCells(),this._topRightGrid&&this._topRightGrid.measureAllCells()}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.fixedColumnCount,s=r.fixedRowCount,a=Math.max(0,o-l),c=Math.max(0,n-s);this._bottomLeftGrid&&this._bottomLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:c}),this._bottomRightGrid&&this._bottomRightGrid.recomputeGridSize({columnIndex:a,rowIndex:c}),this._topLeftGrid&&this._topLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:n}),this._topRightGrid&&this._topRightGrid.recomputeGridSize({columnIndex:a,rowIndex:n}),this._leftGridWidth=null,this._topGridHeight=null,this._maybeCalculateCachedStyles(!0)}},{key:"componentDidMount",value:function(){var e=this.props,t=e.scrollLeft,o=e.scrollTop;if(t>0||o>0){var i={};t>0&&(i.scrollLeft=t),o>0&&(i.scrollTop=o),this.setState(i)}this._handleInvalidatedGridSize()}},{key:"componentDidUpdate",value:function(){this._handleInvalidatedGridSize()}},{key:"render",value:function(){var e=this.props,t=e.onScroll,o=e.onSectionRendered,i=(e.onScrollbarPresenceChange,e.scrollLeft,e.scrollToColumn),n=(e.scrollTop,e.scrollToRow),r=S(e,["onScroll","onSectionRendered","onScrollbarPresenceChange","scrollLeft","scrollToColumn","scrollTop","scrollToRow"]);if(this._prepareForRender(),0===this.props.width||0===this.props.height)return null;var l=this.state,s=l.scrollLeft,a=l.scrollTop;return p.createElement("div",{style:this._containerOuterStyle},p.createElement("div",{style:this._containerTopStyle},this._renderTopLeftGrid(r),this._renderTopRightGrid(Xe({},r,{onScroll:t,scrollLeft:s}))),p.createElement("div",{style:this._containerBottomStyle},this._renderBottomLeftGrid(Xe({},r,{onScroll:t,scrollTop:a})),this._renderBottomRightGrid(Xe({},r,{onScroll:t,onSectionRendered:o,scrollLeft:s,scrollToColumn:i,scrollToRow:n,scrollTop:a}))))}},{key:"_getBottomGridHeight",value:function(e){return e.height-this._getTopGridHeight(e)}},{key:"_getLeftGridWidth",value:function(e){var t=e.fixedColumnCount,o=e.columnWidth;if(null==this._leftGridWidth)if("function"===typeof o){for(var i=0,n=0;n=0?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop&&e.scrollTop>=0?e.scrollTop:t.scrollTop}:null}}]),t}(p.PureComponent);(0,f.Z)(Ye,"defaultProps",{classNameBottomLeftGrid:"",classNameBottomRightGrid:"",classNameTopLeftGrid:"",classNameTopRightGrid:"",enableFixedColumnScroll:!1,enableFixedRowScroll:!1,fixedColumnCount:0,fixedRowCount:0,scrollToColumn:-1,scrollToRow:-1,style:{},styleBottomLeftGrid:{},styleBottomRightGrid:{},styleTopLeftGrid:{},styleTopRightGrid:{},hideTopRightGridScrollbar:!1,hideBottomLeftGridScrollbar:!1}),Ye.propTypes={},(0,g.polyfill)(Ye);(function(e){function t(e,o){var n;return i(this,t),(n=c(this,d(t).call(this,e,o))).state={clientHeight:0,clientWidth:0,scrollHeight:0,scrollLeft:0,scrollTop:0,scrollWidth:0},n._onScroll=n._onScroll.bind((0,a.Z)(n)),n}return u(t,e),l(t,[{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.clientHeight,i=t.clientWidth,n=t.scrollHeight,r=t.scrollLeft,l=t.scrollTop,s=t.scrollWidth;return e({clientHeight:o,clientWidth:i,onScroll:this._onScroll,scrollHeight:n,scrollLeft:r,scrollTop:l,scrollWidth:s})}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.clientWidth,i=e.scrollHeight,n=e.scrollLeft,r=e.scrollTop,l=e.scrollWidth;this.setState({clientHeight:t,clientWidth:o,scrollHeight:i,scrollLeft:n,scrollTop:r,scrollWidth:l})}}]),t}(p.PureComponent)).propTypes={};function Je(e){var t=e.className,o=e.columns,i=e.style;return p.createElement("div",{className:t,role:"row",style:i},o)}Je.propTypes=null;const $e={ASC:"ASC",DESC:"DESC"};function Qe(e){var t=e.sortDirection,o=(0,_.Z)("ReactVirtualized__Table__sortableHeaderIcon",{"ReactVirtualized__Table__sortableHeaderIcon--ASC":t===$e.ASC,"ReactVirtualized__Table__sortableHeaderIcon--DESC":t===$e.DESC});return p.createElement("svg",{className:o,width:18,height:18,viewBox:"0 0 24 24"},t===$e.ASC?p.createElement("path",{d:"M7 14l5-5 5 5z"}):p.createElement("path",{d:"M7 10l5 5 5-5z"}),p.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}function et(e){var t=e.dataKey,o=e.label,i=e.sortBy,n=e.sortDirection,r=i===t,l=[p.createElement("span",{className:"ReactVirtualized__Table__headerTruncatedText",key:"label",title:"string"===typeof o?o:null},o)];return r&&l.push(p.createElement(Qe,{key:"SortIndicator",sortDirection:n})),l}function tt(e){var t=e.className,o=e.columns,i=e.index,n=e.key,r=e.onRowClick,l=e.onRowDoubleClick,s=e.onRowMouseOut,a=e.onRowMouseOver,c=e.onRowRightClick,d=e.rowData,h=e.style,u={"aria-rowindex":i+1};return(r||l||s||a||c)&&(u["aria-label"]="row",u.tabIndex=0,r&&(u.onClick=function(e){return r({event:e,index:i,rowData:d})}),l&&(u.onDoubleClick=function(e){return l({event:e,index:i,rowData:d})}),s&&(u.onMouseOut=function(e){return s({event:e,index:i,rowData:d})}),a&&(u.onMouseOver=function(e){return a({event:e,index:i,rowData:d})}),c&&(u.onContextMenu=function(e){return c({event:e,index:i,rowData:d})})),p.createElement("div",(0,v.Z)({},u,{className:t,key:n,role:"row",style:h}),o)}Qe.propTypes={},et.propTypes=null,tt.propTypes=null;var ot=function(e){function t(){return i(this,t),c(this,d(t).apply(this,arguments))}return u(t,e),t}(p.Component);function it(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function nt(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"getScrollbarWidth",value:function(){if(this.Grid){var e=(0,oe.findDOMNode)(this.Grid),t=e.clientWidth||0;return(e.offsetWidth||0)-t}return 0}},{key:"componentDidMount",value:function(){this._setScrollbarWidth()}},{key:"componentDidUpdate",value:function(){this._setScrollbarWidth()}},{key:"render",value:function(){var e=this,t=this.props,o=t.children,i=t.className,n=t.disableHeader,r=t.gridClassName,l=t.gridStyle,s=t.headerHeight,a=t.headerRowRenderer,c=t.height,d=t.id,h=t.noRowsRenderer,u=t.rowClassName,f=t.rowStyle,g=t.scrollToIndex,m=t.style,S=t.width,C=this.state.scrollbarWidth,y=n?c:c-s,w="function"===typeof u?u({index:-1}):u,x="function"===typeof f?f({index:-1}):f;return this._cachedColumnStyles=[],p.Children.toArray(o).forEach((function(t,o){var i=e._getFlexStyleForColumn(t,t.props.style);e._cachedColumnStyles[o]=nt({overflow:"hidden"},i)})),p.createElement("div",{"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-colcount":p.Children.toArray(o).length,"aria-rowcount":this.props.rowCount,className:(0,_.Z)("ReactVirtualized__Table",i),id:d,role:"grid",style:m},!n&&a({className:(0,_.Z)("ReactVirtualized__Table__headerRow",w),columns:this._getHeaderColumns(),style:nt({height:s,overflow:"hidden",paddingRight:C,width:S},x)}),p.createElement(F,(0,v.Z)({},this.props,{"aria-readonly":null,autoContainerWidth:!0,className:(0,_.Z)("ReactVirtualized__Table__Grid",r),cellRenderer:this._createRow,columnWidth:S,columnCount:1,height:y,id:void 0,noContentRenderer:h,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,role:"rowgroup",scrollbarWidth:C,scrollToRow:g,style:nt({},l,{overflowX:"hidden"})})))}},{key:"_createColumn",value:function(e){var t=e.column,o=e.columnIndex,i=e.isScrolling,n=e.parent,r=e.rowData,l=e.rowIndex,s=this.props.onColumnClick,a=t.props,c=a.cellDataGetter,d=a.cellRenderer,h=a.className,u=a.columnData,f=a.dataKey,g=a.id,v=d({cellData:c({columnData:u,dataKey:f,rowData:r}),columnData:u,columnIndex:o,dataKey:f,isScrolling:i,parent:n,rowData:r,rowIndex:l}),m=this._cachedColumnStyles[o],S="string"===typeof v?v:null;return p.createElement("div",{"aria-colindex":o+1,"aria-describedby":g,className:(0,_.Z)("ReactVirtualized__Table__rowColumn",h),key:"Row"+l+"-Col"+o,onClick:function(e){s&&s({columnData:u,dataKey:f,event:e})},role:"gridcell",style:m,title:S},v)}},{key:"_createHeader",value:function(e){var t,o,i,n,r,l=e.column,s=e.index,a=this.props,c=a.headerClassName,d=a.headerStyle,h=a.onHeaderClick,u=a.sort,f=a.sortBy,g=a.sortDirection,v=l.props,m=v.columnData,S=v.dataKey,C=v.defaultSortDirection,y=v.disableSort,w=v.headerRenderer,x=v.id,R=v.label,b=!y&&u,T=(0,_.Z)("ReactVirtualized__Table__headerColumn",c,l.props.headerClassName,{ReactVirtualized__Table__sortableHeaderColumn:b}),z=this._getFlexStyleForColumn(l,nt({},d,{},l.props.headerStyle)),I=w({columnData:m,dataKey:S,disableSort:y,label:R,sortBy:f,sortDirection:g});if(b||h){var M=f!==S?C:g===$e.DESC?$e.ASC:$e.DESC,k=function(e){b&&u({defaultSortDirection:C,event:e,sortBy:S,sortDirection:M}),h&&h({columnData:m,dataKey:S,event:e})};r=l.props["aria-label"]||R||S,n="none",i=0,t=k,o=function(e){"Enter"!==e.key&&" "!==e.key||k(e)}}return f===S&&(n=g===$e.ASC?"ascending":"descending"),p.createElement("div",{"aria-label":r,"aria-sort":n,className:T,id:x,key:"Header-Col"+s,onClick:t,onKeyDown:o,role:"columnheader",style:z,tabIndex:i},I)}},{key:"_createRow",value:function(e){var t=this,o=e.rowIndex,i=e.isScrolling,n=e.key,r=e.parent,l=e.style,s=this.props,a=s.children,c=s.onRowClick,d=s.onRowDoubleClick,h=s.onRowRightClick,u=s.onRowMouseOver,f=s.onRowMouseOut,g=s.rowClassName,v=s.rowGetter,m=s.rowRenderer,S=s.rowStyle,C=this.state.scrollbarWidth,y="function"===typeof g?g({index:o}):g,w="function"===typeof S?S({index:o}):S,x=v({index:o}),R=p.Children.toArray(a).map((function(e,n){return t._createColumn({column:e,columnIndex:n,isScrolling:i,parent:r,rowData:x,rowIndex:o,scrollbarWidth:C})})),b=(0,_.Z)("ReactVirtualized__Table__row",y),T=nt({},l,{height:this._getRowHeight(o),overflow:"hidden",paddingRight:C},w);return m({className:b,columns:R,index:o,isScrolling:i,key:n,onRowClick:c,onRowDoubleClick:d,onRowRightClick:h,onRowMouseOver:u,onRowMouseOut:f,rowData:x,style:T})}},{key:"_getFlexStyleForColumn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o="".concat(e.props.flexGrow," ").concat(e.props.flexShrink," ").concat(e.props.width,"px"),i=nt({},t,{flex:o,msFlex:o,WebkitFlex:o});return e.props.maxWidth&&(i.maxWidth=e.props.maxWidth),e.props.minWidth&&(i.minWidth=e.props.minWidth),i}},{key:"_getHeaderColumns",value:function(){var e=this,t=this.props,o=t.children;return(t.disableHeader?[]:p.Children.toArray(o)).map((function(t,o){return e._createHeader({column:t,index:o})}))}},{key:"_getRowHeight",value:function(e){var t=this.props.rowHeight;return"function"===typeof t?t({index:e}):t}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.scrollHeight,i=e.scrollTop;(0,this.props.onScroll)({clientHeight:t,scrollHeight:o,scrollTop:i})}},{key:"_onSectionRendered",value:function(e){var t=e.rowOverscanStartIndex,o=e.rowOverscanStopIndex,i=e.rowStartIndex,n=e.rowStopIndex;(0,this.props.onRowsRendered)({overscanStartIndex:t,overscanStopIndex:o,startIndex:i,stopIndex:n})}},{key:"_setRef",value:function(e){this.Grid=e}},{key:"_setScrollbarWidth",value:function(){var e=this.getScrollbarWidth();this.setState({scrollbarWidth:e})}}]),t}(p.PureComponent);(0,f.Z)(rt,"defaultProps",{disableHeader:!1,estimatedRowSize:30,headerHeight:0,headerStyle:{},noRowsRenderer:function(){return null},onRowsRendered:function(){return null},onScroll:function(){return null},overscanIndicesGetter:N,overscanRowCount:10,rowRenderer:tt,headerRowRenderer:Je,rowStyle:{},scrollToAlignment:"auto",scrollToIndex:-1,style:{}}),rt.propTypes={};var lt=[],st=null,at=null;function ct(){at&&(at=null,document.body&&null!=st&&(document.body.style.pointerEvents=st),st=null)}function dt(){ct(),lt.forEach((function(e){return e.__resetIsScrolling()}))}function ht(e){e.currentTarget===window&&null==st&&document.body&&(st=document.body.style.pointerEvents,document.body.style.pointerEvents="none"),function(){at&&G(at);var e=0;lt.forEach((function(t){e=Math.max(e,t.props.scrollingResetTimeInterval)})),at=A(dt,e)}(),lt.forEach((function(t){t.props.scrollElement===e.currentTarget&&t.__handleWindowScrollEvent()}))}function ut(e,t){lt.some((function(e){return e.props.scrollElement===t}))||t.addEventListener("scroll",ht),lt.push(e)}function ft(e,t){(lt=lt.filter((function(t){return t!==e}))).length||(t.removeEventListener("scroll",ht),at&&(G(at),ct()))}var pt,gt,vt=function(e){return e===window},_t=function(e){return e.getBoundingClientRect()};function mt(e,t){if(e){if(vt(e)){var o=window,i=o.innerHeight,n=o.innerWidth;return{height:"number"===typeof i?i:0,width:"number"===typeof n?n:0}}return _t(e)}return{height:t.serverHeight,width:t.serverWidth}}function St(e){return vt(e)&&document.documentElement?{top:"scrollY"in window?window.scrollY:document.documentElement.scrollTop,left:"scrollX"in window?window.scrollX:document.documentElement.scrollLeft}:{top:e.scrollTop,left:e.scrollLeft}}function Ct(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var yt=function(){return"undefined"!==typeof window?window:void 0},wt=(gt=pt=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l0&&void 0!==arguments[0]?arguments[0]:this.props.scrollElement,t=this.props.onResize,o=this.state,i=o.height,n=o.width,r=this._child||oe.findDOMNode(this);if(r instanceof Element&&e){var l=function(e,t){if(vt(t)&&document.documentElement){var o=document.documentElement,i=_t(e),n=_t(o);return{top:i.top-n.top,left:i.left-n.left}}var r=St(t),l=_t(e),s=_t(t);return{top:l.top+r.top-s.top,left:l.left+r.left-s.left}}(r,e);this._positionFromTop=l.top,this._positionFromLeft=l.left}var s=mt(e,this.props);i===s.height&&n===s.width||(this.setState({height:s.height,width:s.width}),t({height:s.height,width:s.width}))}},{key:"componentDidMount",value:function(){var e=this.props.scrollElement;this._detectElementResize=K(),this.updatePosition(e),e&&(ut(this,e),this._registerResizeListener(e)),this._isMounted=!0}},{key:"componentDidUpdate",value:function(e,t){var o=this.props.scrollElement,i=e.scrollElement;i!==o&&null!=i&&null!=o&&(this.updatePosition(o),ft(this,i),ut(this,o),this._unregisterResizeListener(i),this._registerResizeListener(o))}},{key:"componentWillUnmount",value:function(){var e=this.props.scrollElement;e&&(ft(this,e),this._unregisterResizeListener(e)),this._isMounted=!1}},{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.isScrolling,i=t.scrollTop,n=t.scrollLeft,r=t.height,l=t.width;return e({onChildScroll:this._onChildScroll,registerChild:this._registerChild,height:r,isScrolling:o,scrollLeft:n,scrollTop:i,width:l})}}]),t}(p.PureComponent),(0,f.Z)(pt,"propTypes",null),gt);(0,f.Z)(wt,"defaultProps",{onResize:function(){},onScroll:function(){},scrollingResetTimeInterval:150,scrollElement:yt(),serverHeight:0,serverWidth:0})},7326:(e,t,o)=>{function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}o.d(t,{Z:()=>i})},7462:(e,t,o)=>{function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;ti})},9611:(e,t,o)=>{function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}o.d(t,{Z:()=>i})}}]); +//# sourceMappingURL=463.39c0be1b.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/463.39c0be1b.chunk.js.map b/web-app/build/static/js/463.39c0be1b.chunk.js.map new file mode 100644 index 00000000000..7ee1d1cef91 --- /dev/null +++ b/web-app/build/static/js/463.39c0be1b.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/463.39c0be1b.chunk.js","mappings":"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","sources":["../node_modules/clsx/dist/clsx.m.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/react-virtualized/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-virtualized/dist/es/Grid/types.js","../node_modules/react-virtualized/dist/es/Grid/utils/CellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/Grid/utils/maxElementSize.js","../node_modules/react-virtualized/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/utils/createCallbackMemoizer.js","../node_modules/react-virtualized/dist/es/Grid/utils/updateScrollIndexHelper.js","../node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/dom-helpers/esm/scrollbarSize.js","../node_modules/react-virtualized/dist/es/utils/animationFrame.js","../node_modules/react-virtualized/dist/es/Grid/Grid.js","../node_modules/react-virtualized/dist/es/utils/requestAnimationTimeout.js","../node_modules/react-virtualized/dist/es/Grid/defaultOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/Grid/defaultCellRangeRenderer.js","../node_modules/react-virtualized/dist/es/Grid/accessibilityOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/types.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/ArrowKeyStepper.js","../node_modules/react-virtualized/dist/es/vendor/detectElementResize.js","../node_modules/react-virtualized/dist/es/AutoSizer/AutoSizer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurerCache.js","../node_modules/react-virtualized/dist/es/Collection/CollectionView.js","../node_modules/react-virtualized/dist/es/Collection/types.js","../node_modules/react-virtualized/dist/es/Collection/Section.js","../node_modules/react-virtualized/dist/es/Collection/SectionManager.js","../node_modules/react-virtualized/dist/es/utils/getUpdatedOffsetForIndex.js","../node_modules/react-virtualized/dist/es/Collection/Collection.js","../node_modules/react-virtualized/dist/es/Collection/utils/calculateSizeAndPositionData.js","../node_modules/react-virtualized/dist/es/ColumnSizer/ColumnSizer.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/InfiniteLoader.js","../node_modules/react-virtualized/dist/es/List/types.js","../node_modules/react-virtualized/dist/es/List/List.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/react-virtualized/dist/es/vendor/binarySearchBounds.js","../node_modules/react-virtualized/dist/es/vendor/intervalTree.js","../node_modules/react-virtualized/dist/es/Masonry/PositionCache.js","../node_modules/react-virtualized/dist/es/Masonry/Masonry.js","../node_modules/react-virtualized/dist/es/MultiGrid/CellMeasurerCacheDecorator.js","../node_modules/react-virtualized/dist/es/MultiGrid/MultiGrid.js","../node_modules/react-virtualized/dist/es/ScrollSync/ScrollSync.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/SortDirection.js","../node_modules/react-virtualized/dist/es/Table/SortIndicator.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRenderer.js","../node_modules/react-virtualized/dist/es/Table/defaultRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/Column.js","../node_modules/react-virtualized/dist/es/Table/Table.js","../node_modules/react-virtualized/dist/es/Table/defaultCellDataGetter.js","../node_modules/react-virtualized/dist/es/Table/defaultCellRenderer.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/onScroll.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/dimensions.js","../node_modules/react-virtualized/dist/es/WindowScroller/WindowScroller.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t