--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.3 name: postgresqls.acid.zalan.do spec: group: acid.zalan.do names: categories: - all kind: postgresql listKind: postgresqlList plural: postgresqls shortNames: - pg singular: postgresql scope: Namespaced versions: - additionalPrinterColumns: - description: Team responsible for Postgres cluster jsonPath: .spec.teamId name: Team type: string - description: PostgreSQL version jsonPath: .spec.postgresql.version name: Version type: string - description: Number of Pods per Postgres cluster jsonPath: .spec.numberOfInstances name: Pods type: integer - description: Size of the bound volume jsonPath: .spec.volume.size name: Volume type: string - description: Requested CPU for Postgres containers jsonPath: .spec.resources.requests.cpu name: CPU-Request type: string - description: Requested memory for Postgres containers jsonPath: .spec.resources.requests.memory name: Memory-Request type: string - description: Age of the PostgreSQL cluster jsonPath: .metadata.creationTimestamp name: Age type: date - description: Current sync status of postgresql resource jsonPath: .status.PostgresClusterStatus name: Status type: string name: v1 schema: openAPIV3Schema: description: Postgresql defines PostgreSQL Custom Resource Definition Object. properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: PostgresSpec defines the specification for the PostgreSQL TPR. properties: additionalVolumes: items: description: AdditionalVolume specs additional optional volumes for statefulset properties: isSubPathExpr: type: boolean mountPath: type: string name: type: string subPath: type: string targetContainers: items: type: string nullable: true type: array volumeSource: type: object x-kubernetes-preserve-unknown-fields: true required: - mountPath - name - volumeSource type: object type: array allowedSourceRanges: description: load balancers' source ranges are the same for master and replica services items: pattern: ^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\/(\d|[1-2]\d|3[0-2])$ type: string nullable: true type: array clone: description: CloneDescription describes which cluster the new should clone and up to which point in time properties: cluster: type: string s3_access_key_id: type: string s3_endpoint: type: string s3_force_path_style: type: boolean s3_secret_access_key: type: string s3_wal_path: type: string timestamp: description: |- The regexp matches the date-time format (RFC 3339 Section 5.6) that specifies a timezone as an offset relative to UTC Example: 1996-12-19T16:39:57-08:00 Note: this field requires a timezone pattern: ^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([+-]([01][0-9]|2[0-3]):[0-5][0-9]))$ type: string uid: format: uuid type: string required: - cluster type: object connectionPooler: description: |- ConnectionPooler Options for connection pooler pgbouncer-large (with higher resources) or odyssey-small (with smaller resources) Type string `json:"type,omitempty"` makes sense to expose. E.g. pool size (min/max boundaries), max client connections etc. properties: dockerImage: type: string maxDBConnections: format: int32 type: integer mode: enum: - session - transaction type: string numberOfInstances: format: int32 minimum: 1 type: integer resources: description: Resources describes requests and limits for the cluster resouces. properties: limits: description: ResourceDescription describes CPU and memory resources defined for a cluster. properties: cpu: description: |- Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits. This is because the Kubernetes CPU resource has millis as the maximum precision. The actual values are checked in code because the regular expression would be huge and horrible and not very helpful in validation error messages; this one checks only the format of the given number. https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu Note: the value specified here must not be zero or be lower than the corresponding request. pattern: ^(\d+m|\d+(\.\d{1,3})?)$ type: string hugepages-1Gi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string hugepages-2Mi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string memory: description: |- You can express memory as a plain integer or as a fixed-point integer using one of these suffixes: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory Note: the value specified here must not be zero or be higher than the corresponding limit. pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string type: object requests: description: ResourceDescription describes CPU and memory resources defined for a cluster. properties: cpu: description: |- Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits. This is because the Kubernetes CPU resource has millis as the maximum precision. The actual values are checked in code because the regular expression would be huge and horrible and not very helpful in validation error messages; this one checks only the format of the given number. https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu Note: the value specified here must not be zero or be lower than the corresponding request. pattern: ^(\d+m|\d+(\.\d{1,3})?)$ type: string hugepages-1Gi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string hugepages-2Mi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string memory: description: |- You can express memory as a plain integer or as a fixed-point integer using one of these suffixes: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory Note: the value specified here must not be zero or be higher than the corresponding limit. pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string type: object type: object schema: type: string user: type: string type: object databases: additionalProperties: type: string description: |- Note: usernames specified here as database owners must be declared in the users key of the spec key. type: object dockerImage: type: string enableConnectionPooler: type: boolean enableLogicalBackup: type: boolean enableMasterLoadBalancer: description: |- vars that enable load balancers are pointers because it is important to know if any of them is omitted from the Postgres manifest in that case the var evaluates to nil and the value is taken from the operator config type: boolean enableMasterPoolerLoadBalancer: type: boolean enableReplicaConnectionPooler: type: boolean enableReplicaLoadBalancer: type: boolean enableReplicaPoolerLoadBalancer: type: boolean enableShmVolume: type: boolean env: nullable: true type: array init_containers: description: deprecated json tags type: object x-kubernetes-preserve-unknown-fields: true initContainers: nullable: true type: array logicalBackupRetention: type: string logicalBackupSchedule: pattern: ^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$ type: string maintenanceWindows: items: pattern: '^\ *((Mon|Tue|Wed|Thu|Fri|Sat|Sun):(2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))-((2[0-3]|[01]?\d):([0-5]?\d)|(2[0-3]|[01]?\d):([0-5]?\d))\ *$' type: string type: array masterServiceAnnotations: additionalProperties: type: string description: MasterServiceAnnotations takes precedence over ServiceAnnotations for master role if not empty type: object nodeAffinity: description: Node affinity is a group of node affinity scheduling rules. properties: preferredDuringSchedulingIgnoredDuringExecution: description: |- The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. items: description: |- An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). 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, and an operator that relates the key and values. 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. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. type: string values: description: |- An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic 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, and an operator that relates the key and values. 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. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. type: string values: description: |- An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic weight: description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. format: int32 type: integer required: - preference - weight type: object type: array x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. 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. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. 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, and an operator that relates the key and values. 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. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. type: string values: description: |- An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic 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, and an operator that relates the key and values. 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. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. type: string values: description: |- An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic type: object x-kubernetes-map-type: atomic type: array x-kubernetes-list-type: atomic required: - nodeSelectorTerms type: object x-kubernetes-map-type: atomic type: object numberOfInstances: format: int32 minimum: 0 type: integer patroni: description: Patroni contains Patroni-specific configuration properties: failsafe_mode: type: boolean initdb: additionalProperties: type: string type: object loop_wait: format: int32 type: integer maximum_lag_on_failover: format: int64 type: integer pg_hba: items: type: string type: array retry_timeout: format: int32 type: integer slots: additionalProperties: additionalProperties: type: string type: object type: object synchronous_mode: type: boolean synchronous_mode_strict: type: boolean synchronous_node_count: format: int32 type: integer ttl: format: int32 type: integer type: object pod_priority_class_name: description: deprecated type: string podAnnotations: additionalProperties: type: string type: object podPriorityClassName: type: string postgresql: description: PostgresqlParam describes PostgreSQL version and pairs of configuration parameter name - values. properties: parameters: additionalProperties: type: string type: object version: enum: - 13 - 14 - 15 - 16 - 17 type: string required: - version type: object preparedDatabases: additionalProperties: description: PreparedDatabase describes elements to be bootstrapped properties: defaultUsers: type: boolean extensions: additionalProperties: type: string type: object schemas: additionalProperties: description: PreparedSchema describes elements to be bootstrapped per schema properties: defaultRoles: type: boolean defaultUsers: type: boolean type: object type: object secretNamespace: type: string type: object type: object replicaLoadBalancer: description: deprecated type: boolean replicaServiceAnnotations: additionalProperties: type: string description: ReplicaServiceAnnotations takes precedence over ServiceAnnotations for replica role if not empty type: object resources: description: Resources describes requests and limits for the cluster resouces. properties: limits: description: ResourceDescription describes CPU and memory resources defined for a cluster. properties: cpu: description: |- Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits. This is because the Kubernetes CPU resource has millis as the maximum precision. The actual values are checked in code because the regular expression would be huge and horrible and not very helpful in validation error messages; this one checks only the format of the given number. https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu Note: the value specified here must not be zero or be lower than the corresponding request. pattern: ^(\d+m|\d+(\.\d{1,3})?)$ type: string hugepages-1Gi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string hugepages-2Mi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string memory: description: |- You can express memory as a plain integer or as a fixed-point integer using one of these suffixes: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory Note: the value specified here must not be zero or be higher than the corresponding limit. pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string type: object requests: description: ResourceDescription describes CPU and memory resources defined for a cluster. properties: cpu: description: |- Decimal natural followed by m, or decimal natural followed by dot followed by up to three decimal digits. This is because the Kubernetes CPU resource has millis as the maximum precision. The actual values are checked in code because the regular expression would be huge and horrible and not very helpful in validation error messages; this one checks only the format of the given number. https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu Note: the value specified here must not be zero or be lower than the corresponding request. pattern: ^(\d+m|\d+(\.\d{1,3})?)$ type: string hugepages-1Gi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string hugepages-2Mi: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string memory: description: |- You can express memory as a plain integer or as a fixed-point integer using one of these suffixes: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory Note: the value specified here must not be zero or be higher than the corresponding limit. pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string type: object type: object schedulerName: type: string serviceAnnotations: additionalProperties: type: string type: object sidecars: nullable: true type: array spiloFSGroup: format: int64 type: integer spiloRunAsGroup: format: int64 type: integer spiloRunAsUser: format: int64 type: integer standby: oneOf: - required: - s3_wal_path - required: - gs_wal_path - required: - standby_host description: StandbyDescription contains remote primary config or s3/gs wal path properties: gs_wal_path: type: string s3_wal_path: type: string standby_host: type: string standby_port: type: string type: object streams: items: description: Stream defines properties for creating FabricEventStream resources properties: applicationId: type: string batchSize: format: int32 type: integer cpu: pattern: ^(\d+m|\d+(\.\d{1,3})?)$ type: string database: type: string enableRecovery: type: boolean filter: additionalProperties: type: string type: object memory: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string tables: additionalProperties: description: StreamTable defines properties of outbox tables for FabricEventStreams properties: eventType: type: string idColumn: type: string ignoreRecovery: type: boolean payloadColumn: type: string recoveryEventType: type: string required: - eventType type: object type: object required: - applicationId - database - tables type: object type: array teamId: type: string tls: description: TLSDescription specs TLS properties properties: caFile: type: string caSecretName: type: string certificateFile: type: string privateKeyFile: type: string secretName: type: string required: - secretName type: object tolerations: items: description: |- The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . properties: effect: description: |- Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. type: string key: description: |- Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. type: string operator: description: |- Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. type: string tolerationSeconds: description: |- TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. format: int64 type: integer value: description: |- Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. type: string type: object type: array useLoadBalancer: description: |- deprecated load balancer settings maintained for backward compatibility see "Load balancers" operator docs type: boolean users: additionalProperties: description: UserFlags defines flags (such as superuser, nologin) that could be assigned to individual users items: enum: - bypassrls - BYPASSRLS - nobypassrls - NOBYPASSRLS - createdb - CREATEDB - nocreatedb - NOCREATEDB - createrole - CREATEROLE - nocreaterole - NOCREATEROLE - inherit - INHERIT - noinherit - NOINHERIT - login - LOGIN - nologin - NOLOGIN - replication - REPLICATION - noreplication - NOREPLICATION - superuser - SUPERUSER - nosuperuser - NOSUPERUSER type: string type: array type: object usersIgnoringSecretRotation: items: type: string nullable: true type: array usersWithInPlaceSecretRotation: items: type: string nullable: true type: array usersWithSecretRotation: items: type: string nullable: true type: array volume: description: Volume describes a single volume in the manifest. properties: iops: format: int64 type: integer isSubPathExpr: type: boolean selector: description: |- A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. properties: matchExpressions: description: matchExpressions is a list of label selector requirements. The requirements are ANDed. items: description: |- A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. properties: key: description: key is the label key that the selector applies to. type: string operator: description: |- operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. type: string values: description: |- values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. items: type: string type: array x-kubernetes-list-type: atomic required: - key - operator type: object type: array x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string description: |- matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic size: pattern: ^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$ type: string storageClass: type: string subPath: type: string throughput: format: int64 type: integer type: type: string required: - size type: object required: - numberOfInstances - postgresql - teamId - volume type: object status: description: PostgresStatus contains status of the PostgreSQL cluster (running, creation failed etc.) properties: PostgresClusterStatus: type: string required: - PostgresClusterStatus type: object required: - metadata - spec type: object served: true storage: true subresources: status: {}