From 0ac406116a4b27c0a139d38e8b365f5e0382b5f2 Mon Sep 17 00:00:00 2001 From: Tanmay Jain Date: Tue, 28 Mar 2023 13:52:08 +0530 Subject: [PATCH] [KO-111] akoctl command line tool for aerospike-kubernetes-operator --- .github/CODEOWNERS | 3 + .github/workflows/golangci-lint.yaml | 27 + .golangci.yml | 64 + .idea/.gitignore | 8 + LICENSE | 190 + Makefile | 31 + README.md | 78 +- cmd/collectinfo.go | 58 + cmd/root.go | 37 + .../asdb.aerospike.com_aerospikeclusters.yaml | 11792 ++++++++++++++++ go.mod | 73 + go.sum | 342 + main.go | 22 + pkg/collectinfo/collectinfo_test.go | 212 + pkg/collectinfo/collectinfo_util.go | 478 + pkg/collectinfo/pkg_suite_test.go | 102 + pkg/collectinfo/resources.go | 43 + 17 files changed, 13558 insertions(+), 2 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/golangci-lint.yaml create mode 100644 .golangci.yml create mode 100644 .idea/.gitignore create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 cmd/collectinfo.go create mode 100644 cmd/root.go create mode 100644 config/crd/bases/asdb.aerospike.com_aerospikeclusters.yaml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 pkg/collectinfo/collectinfo_test.go create mode 100644 pkg/collectinfo/collectinfo_util.go create mode 100644 pkg/collectinfo/pkg_suite_test.go create mode 100644 pkg/collectinfo/resources.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..8b62e04 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# Default reviewers/code-owners for all the changes: + +* @sud82 @tanmayja @abhishekdwivedi3060 diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml new file mode 100644 index 0000000..4e0044f --- /dev/null +++ b/.github/workflows/golangci-lint.yaml @@ -0,0 +1,27 @@ +name: golangci-lint +on: + push: + tags: + - v* + branches: + - main + pull_request: + branches: + - main + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - name: Setup-go + uses: actions/setup-go@v3 + with: + go-version: 1.19 + - name: Checkout sources + uses: actions/checkout@v3 + - name: Run golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + version: v1.50 + args: --timeout=5m diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..9cf75f7 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,64 @@ + +linters-settings: + goconst: + min-len: 2 + min-occurrences: 3 + gocritic: + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + govet: + check-shadowing: true + enable: + - fieldalignment + nolintlint: + require-explanation: true + require-specific: true + +linters: + disable-all: true + enable: + - bodyclose + - unused + - depguard + - dogsled + - dupl + - errcheck + - exportloopref + - exhaustive + - goconst + - gocritic + - gofmt + - goimports + - gocyclo + - gosec + - gosimple + - govet + - ineffassign + - misspell + - nolintlint + - nakedret + - prealloc # pre-allocate slices with define size if the slice size is known in advance + - predeclared + - revive + - staticcheck + - stylecheck + - thelper + - tparallel + - typecheck + - unconvert + - unparam + - whitespace + - lll + - wsl # White space linter + +run: + issues-exit-code: 1 + go: '1.18' +# skip-dirs: +# - sample +# skip-files: +# - sample diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..484c594 --- /dev/null +++ b/LICENSE @@ -0,0 +1,190 @@ + 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 2021 Aerospike, Inc. + + 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. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a4218c7 --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +# # /bin/sh does not support source command needed in make test +#SHELL := /bin/bash + +LOCALBIN ?= $(shell pwd)/bin +$(LOCALBIN): + mkdir -p $(LOCALBIN) + +GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint +GOLANGCI_LINT_VERSION ?= v1.50.1 +ENVTEST_K8S_VERSION = 1.26.1 + +.PHONY: golanci-lint +golanci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary. +$(GOLANGCI_LINT): $(LOCALBIN) + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(LOCALBIN) $(GOLANGCI_LINT_VERSION) + +go-lint: golanci-lint ## Run golangci-lint against code. + $(GOLANGCI_LINT) run + +test: envtest ## Run tests. + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -i --bin-dir $(LOCALBIN) -p path)" go run github.com/onsi/ginkgo/v2/ginkgo -r pkg/ -coverprofile cover.out -progress -v -timeout=12h0m0s -focus=${FOCUS} --junit-report="junit.xml" -- ${ARGS} + +ENVTEST ?= $(LOCALBIN)/setup-envtest + +.PHONY: envtest +envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. +$(ENVTEST): $(LOCALBIN) + GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest + +build: + go build -o bin/akoctl main.go \ No newline at end of file diff --git a/README.md b/README.md index 21f2d84..21a9fd4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,76 @@ -# aerospike-kubernetes-operator-ctl -K8s Collect Info - ish +# Aerospike-kubernetes-operator-ctl + +This is a command line tool for Aerospike kubernetes operator. + +## Aerospike Kubernetes Operator Log Collector + +### Overview + +collectinfo command collects all the required info from kubernetes cluster, which are available at the time of command being executed. + +There are certain flags associated with command: +* **all-namespaces** - (shorthand -A, type bool) Collect info from all namespaces present in cluster. +* **namespaces** - (shorthand -n, type string) Comma separated list of namespaces from which data needs to be collected. +* **kubeconfig** - (type string) Absolute path to the kubeconfig file. +* **path** - (type string) Absolute path to save output tar file. +* **cluster-scope** - (type bool) Permission to collect cluster scoped objects info. Default true. + +### Permission required +* Current user should have the list and get permission for all the objects collected by the command. +* If **cluster-scope** flag is set, along with permissions mentioned above, user should have list and get permission for cluster-scoped resources like(nodes and storageclasses). + +### Building and quick start + +#### Building akoctl binary +```sh +make build +``` + +#### Collect cluster info +```sh + ./bin/akoctl collectinfo -n aerospike,olm --path ~/abc/ --cluster-scope=false +``` + + +### Data Collected + +This command collects the following data from the specified namespaces: + +* Pods, StatefulSets, PersistentVolumeClaims, AerospikeCluster objects . +* Container logs. +* Event logs. + +Additionally, the following cluster-wide data points are collected: +* Storage class objects. +* Configurations of all nodes in the kubernetes cluster. + +### Result Format + +* This will create a tar file with timestamp called "scraperlogs-" which contains all the collected info from the cluster. +* Directory structure will look like this. +```shell +akoctl_collectinfo +├── akoctl.log +├── k8s_cluster +│   ├── nodes +│   │   ├── .yaml +│   │   └── .yaml +│   └── storageclasses +│   ├── .yaml +└── k8s_namespaces + └── aerospike + ├── aerospikeclusters + ├── events + ├── persistentvolumeclaims + │   ├── .yaml + ├── pods + │   ├── + │   │   ├── .yaml + │   │   └── logs + │   │   ├── previous + │   │   │   └── .log + │   │   └── .log + └── statefulsets + │   ├── .yaml + +``` \ No newline at end of file diff --git a/cmd/collectinfo.go b/cmd/collectinfo.go new file mode 100644 index 0000000..01fc481 --- /dev/null +++ b/cmd/collectinfo.go @@ -0,0 +1,58 @@ +/* +Copyright 2023 The aerospike-operator Authors. +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. +*/ + +package cmd + +import ( + "github.com/spf13/cobra" + + "github.com/aerospike/aerospike-kubernetes-operator-ctl/pkg/collectinfo" +) + +var ( + kubeconfig string + namespaces []string + path string + allNamespaces bool + clusterScope bool +) + +// collectinfoCmd represents the collectinfo command +var collectinfoCmd = &cobra.Command{ + Use: "collectinfo", + Short: "collectinfo command collects all the required info from kubernetes cluster", + Long: `This command collects the following data from the given namespaces: +* pods, statefulsets, persistentvolumeclaims, aerospikeclusters, nodes, storageclasses objects . +* containers logs. +* events logs.`, + RunE: func(cmd *cobra.Command, args []string) error { + return collectinfo.RunCollectInfo(namespaces, path, allNamespaces, clusterScope) + }, +} + +func init() { + rootCmd.AddCommand(collectinfoCmd) + + collectinfoCmd.Flags().StringVar(&kubeconfig, "kubeconfig", "", + "Absolute path to the kubeconfig file") + collectinfoCmd.Flags().StringSliceVarP(&namespaces, "namespaces", "n", namespaces, + "Namespaces for which logs to be collected") + collectinfoCmd.Flags().StringVar(&path, "path", "", + "Absolute path where generated tar file will be saved") + collectinfoCmd.Flags().BoolVarP(&allNamespaces, "all-namespaces", "A", false, + "Collect info from all namespaces") + collectinfoCmd.Flags().BoolVar(&clusterScope, "cluster-scope", true, + "Permission to collect cluster scoped objects info") +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..1645cae --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,37 @@ +/* +Copyright 2023 The aerospike-operator Authors. +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. +*/ + +package cmd + +import ( + "os" + + "github.com/spf13/cobra" +) + +var rootCmd = &cobra.Command{ + Use: "akoctl", + Short: "A command line tool for Aerospike Kubernetes Operator", + Long: `A CLI which is used to interact with +Aerospike Kubernetes Operator cluster. For example: +akoctl collectinfo --namespaces aerospike,olm`, +} + +func Execute() { + err := rootCmd.Execute() + if err != nil { + os.Exit(1) + } +} diff --git a/config/crd/bases/asdb.aerospike.com_aerospikeclusters.yaml b/config/crd/bases/asdb.aerospike.com_aerospikeclusters.yaml new file mode 100644 index 0000000..c43718b --- /dev/null +++ b/config/crd/bases/asdb.aerospike.com_aerospikeclusters.yaml @@ -0,0 +1,11792 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.1 + creationTimestamp: null + name: aerospikeclusters.asdb.aerospike.com +spec: + group: asdb.aerospike.com + names: + kind: AerospikeCluster + listKind: AerospikeClusterList + plural: aerospikeclusters + singular: aerospikecluster + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: AerospikeCluster is the schema for the AerospikeCluster API + properties: + apiVersion: + description: APIVersion defines the versioned schema of this representation + of an o + type: string + kind: + description: Kind is a string value representing the REST resource this + object repr + type: string + metadata: + type: object + spec: + description: AerospikeClusterSpec defines the desired state of AerospikeCluster + properties: + aerospikeAccessControl: + description: Has the Aerospike roles and users definitions. + properties: + adminPolicy: + description: AerospikeClientAdminPolicy specify the aerospike + client admin policy f + properties: + timeout: + description: Timeout for admin client policy in milliseconds. + type: integer + required: + - timeout + type: object + roles: + description: Roles is the set of roles to allow on the Aerospike + cluster. + items: + description: AerospikeRoleSpec specifies an Aerospike database + role and its associa + properties: + name: + description: Name of this role. + type: string + privileges: + description: Privileges granted to this role. + items: + type: string + type: array + x-kubernetes-list-type: set + readQuota: + description: ReadQuota specifies permitted rate of read + records for current role (t + format: int32 + type: integer + whitelist: + description: Whitelist of host address allowed for this + role. + items: + type: string + type: array + x-kubernetes-list-type: set + writeQuota: + description: 'WriteQuota specifies permitted rate of write + records for current role ' + format: int32 + type: integer + required: + - name + - privileges + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + users: + description: Users is the set of users to allow on the Aerospike + cluster. + items: + description: AerospikeUserSpec specifies an Aerospike database + user, the secret nam + properties: + name: + description: Name is the user's username. + type: string + roles: + description: Roles is the list of roles granted to the user. + items: + type: string + type: array + x-kubernetes-list-type: set + secretName: + description: SecretName has secret info created by user. + type: string + required: + - name + - roles + - secretName + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - users + type: object + aerospikeConfig: + description: Sets config in aerospike.conf file. Other configs are + taken as default + type: object + x-kubernetes-preserve-unknown-fields: true + aerospikeNetworkPolicy: + description: AerospikeNetworkPolicy specifies how clients and tools + access the Aero + properties: + access: + description: 'AccessType is the type of network address to use + for Aerospike access ' + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + alternateAccess: + description: AlternateAccessType is the type of network address + to use for Aerospik + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + tlsAccess: + description: 'TLSAccessType is the type of network address to + use for Aerospike TLS ' + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + tlsAlternateAccess: + description: TLSAlternateAccessType is the type of network address + to use for Aeros + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + type: object + image: + description: Aerospike server image + type: string + operatorClientCert: + description: Certificates to connect to Aerospike. + properties: + certPathInOperator: + description: AerospikeCertPathInOperatorSource contain configuration + for certificat + properties: + caCertsPath: + type: string + clientCertPath: + type: string + clientKeyPath: + type: string + type: object + secretCertSource: + properties: + caCertsFilename: + type: string + clientCertFilename: + type: string + clientKeyFilename: + type: string + secretName: + type: string + secretNamespace: + type: string + required: + - secretName + type: object + tlsClientName: + description: 'If specified, this name will be added to tls-authenticate-client + list ' + type: string + type: object + podSpec: + description: Specify additional configuration for the Aerospike pods + properties: + aerospikeContainer: + description: AerospikeContainerSpec configures the aerospike-server + container creat + properties: + resources: + description: Define resources requests and limits for Aerospike + Server Container. + 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 + description: Limits describes the maximum amount of compute + resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: SecurityContext that will be added to aerospike-server + container creat + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of + the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + type: object + aerospikeInitContainer: + description: AerospikeInitContainerSpec configures the aerospike-init + container cre + properties: + imageRegistry: + description: ImageRegistry is the name of image registry for + aerospike-init contain + type: string + resources: + description: Define resources requests and limits for Aerospike + init Container. + 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 + description: Limits describes the maximum amount of compute + resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: SecurityContext that will be added to aerospike-init + container created + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of + the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + type: object + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: An empty preferred scheduling term matches + all objects with implicit w + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching the + corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at sc + items: + description: Defines a set of pods (namely those matching + the labelSelector relativ + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching the + corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements specified + by this field are not met ' + items: + description: Defines a set of pods (namely those matching + the labelSelector relativ + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + dnsConfig: + description: DNSConfig defines the DNS parameters of a pod in + addition to those gen + properties: + nameservers: + description: A list of DNS name server IP addresses. + items: + type: string + type: array + options: + description: A list of DNS resolver options. + items: + description: PodDNSConfigOption defines DNS resolver options + of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name lookup. + items: + type: string + type: array + type: object + dnsPolicy: + description: DnsPolicy same as https://kubernetes. + type: string + effectiveDNSPolicy: + description: Effective value of the DNSPolicy + type: string + hostNetwork: + description: HostNetwork enables host networking for the pod. + type: boolean + imagePullSecrets: + description: ImagePullSecrets is an optional list of references + to secrets in the s + items: + description: LocalObjectReference contains enough information + to let you locate the + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.' + type: string + type: object + type: array + initContainers: + description: InitContainers to add to the pods. + items: + description: A single application container that you want to + run within a pod. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + env: + description: List of environment variables to set in the + container. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: Variable references $(VAR_NAME) are expanded + using the previous define + type: string + valueFrom: + description: Source for the environment variable's + value. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults t + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and request' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + description: 'Docker image name. More info: https://kubernetes.' + type: string + imagePullPolicy: + description: Image pull policy. One of Always, Never, IfNotPresent. + type: string + lifecycle: + description: Actions that the management system should take + in response to containe + properties: + postStart: + description: PostStart is called immediately after a + container is created. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a + container is terminated due to ' + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Periodic probe of container liveness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + type: string + ports: + description: List of ports to expose from the container. + items: + description: ContainerPort represents a network port in + a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port + to. + type: string + hostPort: + description: Number of port to expose on the host. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Periodic probe of container service readiness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + resources: + description: Compute Resources required by this container. + Cannot be updated. + 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 + description: Limits describes the maximum amount of + compute resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: Security options the pod should run with. + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the + entrypoint of the container process + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod has successfully + initialized. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the conta + type: boolean + stdinOnce: + description: 'Whether the container runtime should close + the stdin channel after it ' + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination ' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. + type: string + tty: + description: Whether this container should allocate a TTY + for itself, also requires + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices + to be used by the container + items: + description: volumeDevice describes a mapping of a raw + block device within a contai + properties: + devicePath: + description: devicePath is the path inside of the + container that the device will be + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the + volume should be mounted. + type: string + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. + type: string + required: + - name + type: object + type: array + metadata: + description: MetaData to add to the pod. + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that may be set by external + tools to store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that can be used to organize + and categorize scope an + type: object + type: object + multiPodPerHost: + description: If set true then multiple pods can be created per + Kubernetes Node. + type: boolean + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + securityContext: + description: SecurityContext holds pod-level security attributes + and common contain + properties: + fsGroup: + description: A special supplemental group that applies to + all containers in a pod. + format: int64 + type: integer + fsGroupChangePolicy: + description: fsGroupChangePolicy defines behavior of changing + ownership and permiss + type: string + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a non-root + user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to all containers. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp profile + will be applied. + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first process + run in each container, i + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls used + for the pod. + items: + description: Sysctl defines a kernel parameter to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied to all + containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + sidecars: + description: Sidecars to add to the pod. + items: + description: A single application container that you want to + run within a pod. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + env: + description: List of environment variables to set in the + container. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: Variable references $(VAR_NAME) are expanded + using the previous define + type: string + valueFrom: + description: Source for the environment variable's + value. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults t + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and request' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + description: 'Docker image name. More info: https://kubernetes.' + type: string + imagePullPolicy: + description: Image pull policy. One of Always, Never, IfNotPresent. + type: string + lifecycle: + description: Actions that the management system should take + in response to containe + properties: + postStart: + description: PostStart is called immediately after a + container is created. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a + container is terminated due to ' + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Periodic probe of container liveness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + type: string + ports: + description: List of ports to expose from the container. + items: + description: ContainerPort represents a network port in + a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port + to. + type: string + hostPort: + description: Number of port to expose on the host. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Periodic probe of container service readiness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + resources: + description: Compute Resources required by this container. + Cannot be updated. + 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 + description: Limits describes the maximum amount of + compute resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: Security options the pod should run with. + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the + entrypoint of the container process + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod has successfully + initialized. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the conta + type: boolean + stdinOnce: + description: 'Whether the container runtime should close + the stdin channel after it ' + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination ' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. + type: string + tty: + description: Whether this container should allocate a TTY + for itself, also requires + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices + to be used by the container + items: + description: volumeDevice describes a mapping of a raw + block device within a contai + properties: + devicePath: + description: devicePath is the path inside of the + container that the device will be + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the + volume should be mounted. + type: string + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. + type: string + required: + - name + type: object + type: array + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to tolerates + any taint that matche + properties: + effect: + description: Effect indicates the taint effect to match. + type: string + key: + description: Key is the taint key that the toleration applies + to. + type: string + operator: + description: Operator represents a key's relationship to + the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the period of + time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. + type: string + type: object + type: array + type: object + rackConfig: + description: RackConfig Configures the operator to deploy rack aware + Aerospike clus + properties: + namespaces: + description: List of Aerospike namespaces for which rack feature + will be enabled + items: + type: string + type: array + racks: + description: Racks is the list of all racks + items: + description: Rack specifies single rack config + properties: + aerospikeConfig: + description: AerospikeConfig overrides the common AerospikeConfig + for this Rack. + type: object + x-kubernetes-preserve-unknown-fields: true + effectiveAerospikeConfig: + description: Effective/operative Aerospike config. + type: object + x-kubernetes-preserve-unknown-fields: true + effectivePodSpec: + description: Effective/operative PodSpec. + properties: + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: An empty preferred scheduling + term matches all objects with implicit w + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements + specified by this field are not met ' + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to + tolerates any taint that matche + properties: + effect: + description: Effect indicates the taint effect + to match. + type: string + key: + description: Key is the taint key that the toleration + applies to. + type: string + operator: + description: Operator represents a key's relationship + to the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the + period of time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. + type: string + type: object + type: array + type: object + effectiveStorage: + description: Effective/operative storage. + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies + for block volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number + of cleanup threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default + policies for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume + on Aerospike server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + shou + type: string + type: object + path: + description: Path to attach the volume on + the Aerospike server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use + for cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use + as the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use + as the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init + containers where this volume will b + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path + should be given. + type: string + sidecars: + description: Sidecars are side containers where + this volume will be mounted + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary + directory that shares a pod's lifetime + properties: + medium: + description: What type of storage medium + should back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage + required for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes + a persistent volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for + this volume, Name or path should be + given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that + may be set by external tools to + store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that + can be used to organize and categorize + scope an + type: object + type: object + selector: + description: A label query over volumes + to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the + volume is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: Name of the secret in the + pod's namespace to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + id: + description: Identifier for the rack + type: integer + nodeName: + description: K8s Node name for setting rack affinity. + type: string + podSpec: + description: PodSpec to use for the pods in this rack. + properties: + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: An empty preferred scheduling + term matches all objects with implicit w + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements + specified by this field are not met ' + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to + tolerates any taint that matche + properties: + effect: + description: Effect indicates the taint effect + to match. + type: string + key: + description: Key is the taint key that the toleration + applies to. + type: string + operator: + description: Operator represents a key's relationship + to the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the + period of time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. + type: string + type: object + type: array + type: object + rackLabel: + description: RackLabel for setting rack affinity. + type: string + region: + description: Region name for setting rack affinity. + type: string + storage: + description: Storage specify persistent storage to use for + the pods in this rack. + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies + for block volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number + of cleanup threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default + policies for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume + on Aerospike server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + shou + type: string + type: object + path: + description: Path to attach the volume on + the Aerospike server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use + for cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use + as the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use + as the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init + containers where this volume will b + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path + should be given. + type: string + sidecars: + description: Sidecars are side containers where + this volume will be mounted + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary + directory that shares a pod's lifetime + properties: + medium: + description: What type of storage medium + should back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage + required for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes + a persistent volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for + this volume, Name or path should be + given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that + may be set by external tools to + store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that + can be used to organize and categorize + scope an + type: object + type: object + selector: + description: A label query over volumes + to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the + volume is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: Name of the secret in the + pod's namespace to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + zone: + description: Zone name for setting rack affinity. + type: string + required: + - id + type: object + nullable: true + type: array + rollingUpdateBatchSize: + anyOf: + - type: integer + - type: string + description: RollingUpdateBatchSize is the percentage/number of + rack pods that will + x-kubernetes-int-or-string: true + type: object + rosterNodeBlockList: + description: RosterNodeBlockList is a list of blocked nodeIDs from + roster in a stro + items: + type: string + type: array + seedsFinderServices: + description: SeedsFinderServices creates additional Kubernetes service + that allow c + properties: + loadBalancer: + description: 'LoadBalancer created to discover Aerospike Cluster + nodes from outside ' + properties: + annotations: + additionalProperties: + type: string + type: object + externalTrafficPolicy: + description: Service External Traffic Policy Type string + enum: + - Local + - Cluster + type: string + loadBalancerSourceRanges: + items: + type: string + type: array + port: + description: Port Exposed port on load balancer. + format: int32 + maximum: 65535 + minimum: 1024 + type: integer + targetPort: + description: TargetPort Target port. If not specified the + tls-port of network. + format: int32 + maximum: 65535 + minimum: 1024 + type: integer + type: object + type: object + size: + description: Aerospike cluster size + format: int32 + type: integer + storage: + description: Storage specify persistent storage to use for the Aerospike + pods + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies for block + volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent volumes + are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number of cleanup + threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default policies + for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent volumes + are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume on Aerospike + server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the Aerospike + server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init containers + where this volume will b + items: + description: VolumeAttachment specifies volume attachment + to a container. + properties: + containerName: + description: ContainerName is the name of the container + to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path should be + given. + type: string + sidecars: + description: Sidecars are side containers where this volume + will be mounted + items: + description: VolumeAttachment specifies volume attachment + to a container. + properties: + containerName: + description: ContainerName is the name of the container + to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap that should + populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions + on created files by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value pair + in the Data field of the reference + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to + set permissions on this file.' + format: int32 + type: integer + path: + description: The relative path of the file + to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap or its + keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary directory + that shares a pod's lifetime + properties: + medium: + description: What type of storage medium should + back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage required + for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes a persistent + volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for this volume, + Name or path should be given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that may be set + by external tools to store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that can be used + to organize and categorize scope an + type: object + type: object + selector: + description: A label query over volumes to consider + for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the volume + is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions + on created files by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value pair + in the Data field of the reference + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to + set permissions on this file.' + format: int32 + type: integer + path: + description: The relative path of the file + to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret or its keys + must be defined + type: boolean + secretName: + description: Name of the secret in the pod's namespace + to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + validationPolicy: + description: ValidationPolicy controls validation of the Aerospike + cluster resource + properties: + skipWorkDirValidate: + description: skipWorkDirValidate validates that Aerospike work + directory is mounted + type: boolean + skipXdrDlogFileValidate: + description: ValidateXdrDigestLogFile validates that xdr digest + log file is mounted + type: boolean + required: + - skipWorkDirValidate + - skipXdrDlogFileValidate + type: object + required: + - aerospikeConfig + - image + - size + type: object + status: + description: AerospikeClusterStatus defines the observed state of AerospikeCluster + nullable: true + properties: + aerospikeAccessControl: + description: AerospikeAccessControl has the Aerospike roles and users + definitions. + properties: + adminPolicy: + description: AerospikeClientAdminPolicy specify the aerospike + client admin policy f + properties: + timeout: + description: Timeout for admin client policy in milliseconds. + type: integer + required: + - timeout + type: object + roles: + description: Roles is the set of roles to allow on the Aerospike + cluster. + items: + description: AerospikeRoleSpec specifies an Aerospike database + role and its associa + properties: + name: + description: Name of this role. + type: string + privileges: + description: Privileges granted to this role. + items: + type: string + type: array + x-kubernetes-list-type: set + readQuota: + description: ReadQuota specifies permitted rate of read + records for current role (t + format: int32 + type: integer + whitelist: + description: Whitelist of host address allowed for this + role. + items: + type: string + type: array + x-kubernetes-list-type: set + writeQuota: + description: 'WriteQuota specifies permitted rate of write + records for current role ' + format: int32 + type: integer + required: + - name + - privileges + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + users: + description: Users is the set of users to allow on the Aerospike + cluster. + items: + description: AerospikeUserSpec specifies an Aerospike database + user, the secret nam + properties: + name: + description: Name is the user's username. + type: string + roles: + description: Roles is the list of roles granted to the user. + items: + type: string + type: array + x-kubernetes-list-type: set + secretName: + description: SecretName has secret info created by user. + type: string + required: + - name + - roles + - secretName + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - users + type: object + aerospikeConfig: + description: AerospikeConfig sets config in aerospike.conf file. + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + aerospikeNetworkPolicy: + description: AerospikeNetworkPolicy specifies how clients and tools + access the Aero + properties: + access: + description: 'AccessType is the type of network address to use + for Aerospike access ' + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + alternateAccess: + description: AlternateAccessType is the type of network address + to use for Aerospik + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + tlsAccess: + description: 'TLSAccessType is the type of network address to + use for Aerospike TLS ' + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + tlsAlternateAccess: + description: TLSAlternateAccessType is the type of network address + to use for Aeros + enum: + - pod + - hostInternal + - hostExternal + - configuredIP + type: string + type: object + image: + description: Aerospike server image + type: string + multiPodPerHost: + description: If set true then multiple pods can be created per Kubernetes + Node. + type: boolean + operatorClientCertSpec: + description: Certificates to connect to Aerospike. + properties: + certPathInOperator: + description: AerospikeCertPathInOperatorSource contain configuration + for certificat + properties: + caCertsPath: + type: string + clientCertPath: + type: string + clientKeyPath: + type: string + type: object + secretCertSource: + properties: + caCertsFilename: + type: string + clientCertFilename: + type: string + clientKeyFilename: + type: string + secretName: + type: string + secretNamespace: + type: string + required: + - secretName + type: object + tlsClientName: + description: 'If specified, this name will be added to tls-authenticate-client + list ' + type: string + type: object + podSpec: + description: Additional configuration for create Aerospike pods. + properties: + aerospikeContainer: + description: AerospikeContainerSpec configures the aerospike-server + container creat + properties: + resources: + description: Define resources requests and limits for Aerospike + Server Container. + 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 + description: Limits describes the maximum amount of compute + resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: SecurityContext that will be added to aerospike-server + container creat + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of + the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + type: object + aerospikeInitContainer: + description: AerospikeInitContainerSpec configures the aerospike-init + container cre + properties: + imageRegistry: + description: ImageRegistry is the name of image registry for + aerospike-init contain + type: string + resources: + description: Define resources requests and limits for Aerospike + init Container. + 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 + description: Limits describes the maximum amount of compute + resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: SecurityContext that will be added to aerospike-init + container created + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of + the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + type: object + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: An empty preferred scheduling term matches + all objects with implicit w + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. + type: string + values: + description: An array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching the + corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at sc + items: + description: Defines a set of pods (namely those matching + the labelSelector relativ + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the a + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + type: string + values: + description: values is an array of + string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching the + corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements specified + by this field are not met ' + items: + description: Defines a set of pods (namely those matching + the labelSelector relativ + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + dnsConfig: + description: DNSConfig defines the DNS parameters of a pod in + addition to those gen + properties: + nameservers: + description: A list of DNS name server IP addresses. + items: + type: string + type: array + options: + description: A list of DNS resolver options. + items: + description: PodDNSConfigOption defines DNS resolver options + of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name lookup. + items: + type: string + type: array + type: object + dnsPolicy: + description: DnsPolicy same as https://kubernetes. + type: string + effectiveDNSPolicy: + description: Effective value of the DNSPolicy + type: string + hostNetwork: + description: HostNetwork enables host networking for the pod. + type: boolean + imagePullSecrets: + description: ImagePullSecrets is an optional list of references + to secrets in the s + items: + description: LocalObjectReference contains enough information + to let you locate the + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.' + type: string + type: object + type: array + initContainers: + description: InitContainers to add to the pods. + items: + description: A single application container that you want to + run within a pod. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + env: + description: List of environment variables to set in the + container. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: Variable references $(VAR_NAME) are expanded + using the previous define + type: string + valueFrom: + description: Source for the environment variable's + value. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults t + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and request' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + description: 'Docker image name. More info: https://kubernetes.' + type: string + imagePullPolicy: + description: Image pull policy. One of Always, Never, IfNotPresent. + type: string + lifecycle: + description: Actions that the management system should take + in response to containe + properties: + postStart: + description: PostStart is called immediately after a + container is created. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a + container is terminated due to ' + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Periodic probe of container liveness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + type: string + ports: + description: List of ports to expose from the container. + items: + description: ContainerPort represents a network port in + a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port + to. + type: string + hostPort: + description: Number of port to expose on the host. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Periodic probe of container service readiness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + resources: + description: Compute Resources required by this container. + Cannot be updated. + 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 + description: Limits describes the maximum amount of + compute resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: Security options the pod should run with. + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the + entrypoint of the container process + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod has successfully + initialized. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the conta + type: boolean + stdinOnce: + description: 'Whether the container runtime should close + the stdin channel after it ' + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination ' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. + type: string + tty: + description: Whether this container should allocate a TTY + for itself, also requires + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices + to be used by the container + items: + description: volumeDevice describes a mapping of a raw + block device within a contai + properties: + devicePath: + description: devicePath is the path inside of the + container that the device will be + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the + volume should be mounted. + type: string + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. + type: string + required: + - name + type: object + type: array + metadata: + description: MetaData to add to the pod. + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that may be set by external + tools to store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that can be used to organize + and categorize scope an + type: object + type: object + multiPodPerHost: + description: If set true then multiple pods can be created per + Kubernetes Node. + type: boolean + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + securityContext: + description: SecurityContext holds pod-level security attributes + and common contain + properties: + fsGroup: + description: A special supplemental group that applies to + all containers in a pod. + format: int64 + type: integer + fsGroupChangePolicy: + description: fsGroupChangePolicy defines behavior of changing + ownership and permiss + type: string + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a non-root + user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to all containers. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp profile + will be applied. + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first process + run in each container, i + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls used + for the pod. + items: + description: Sysctl defines a kernel parameter to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied to all + containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process + type: string + type: object + type: object + sidecars: + description: Sidecars to add to the pod. + items: + description: A single application container that you want to + run within a pod. + properties: + args: + description: Arguments to the entrypoint. + items: + type: string + type: array + command: + description: Entrypoint array. Not executed within a shell. + items: + type: string + type: array + env: + description: List of environment variables to set in the + container. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. Must + be a C_IDENTIFIER. + type: string + value: + description: Variable references $(VAR_NAME) are expanded + using the previous define + type: string + valueFrom: + description: Source for the environment variable's + value. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults t + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and request' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of + the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret or + its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. + items: + description: EnvFromSource represents the source of a + set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap must + be defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to + each key in the ConfigMap. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.' + type: string + optional: + description: Specify whether the Secret must be + defined + type: boolean + type: object + type: object + type: array + image: + description: 'Docker image name. More info: https://kubernetes.' + type: string + imagePullPolicy: + description: Image pull policy. One of Always, Never, IfNotPresent. + type: string + lifecycle: + description: Actions that the management system should take + in response to containe + properties: + postStart: + description: PostStart is called immediately after a + container is created. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a + container is terminated due to ' + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to + execute inside the container, the worki + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Periodic probe of container liveness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + type: string + ports: + description: List of ports to expose from the container. + items: + description: ContainerPort represents a network port in + a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port + to. + type: string + hostPort: + description: Number of port to expose on the host. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Periodic probe of container service readiness. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + resources: + description: Compute Resources required by this container. + Cannot be updated. + 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 + description: Limits describes the maximum amount of + compute resources allowed. + 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 + description: Requests describes the minimum amount of + compute resources required. + type: object + type: object + securityContext: + description: Security options the pod should run with. + properties: + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation controls whether + a process can gain more priv + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + type: boolean + procMount: + description: procMount denotes the type of proc mount + to use for the containers. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as + a non-root user. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the + container. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node sho + type: string + type: + description: type indicates which kind of seccomp + profile will be applied. + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to + all containers. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA + admission webhook (https://github + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the + entrypoint of the container process + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod has successfully + initialized. + properties: + exec: + description: One and only one of the following should + be specified. + properties: + command: + description: Command is the command line to execute + inside the container, the worki + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed aft + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: Number of seconds after the container has + started before liveness prob + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successfu + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upo + format: int64 + type: integer + timeoutSeconds: + description: Number of seconds after which the probe + times out. + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the conta + type: boolean + stdinOnce: + description: 'Whether the container runtime should close + the stdin channel after it ' + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination ' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. + type: string + tty: + description: Whether this container should allocate a TTY + for itself, also requires + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices + to be used by the container + items: + description: volumeDevice describes a mapping of a raw + block device within a contai + properties: + devicePath: + description: devicePath is the path inside of the + container that the device will be + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the + volume should be mounted. + type: string + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. + type: string + required: + - name + type: object + type: array + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to tolerates + any taint that matche + properties: + effect: + description: Effect indicates the taint effect to match. + type: string + key: + description: Key is the taint key that the toleration applies + to. + type: string + operator: + description: Operator represents a key's relationship to + the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the period of + time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. + type: string + type: object + type: array + type: object + pods: + additionalProperties: + description: AerospikePodStatus contains the Aerospike specific + status of the Aeros + properties: + aerospike: + description: Aerospike server instance summary for this pod. + properties: + accessEndpoints: + description: AccessEndpoints are the access endpoints for + this pod. + items: + type: string + type: array + alternateAccessEndpoints: + description: AlternateAccessEndpoints are the alternate + access endpoints for this p + items: + type: string + type: array + clusterName: + description: ClusterName is the name of the Aerospike cluster + this pod belongs to. + type: string + nodeID: + description: NodeID is the unique Aerospike ID for this + pod. + type: string + rackID: + description: RackID of rack to which this node belongs + type: integer + tlsAccessEndpoints: + description: TLSAccessEndpoints are the TLS access endpoints + for this pod. + items: + type: string + type: array + tlsAlternateAccessEndpoints: + description: TLSAlternateAccessEndpoints are the alternate + TLS access endpoints for + items: + type: string + type: array + tlsName: + description: TLSName is the TLS name of this pod in the + Aerospike cluster. + type: string + required: + - clusterName + - nodeID + type: object + aerospikeConfigHash: + description: 'AerospikeConfigHash is ripemd160 hash of aerospikeConfig + used by this ' + type: string + dirtyVolumes: + description: DirtyVolumes is the list of volume names that are + removed from aerospi + items: + type: string + type: array + hostExternalIP: + description: HostExternalIP of the K8s host this pod is scheduled + on. + type: string + hostInternalIP: + description: HostInternalIP of the K8s host this pod is scheduled + on. + type: string + image: + description: Image is the Aerospike image this pod is running. + type: string + initializedVolumePaths: + description: InitializedVolumePaths is deprecated version of + InitializedVolumes. + items: + type: string + nullable: true + type: array + initializedVolumes: + description: 'InitializedVolumes is the list of volume names + that have already been ' + items: + type: string + type: array + networkPolicyHash: + description: NetworkPolicyHash is ripemd160 hash of NetworkPolicy + used by this pod + type: string + podIP: + description: PodIP in the K8s network. + type: string + podPort: + description: PodPort is the port K8s internal Aerospike clients + can connect to. + type: integer + podSpecHash: + description: PodSpecHash is ripemd160 hash of PodSpec used by + this pod + type: string + servicePort: + description: ServicePort is the port Aerospike clients outside + K8s can connect to. + format: int32 + type: integer + required: + - aerospikeConfigHash + - image + - networkPolicyHash + - podIP + - podPort + - podSpecHash + - servicePort + type: object + description: Pods has Aerospike specific status of the pods. + type: object + rackConfig: + description: RackConfig Configures the operator to deploy rack aware + Aerospike clus + nullable: true + properties: + namespaces: + description: List of Aerospike namespaces for which rack feature + will be enabled + items: + type: string + type: array + racks: + description: Racks is the list of all racks + items: + description: Rack specifies single rack config + properties: + aerospikeConfig: + description: AerospikeConfig overrides the common AerospikeConfig + for this Rack. + type: object + x-kubernetes-preserve-unknown-fields: true + effectiveAerospikeConfig: + description: Effective/operative Aerospike config. + type: object + x-kubernetes-preserve-unknown-fields: true + effectivePodSpec: + description: Effective/operative PodSpec. + properties: + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: An empty preferred scheduling + term matches all objects with implicit w + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements + specified by this field are not met ' + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to + tolerates any taint that matche + properties: + effect: + description: Effect indicates the taint effect + to match. + type: string + key: + description: Key is the taint key that the toleration + applies to. + type: string + operator: + description: Operator represents a key's relationship + to the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the + period of time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. + type: string + type: object + type: array + type: object + effectiveStorage: + description: Effective/operative storage. + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies + for block volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number + of cleanup threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default + policies for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume + on Aerospike server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + shou + type: string + type: object + path: + description: Path to attach the volume on + the Aerospike server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use + for cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use + as the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use + as the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init + containers where this volume will b + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path + should be given. + type: string + sidecars: + description: Sidecars are side containers where + this volume will be mounted + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary + directory that shares a pod's lifetime + properties: + medium: + description: What type of storage medium + should back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage + required for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes + a persistent volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for + this volume, Name or path should be + given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that + may be set by external tools to + store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that + can be used to organize and categorize + scope an + type: object + type: object + selector: + description: A label query over volumes + to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the + volume is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: Name of the secret in the + pod's namespace to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + id: + description: Identifier for the rack + type: integer + nodeName: + description: K8s Node name for setting rack affinity. + type: string + podSpec: + description: PodSpec to use for the pods in this rack. + properties: + affinity: + description: Affinity rules for pod placement. + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: An empty preferred scheduling + term matches all objects with implicit w + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + type: string + values: + description: An array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at sc + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the a + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are a + properties: + podAffinityTerm: + description: Required. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. + items: + description: A label selector + requirement is a selector + that contains values, a key + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. + type: string + values: + description: values is an + array of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies + a static list of namespace names + that the term ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + weight: + description: 'weight associated with matching + the corresponding podAffinityTerm, in ' + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: 'If the anti-affinity requirements + specified by this field are not met ' + items: + description: Defines a set of pods (namely + those matching the labelSelector relativ + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + namespaces: + description: namespaces specifies a static + list of namespace names that the term + ap + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affin + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector constraints for this pod. + type: object + tolerations: + description: Tolerations for this pod. + items: + description: The pod this Toleration is attached to + tolerates any taint that matche + properties: + effect: + description: Effect indicates the taint effect + to match. + type: string + key: + description: Key is the taint key that the toleration + applies to. + type: string + operator: + description: Operator represents a key's relationship + to the value. + type: string + tolerationSeconds: + description: 'TolerationSeconds represents the + period of time the toleration (which ' + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. + type: string + type: object + type: array + type: object + rackLabel: + description: RackLabel for setting rack affinity. + type: string + region: + description: Region name for setting rack affinity. + type: string + storage: + description: Storage specify persistent storage to use for + the pods in this rack. + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies + for block volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number + of cleanup threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default + policies for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for + cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as + the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as + the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume + on Aerospike server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from + which the container's volume should + be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's volume + shou + type: string + type: object + path: + description: Path to attach the volume on + the Aerospike server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use + for cascade delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use + as the volume init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use + as the volume wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init + containers where this volume will b + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path + should be given. + type: string + sidecars: + description: Sidecars are side containers where + this volume will be mounted + items: + description: VolumeAttachment specifies volume + attachment to a container. + properties: + containerName: + description: ContainerName is the name of + the container to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the + host to + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume + from which the container's volume + should be mou + type: string + subPathExpr: + description: Expanded path within the + volume from which the container's + volume shou + type: string + type: object + path: + description: Path to attach the volume on + the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary + directory that shares a pod's lifetime + properties: + medium: + description: What type of storage medium + should back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage + required for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes + a persistent volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for + this volume, Name or path should be + given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that + may be set by external tools to + store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that + can be used to organize and categorize + scope an + type: object + type: object + selector: + description: A label query over volumes + to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + items: + description: A label selector requirement + is a selector that contains values, + a key + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. + type: string + values: + description: values is an array + of string values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the + volume is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used + to set permissions on created files + by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value + pair in the Data field of the reference + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits + used to set permissions on this + file.' + format: int32 + type: integer + path: + description: The relative path of + the file to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret + or its keys must be defined + type: boolean + secretName: + description: Name of the secret in the + pod's namespace to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes + attached to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + zone: + description: Zone name for setting rack affinity. + type: string + required: + - id + type: object + nullable: true + type: array + rollingUpdateBatchSize: + anyOf: + - type: integer + - type: string + description: RollingUpdateBatchSize is the percentage/number of + rack pods that will + x-kubernetes-int-or-string: true + type: object + resources: + description: Define resources requests and limits for Aerospike Server + Container. + 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 + description: Limits describes the maximum amount of compute resources + allowed. + 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 + description: Requests describes the minimum amount of compute + resources required. + type: object + type: object + rosterNodeBlockList: + description: RosterNodeBlockList is a list of blocked nodeIDs from + roster in a stro + items: + type: string + type: array + seedsFinderServices: + description: SeedsFinderServices describes services which are used + for seeding Aero + properties: + loadBalancer: + description: 'LoadBalancer created to discover Aerospike Cluster + nodes from outside ' + properties: + annotations: + additionalProperties: + type: string + type: object + externalTrafficPolicy: + description: Service External Traffic Policy Type string + enum: + - Local + - Cluster + type: string + loadBalancerSourceRanges: + items: + type: string + type: array + port: + description: Port Exposed port on load balancer. + format: int32 + maximum: 65535 + minimum: 1024 + type: integer + targetPort: + description: TargetPort Target port. If not specified the + tls-port of network. + format: int32 + maximum: 65535 + minimum: 1024 + type: integer + type: object + type: object + size: + description: Aerospike cluster size + format: int32 + type: integer + storage: + description: Storage specify persistent storage to use for the Aerospike + pods. + properties: + blockVolumePolicy: + description: BlockVolumePolicy contains default policies for block + volumes. + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent volumes + are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + cleanupThreads: + description: CleanupThreads contains maximum number of cleanup + threads(dd or blkdis + type: integer + filesystemVolumePolicy: + description: FileSystemVolumePolicy contains default policies + for filesystem volume + properties: + cascadeDelete: + description: CascadeDelete determines if the persistent volumes + are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initMethod: + description: InitMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + wipeMethod: + description: WipeMethod determines how volumes attached to + Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + type: object + volumes: + description: Volumes list to attach to created pods. + items: + properties: + aerospike: + description: Aerospike attachment of this volume on Aerospike + server container. + properties: + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which the + container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the Aerospike + server container. + type: string + required: + - path + type: object + cascadeDelete: + description: CascadeDelete determines if the persistent + volumes are deleted after t + type: boolean + effectiveCascadeDelete: + description: Effective/operative value to use for cascade + delete after applying def + type: boolean + effectiveInitMethod: + description: Effective/operative value to use as the volume + init method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + effectiveWipeMethod: + description: Effective/operative value to use as the volume + wipe method after apply + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + initContainers: + description: InitContainers are additional init containers + where this volume will b + items: + description: VolumeAttachment specifies volume attachment + to a container. + properties: + containerName: + description: ContainerName is the name of the container + to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the container. + type: string + required: + - containerName + - path + type: object + type: array + initMethod: + description: InitMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + name: + description: Name for this volume, Name or path should be + given. + type: string + sidecars: + description: Sidecars are side containers where this volume + will be mounted + items: + description: VolumeAttachment specifies volume attachment + to a container. + properties: + containerName: + description: ContainerName is the name of the container + to attach this volume to. + type: string + mountOptions: + properties: + mountPropagation: + description: mountPropagation determines how mounts + are propagated from the host to + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified) + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mou + type: string + subPathExpr: + description: Expanded path within the volume from + which the container's volume shou + type: string + type: object + path: + description: Path to attach the volume on the container. + type: string + required: + - containerName + - path + type: object + type: array + source: + description: Source of this volume. + properties: + configMap: + description: ConfigMap represents a configMap that should + populate this volume + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions + on created files by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value pair + in the Data field of the reference + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to + set permissions on this file.' + format: int32 + type: integer + path: + description: The relative path of the file + to map the key to. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.' + type: string + optional: + description: Specify whether the ConfigMap or its + keys must be defined + type: boolean + type: object + emptyDir: + description: EmptyDir represents a temporary directory + that shares a pod's lifetime + properties: + medium: + description: What type of storage medium should + back this directory. + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: Total amount of local storage required + for this EmptyDir volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + persistentVolume: + description: PersistentVolumeSpec describes a persistent + volume to claim and attach + properties: + accessModes: + description: Name for creating PVC for this volume, + Name or path should be given Na + items: + type: string + type: array + metadata: + properties: + annotations: + additionalProperties: + type: string + description: Key - Value pair that may be set + by external tools to store and retrie + type: object + labels: + additionalProperties: + type: string + description: Key - Value pairs that can be used + to organize and categorize scope an + type: object + type: object + selector: + description: A label query over volumes to consider + for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. + items: + description: A label selector requirement + is a selector that contains values, a key + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. + type: string + values: + description: values is an array of string + values. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. + type: object + type: object + size: + anyOf: + - type: integer + - type: string + description: Size of volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: StorageClass should be pre-created + by user. + type: string + volumeMode: + description: VolumeMode specifies if the volume + is block/raw or a filesystem. + type: string + required: + - size + - storageClass + - volumeMode + type: object + secret: + description: Adapts a Secret into a volume. + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions + on created files by defaul' + format: int32 + type: integer + items: + description: If unspecified, each key-value pair + in the Data field of the reference + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to + set permissions on this file.' + format: int32 + type: integer + path: + description: The relative path of the file + to map the key to. + type: string + required: + - key + - path + type: object + type: array + optional: + description: Specify whether the Secret or its keys + must be defined + type: boolean + secretName: + description: Name of the secret in the pod's namespace + to use. + type: string + type: object + type: object + wipeMethod: + description: WipeMethod determines how volumes attached + to Aerospike server pods ar + enum: + - none + - dd + - blkdiscard + - deleteFiles + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + validationPolicy: + description: ValidationPolicy controls validation of the Aerospike + cluster resource + properties: + skipWorkDirValidate: + description: skipWorkDirValidate validates that Aerospike work + directory is mounted + type: boolean + skipXdrDlogFileValidate: + description: ValidateXdrDigestLogFile validates that xdr digest + log file is mounted + type: boolean + required: + - skipWorkDirValidate + - skipXdrDlogFileValidate + type: object + required: + - pods + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8e10ee4 --- /dev/null +++ b/go.mod @@ -0,0 +1,73 @@ +module github.com/aerospike/aerospike-kubernetes-operator-ctl + +go 1.19 + +require ( + github.com/onsi/ginkgo/v2 v2.9.2 + github.com/onsi/gomega v1.27.4 + github.com/spf13/cobra v1.6.1 + go.uber.org/zap v1.24.0 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.27.1 + k8s.io/apiextensions-apiserver v0.26.2 + k8s.io/apimachinery v0.27.1 + k8s.io/cli-runtime v0.27.1 + k8s.io/client-go v0.27.1 + k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a + sigs.k8s.io/controller-runtime v0.14.5 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/zapr v1.2.3 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // 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/pkg/errors v0.9.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/xlab/treeprint v1.1.0 // indirect + go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect + go.uber.org/atomic v1.7.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.7.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.13.2 // indirect + sigs.k8s.io/kustomize/kyaml v0.14.1 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..1950405 --- /dev/null +++ b/go.sum @@ -0,0 +1,342 @@ +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= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +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-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/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/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +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.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +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.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +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.5/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.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/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +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.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/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/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= +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/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= +github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= +github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= +github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ= +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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +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/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.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.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-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-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +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/lint v0.0.0-20190930215403-16217165b5de/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/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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-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-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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-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/sys v0.0.0-20180830151530-49385e6e1522/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-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/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-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.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.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-20191108193012-7d206e10da11/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-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.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +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-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/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.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/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-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-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/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.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-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.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.27.1 h1:Z6zUGQ1Vd10tJ+gHcNNNgkV5emCyW+v2XTmn+CLjSd0= +k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E= +k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= +k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= +k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc= +k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= +k8s.io/cli-runtime v0.27.1 h1:MMzp5Q/Xmr5L1Lrowuc+Y/r95XINC6c6/fE3aN7JDRM= +k8s.io/cli-runtime v0.27.1/go.mod h1:tEbTB1XP/nTH3wujsi52bw91gWpErtWiS15R6CwYsAI= +k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8= +k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA= +k8s.io/component-base v0.26.2 h1:IfWgCGUDzrD6wLLgXEstJKYZKAFS2kO+rBRi0p3LqcI= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= +k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= +k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk= +k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= +sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +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.13.2 h1:kejWfLeJhUsTGioDoFNJET5LQe/ajzXhJGYoU+pJsiA= +sigs.k8s.io/kustomize/api v0.13.2/go.mod h1:DUp325VVMFVcQSq+ZxyDisA8wtldwHxLZbr1g94UHsw= +sigs.k8s.io/kustomize/kyaml v0.14.1 h1:c8iibius7l24G2wVAGZn/Va2wNys03GXLjYVIcFVxKA= +sigs.k8s.io/kustomize/kyaml v0.14.1/go.mod h1:AN1/IpawKilWD7V+YvQwRGUvuUOOWpjsHu6uHwonSF4= +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/main.go b/main.go new file mode 100644 index 0000000..6a90059 --- /dev/null +++ b/main.go @@ -0,0 +1,22 @@ +/* +Copyright 2023 The aerospike-operator Authors. +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. +*/ + +package main + +import "github.com/aerospike/aerospike-kubernetes-operator-ctl/cmd" + +func main() { + cmd.Execute() +} diff --git a/pkg/collectinfo/collectinfo_test.go b/pkg/collectinfo/collectinfo_test.go new file mode 100644 index 0000000..183c299 --- /dev/null +++ b/pkg/collectinfo/collectinfo_test.go @@ -0,0 +1,212 @@ +package collectinfo_test + +import ( + "archive/tar" + "compress/gzip" + "context" + "fmt" + "io" + "os" + "path/filepath" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/aerospike/aerospike-kubernetes-operator-ctl/pkg/collectinfo" +) + +const ( + nodeName = "test-node" + scName = "test-sc" + pvcName = "test-pvc" + stsName = "test-sts" + podName = "test-pod" + containerName = "test-container" + aerospikeClusterName = "test-aerocluster" +) + +var ( + clusterScopeDir = filepath.Join(collectinfo.RootOutputDir, collectinfo.ClusterScopedDir) + namespaceScopeDir = filepath.Join(collectinfo.RootOutputDir, collectinfo.NamespaceScopedDir) +) + +// key format: RootOutputDir//ns// +var filesList = map[string]bool{ + filepath.Join(clusterScopeDir, collectinfo.KindDirNames[collectinfo.NodeKind], + nodeName+collectinfo.FileSuffix): false, + filepath.Join(clusterScopeDir, collectinfo.KindDirNames[collectinfo.SCKind], + scName+collectinfo.FileSuffix): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.PVCKind], + pvcName+collectinfo.FileSuffix): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.STSKind], + stsName+collectinfo.FileSuffix): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.PodKind], podName, "logs", + containerName+".log"): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.PodKind], podName, "logs", "previous", + containerName+".log"): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.PodKind], podName, + podName+collectinfo.FileSuffix): false, + filepath.Join(namespaceScopeDir, namespace, collectinfo.KindDirNames[collectinfo.AerospikeClusterKind], + aerospikeClusterName+collectinfo.FileSuffix): false, + filepath.Join(collectinfo.RootOutputDir, + collectinfo.LogFileName): false, +} + +var _ = Describe("collectInfo", func() { + Context("When doing valid operations", func() { + + createOption := &client.CreateOptions{} + + It("Should create a tar file with all logs", func() { + node := &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{Name: nodeName}, + } + err := k8sClient.Create(context.TODO(), node, createOption) + Expect(err).ToNot(HaveOccurred()) + + sc := &v1.StorageClass{ + ObjectMeta: metav1.ObjectMeta{Name: scName}, + Provisioner: "provisionerPluginName", + } + err = k8sClient.Create(context.TODO(), sc, createOption) + Expect(err).ToNot(HaveOccurred()) + + pvc := &corev1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{Name: pvcName, Namespace: namespace}, + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceStorage: resource.MustParse("1Gi"), + }, + }, + }, + } + err = k8sClient.Create(context.TODO(), pvc, createOption) + Expect(err).ToNot(HaveOccurred()) + + sts := &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{Name: stsName, Namespace: namespace}, + Spec: appsv1.StatefulSetSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"app": "t1", "s2iBuilder": "t1-s2i-1x55", "version": "v1"}, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{"app": "t1", "s2iBuilder": "t1-s2i-1x55", "version": "v1"}, + }, + }, + }, + } + err = k8sClient.Create(context.TODO(), sts, createOption) + Expect(err).ToNot(HaveOccurred()) + + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: podName, Namespace: namespace}, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: containerName, + Image: "nginx", + }, + }, + }, + } + err = k8sClient.Create(context.TODO(), pod, createOption) + Expect(err).ToNot(HaveOccurred()) + + gvk := schema.GroupVersionKind{ + Group: "asdb.aerospike.com", + Version: "v1beta1", + Kind: "AerospikeCluster", + } + + u := &unstructured.Unstructured{} + u.SetName(aerospikeClusterName) + u.SetNamespace(namespace) + u.SetGroupVersionKind(gvk) + + err = k8sClient.Create(context.TODO(), u) + Expect(err).ToNot(HaveOccurred()) + + var nslist = []string{namespace} + + err = os.MkdirAll(collectinfo.RootOutputDir, os.ModePerm) + Expect(err).ToNot(HaveOccurred()) + + logger := collectinfo.InitializeLogger(filepath.Join(collectinfo.RootOutputDir, collectinfo.LogFileName)) + + err = collectinfo.CollectInfo(logger, k8sClient, k8sClientset, nslist, "", false, true) + Expect(err).ToNot(HaveOccurred()) + + err = validateTar(collectinfo.TarName, filesList) + Expect(err).ToNot(HaveOccurred()) + }) + }) +}) + +func validateTar(srcFile string, filesList map[string]bool) error { + f, err := os.Open(srcFile) + if err != nil { + return err + } + defer f.Close() + + gzf, err := gzip.NewReader(f) + if err != nil { + return err + } + + tarReader := tar.NewReader(gzf) + + for { + header, err := tarReader.Next() + if err == io.EOF { + break + } + + if err != nil { + return err + } + + name := header.Name + + switch header.Typeflag { + case tar.TypeDir: + continue + case tar.TypeReg: + if _, ok := filesList[name]; ok { + filesList[name] = true + } else { + return fmt.Errorf("found unexpected file in tar %s", name) + } + default: + return fmt.Errorf("unable to figure out type : %c in file %s", + header.Typeflag, + name, + ) + } + } + + var missingFiles []string + + for key, value := range filesList { + if !value { + missingFiles = append(missingFiles, key) + } + } + + if len(missingFiles) != 0 { + return fmt.Errorf("certain log files are missing %v", missingFiles) + } + + return nil +} diff --git a/pkg/collectinfo/collectinfo_util.go b/pkg/collectinfo/collectinfo_util.go new file mode 100644 index 0000000..f9a7827 --- /dev/null +++ b/pkg/collectinfo/collectinfo_util.go @@ -0,0 +1,478 @@ +package collectinfo + +import ( + "archive/tar" + "bytes" + "compress/gzip" + "context" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "time" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "gopkg.in/yaml.v2" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/duration" + runtimeresource "k8s.io/cli-runtime/pkg/resource" + "k8s.io/client-go/kubernetes" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "k8s.io/kube-openapi/pkg/util/sets" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/config" +) + +const ( + RootOutputDir = "akoctl_collectinfo" + NamespaceScopedDir = "k8s_namespaces" + ClusterScopedDir = "k8s_cluster" + LogFileName = "akoctl.log" + FileSuffix = ".yaml" +) + +var ( + currentTime = time.Now().Format("20060102_150405") + TarName = RootOutputDir + "_" + currentTime + ".tar.gzip" +) + +func RunCollectInfo(namespaces []string, path string, allNamespaces, clusterScope bool) error { + rootOutputPath := filepath.Join(path, RootOutputDir) + if err := os.Mkdir(rootOutputPath, os.ModePerm); err != nil { + return err + } + + logger := InitializeLogger(filepath.Join(rootOutputPath, LogFileName)) + + if len(namespaces) == 0 && !allNamespaces { + logger.Error("Either `namespaces` or `all-namespaces` argument must be provided") + return nil + } + + k8sClient, clientSet, err := createKubeClients(config.GetConfigOrDie()) + if err != nil { + logger.Error("Not able to create kube clients", zap.Error(err)) + return err + } + + if err := CollectInfo(logger, k8sClient, clientSet, namespaces, path, allNamespaces, clusterScope); err != nil { + logger.Error("Not able to collect object info", zap.String("err", err.Error())) + } + + return nil +} + +func InitializeLogger(logFilePath string) *zap.Logger { + cfg := zap.NewProductionEncoderConfig() + cfg.EncodeTime = zapcore.ISO8601TimeEncoder + fileEncoder := zapcore.NewJSONEncoder(cfg) + consoleEncoder := zapcore.NewConsoleEncoder(cfg) + logFile, _ := os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) //nolint:gocritic // file permission + writer := zapcore.AddSync(logFile) + defaultLogLevel := zapcore.DebugLevel + core := zapcore.NewTee( + zapcore.NewCore(fileEncoder, writer, defaultLogLevel), + zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), defaultLogLevel), + ) + + return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.DPanicLevel)) +} + +func CollectInfo(logger *zap.Logger, k8sClient client.Client, clientSet *kubernetes.Clientset, namespaces []string, + path string, allNamespaces, clusterScope bool) error { + rootOutputPath := filepath.Join(path, RootOutputDir) + ctx := context.TODO() + nsList := sets.String{} + nsList.Insert(namespaces...) + + if allNamespaces { + logger.Info("Capturing for all namespaces") + + namespaceObjs := &corev1.NamespaceList{} + if err := k8sClient.List(ctx, namespaceObjs); err != nil { + return err + } + + for idx := range namespaceObjs.Items { + nsList.Insert(namespaceObjs.Items[idx].Name) + } + } + + for ns := range nsList { + objOutputDir := filepath.Join(rootOutputPath, NamespaceScopedDir, ns) + if err := os.MkdirAll(objOutputDir, os.ModePerm); err != nil { + return err + } + + if err := capturePodLogs(ctx, logger, clientSet, ns, objOutputDir); err != nil { + return err + } + + if err := captureEvents(ctx, logger, clientSet, ns, objOutputDir); err != nil { + return err + } + + for _, gvk := range gvkListNSScoped { + if err := captureObject(logger, k8sClient, gvk, ns, objOutputDir); err != nil { + return err + } + } + } + + if clusterScope { + logger.Info("Capturing cluster scoped objects info") + + objOutputDir := filepath.Join(rootOutputPath, ClusterScopedDir) + if err := os.MkdirAll(objOutputDir, os.ModePerm); err != nil { + return err + } + + for _, gvk := range gvkListClusterScoped { + if err := captureObject(logger, k8sClient, gvk, "", objOutputDir); err != nil { + return err + } + } + } + + logger.Info("Compressing and deleting all logs and created ", zap.String("tar file", TarName)) + + return makeTarAndClean(path) +} + +func createKubeClients(cfg *rest.Config) (client.Client, *kubernetes.Clientset, error) { + scheme := runtime.NewScheme() + if err := clientgoscheme.AddToScheme(scheme); err != nil { + return nil, nil, err + } + + k8sClient, err := client.New( + cfg, client.Options{Scheme: scheme}, + ) + if err != nil { + return nil, nil, err + } + + clientSet, err := kubernetes.NewForConfig(cfg) + if err != nil { + return nil, nil, err + } + + return k8sClient, clientSet, nil +} + +func captureObject(logger *zap.Logger, k8sClient client.Client, gvk schema.GroupVersionKind, + ns, rootOutputPath string) error { + listOps := &client.ListOptions{Namespace: ns} + u := &unstructured.UnstructuredList{} + + u.SetGroupVersionKind(gvk) + + if err := k8sClient.List(context.TODO(), u, listOps); err != nil { + logger.Error("Not able to list ", zap.String("object", gvk.Kind), zap.Error(err)) + return err + } + + objOutputDir := filepath.Join(rootOutputPath, KindDirNames[gvk.Kind]) + if err := os.MkdirAll(objOutputDir, os.ModePerm); err != nil { + return err + } + + for idx := range u.Items { + clusterData, err := yaml.Marshal(u.Items[idx]) + if err != nil { + return err + } + + fileName := filepath.Join(objOutputDir, + u.Items[idx].GetName()+FileSuffix) + + if err := populateScraperDir(clusterData, fileName); err != nil { + return err + } + } + + logger.Info("Successfully saved ", zap.String("object", gvk.Kind), + zap.Int("no of objects", len(u.Items)), zap.String("namespace", ns)) + + return nil +} + +func makeTarAndClean(pathToStore string) error { + var buf bytes.Buffer + + if err := compress(pathToStore, &buf); err != nil { + return err + } + + // write the .tar.gzip + fileToWrite, err := os.OpenFile(filepath.Join(pathToStore, TarName), + os.O_CREATE|os.O_RDWR, 0650) //nolint:gocritic // file permission + if err != nil { + return err + } + + if _, err := io.Copy(fileToWrite, &buf); err != nil { + return err + } + + return os.RemoveAll(filepath.Join(pathToStore, RootOutputDir)) +} + +func capturePodLogs(ctx context.Context, logger *zap.Logger, clientSet *kubernetes.Clientset, ns, + rootOutputPath string) error { + pods, err := clientSet.CoreV1().Pods(ns).List(ctx, metav1.ListOptions{}) + if err != nil { + logger.Error("Not able to list ", zap.String("object", PodKind), zap.Error(err)) + return err + } + + for podIndex := range pods.Items { + podData, err := yaml.Marshal(pods.Items[podIndex]) + if err != nil { + return err + } + + podLogsDir := filepath.Join(rootOutputPath, KindDirNames[PodKind], pods.Items[podIndex].Name, "logs") + if err := os.MkdirAll(podLogsDir, os.ModePerm); err != nil { + return err + } + + fileName := filepath.Join(podLogsDir, "..", pods.Items[podIndex].Name+FileSuffix) + + if err := populateScraperDir(podData, fileName); err != nil { + return err + } + + for containerIndex := range pods.Items[podIndex].Spec.Containers { + containerName := pods.Items[podIndex].Spec.Containers[containerIndex].Name + if err := captureContainerLogs(logger, clientSet, pods.Items[podIndex].Name, containerName, ns, + podLogsDir, false); err != nil { + return err + } + + if err := captureContainerLogs(logger, clientSet, pods.Items[podIndex].Name, containerName, ns, + podLogsDir, true); err != nil { + return err + } + } + + for initContainerIndex := range pods.Items[podIndex].Spec.InitContainers { + initContainerName := pods.Items[podIndex].Spec.InitContainers[initContainerIndex].Name + if err := captureContainerLogs(logger, clientSet, pods.Items[podIndex].Name, initContainerName, ns, + podLogsDir, false); err != nil { + return err + } + + if err := captureContainerLogs(logger, clientSet, pods.Items[podIndex].Name, initContainerName, ns, + podLogsDir, true); err != nil { + return err + } + } + } + + logger.Info("Successfully saved ", zap.String("object", PodKind), + zap.Int("no of objects", len(pods.Items)), zap.String("namespace", ns)) + + return nil +} + +func captureContainerLogs(logger *zap.Logger, clientSet *kubernetes.Clientset, podName, containerName, ns, + podLogsDir string, previous bool) error { + podLogOpts := corev1.PodLogOptions{ + Container: containerName, + Previous: previous, + } + req := clientSet.CoreV1().Pods(ns).GetLogs(podName, &podLogOpts) + + podLogs, reqErr := req.Stream(context.TODO()) + if reqErr != nil { + logger.Error("Container's logs not found ", zap.String("container", containerName), + zap.Bool("previous", previous), zap.Error(reqErr)) + return nil + } + + buf := new(bytes.Buffer) + if _, err := io.Copy(buf, podLogs); err != nil { + return err + } + + if err := podLogs.Close(); err != nil { + return err + } + + if previous { + podLogsDir = filepath.Join(podLogsDir, "previous") + if err := os.MkdirAll(podLogsDir, os.ModePerm); err != nil { + return err + } + } + + fileName := filepath.Join(podLogsDir, containerName+".log") + + return populateScraperDir(buf.Bytes(), fileName) +} + +func populateScraperDir(data []byte, fileName string) error { + fileName = filepath.Clean(fileName) + + err := os.WriteFile(fileName, data, 0600) //nolint:gocritic // file permission + if err != nil { + return err + } + + return nil +} + +func compress(src string, buf io.Writer) error { + // tar > gzip > buf + zr := gzip.NewWriter(buf) + tw := tar.NewWriter(zr) + // walk through every file in the folder + rootOutputPath := filepath.Join(src, RootOutputDir) + err := filepath.Walk(rootOutputPath, func(file string, fi os.FileInfo, err error) error { + // generate tar header + header, fileErr := tar.FileInfoHeader(fi, file) + if fileErr != nil { + return fileErr + } + + // must provide real name + // (see https://golang.org/src/archive/tar/common.go?#L626) + + header.Name = strings.TrimPrefix(file, src) + // write header + if fileErr := tw.WriteHeader(header); fileErr != nil { + return fileErr + } + // if not a dir, write file content + if !fi.IsDir() { + data, fileErr := os.Open(file) + if fileErr != nil { + return fileErr + } + if _, fileErr := io.Copy(tw, data); fileErr != nil { + return fileErr + } + } + + return nil + }) + + if err != nil { + return err + } + // produce tar + if err := tw.Close(); err != nil { + return err + } + // produce gzip + return zr.Close() +} + +func appendOneEvent(data *[]byte, e *corev1.Event) { + event := fmt.Sprintf("%s\t%s\t%s\t%s/%s\t%v\n", getInterval(e), e.Type, e.Reason, e.InvolvedObject.Kind, + e.InvolvedObject.Name, strings.TrimSpace(e.Message)) + *data = append(*data, event...) +} + +func captureEvents(ctx context.Context, logger *zap.Logger, clientSet *kubernetes.Clientset, namespace, + rootOutputPath string) error { + listOptions := metav1.ListOptions{Limit: 500} + + e := clientSet.CoreV1().Events(namespace) + el := &corev1.EventList{ + TypeMeta: metav1.TypeMeta{ + Kind: "EventList", + APIVersion: "v1", + }, + } + err := runtimeresource.FollowContinue(&listOptions, + func(options metav1.ListOptions) (runtime.Object, error) { + newEvents, err := e.List(ctx, options) + if err != nil { + return nil, runtimeresource.EnhanceListError(err, options, "events") + } + el.Items = append(el.Items, newEvents.Items...) + return newEvents, nil + }) + + if err != nil { + return err + } + + if len(el.Items) == 0 { + logger.Info("No events found in namespace", zap.String("namespace", namespace)) + return nil + } + + data := []byte("LAST SEEN\tTYPE\tREASON\tOBJECT\tMESSAGE\n") + for idx := range el.Items { + appendOneEvent(&data, &el.Items[idx]) + } + + objOutputDir := filepath.Join(rootOutputPath, KindDirNames[EventKind]) + if err := os.MkdirAll(objOutputDir, os.ModePerm); err != nil { + return err + } + + fileName := filepath.Join(objOutputDir, KindDirNames[EventKind]+".log") + + if err := populateScraperDir(data, fileName); err != nil { + return err + } + + logger.Info("Successfully saved ", zap.String("object", "Events"), + zap.Int("no of objects", len(el.Items)), zap.String("namespace", namespace)) + + return nil +} + +func getInterval(e *corev1.Event) string { + var interval string + + firstTimestampSince := translateMicroTimestampSince(e.EventTime) + if e.EventTime.IsZero() { + firstTimestampSince = translateTimestampSince(e.FirstTimestamp) + } + + switch { + case e.Series != nil: + interval = fmt.Sprintf("%s (x%d over %s)", translateMicroTimestampSince(e.Series.LastObservedTime), + e.Series.Count, firstTimestampSince) + + case e.Count > 1: + interval = fmt.Sprintf("%s (x%d over %s)", translateTimestampSince(e.LastTimestamp), e.Count, firstTimestampSince) + + default: + interval = firstTimestampSince + } + + return interval +} + +// translateMicroTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateMicroTimestampSince(timestamp metav1.MicroTime) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} + +// translateTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateTimestampSince(timestamp metav1.Time) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} diff --git a/pkg/collectinfo/pkg_suite_test.go b/pkg/collectinfo/pkg_suite_test.go new file mode 100644 index 0000000..d042db4 --- /dev/null +++ b/pkg/collectinfo/pkg_suite_test.go @@ -0,0 +1,102 @@ +package collectinfo_test + +import ( + goctx "context" + "path/filepath" + "testing" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/gexec" + corev1 "k8s.io/api/core/v1" + apixv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/envtest" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/log/zap" +) + +var ( + testEnv *envtest.Environment + cfg *rest.Config + k8sClient client.Client + namespace = "testns" + k8sClientset *kubernetes.Clientset +) + +func TestPkg(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Pkg Suite") +} + +var _ = BeforeSuite( + func() { + logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) + + By("Bootstrapping test environment") + testEnv = &envtest.Environment{ + CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")}, + ErrorIfCRDPathMissing: true, + } + var err error + + cfg, err = testEnv.Start() + Expect(err).NotTo(HaveOccurred()) + Expect(cfg).NotTo(BeNil()) + + scheme := runtime.NewScheme() + + err = clientgoscheme.AddToScheme(scheme) + Expect(err).NotTo(HaveOccurred()) + + err = apixv1beta1.AddToScheme(scheme) + Expect(err).NotTo(HaveOccurred()) + + // +kubebuilder:scaffold:scheme + + k8sClient, err = client.New( + cfg, client.Options{Scheme: scheme}, + ) + Expect(err).NotTo(HaveOccurred()) + Expect(k8sClient).NotTo(BeNil()) + + k8sClientset = kubernetes.NewForConfigOrDie(cfg) + Expect(k8sClient).NotTo(BeNil()) + + ctx := goctx.TODO() + err = createNamespace(k8sClient, ctx, namespace) + Expect(err).NotTo(HaveOccurred()) + }) + +var _ = AfterSuite( + func() { + By("Tearing down the test environment") + gexec.KillAndWait(5 * time.Second) + err := testEnv.Stop() + Expect(err).ToNot(HaveOccurred()) + }, +) + +func createNamespace( + k8sClient client.Client, ctx goctx.Context, name string, +) error { + ns := &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + + err := k8sClient.Create(ctx, ns) + if err != nil && !errors.IsAlreadyExists(err) { + return err + } + + return nil +} diff --git a/pkg/collectinfo/resources.go b/pkg/collectinfo/resources.go new file mode 100644 index 0000000..9d406b0 --- /dev/null +++ b/pkg/collectinfo/resources.go @@ -0,0 +1,43 @@ +package collectinfo + +import ( + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + NodeKind = "Node" + PVCKind = "PersistentVolumeClaim" + STSKind = "StatefulSet" + SCKind = "StorageClass" + AerospikeClusterKind = "AerospikeCluster" + PodKind = "Pod" + EventKind = "Event" +) + +var ( + KindDirNames = map[string]string{ + NodeKind: "nodes", + PVCKind: "persistentvolumeclaims", + STSKind: "statefulsets", + SCKind: "storageclasses", + AerospikeClusterKind: "aerospikeclusters", + PodKind: "pods", + EventKind: "events", + } + gvkListNSScoped = []schema.GroupVersionKind{ + corev1.SchemeGroupVersion.WithKind(PVCKind), + appsv1.SchemeGroupVersion.WithKind(STSKind), + { + Group: "asdb.aerospike.com", + Version: "v1beta1", + Kind: AerospikeClusterKind, + }, + } + gvkListClusterScoped = []schema.GroupVersionKind{ + corev1.SchemeGroupVersion.WithKind(NodeKind), + v1.SchemeGroupVersion.WithKind(SCKind), + } +)