/
postgres_version_types.go
117 lines (98 loc) · 4.77 KB
/
postgres_version_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
Copyright AppsCode Inc. and Contributors
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 v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
appcat "kmodules.xyz/custom-resources/apis/appcatalog/v1alpha1"
)
const (
ResourceCodePostgresVersion = "pgversion"
ResourceKindPostgresVersion = "PostgresVersion"
ResourceSingularPostgresVersion = "postgresversion"
ResourcePluralPostgresVersion = "postgresversions"
)
// PostgresVersion defines a Postgres database version.
// +genclient
// +genclient:nonNamespaced
// +genclient:skipVerbs=updateStatus
// +k8s:openapi-gen=true
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:resource:path=postgresversions,singular=postgresversion,scope=Cluster,shortName=pgversion,categories={datastore,kubedb,appscode}
// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version"
// +kubebuilder:printcolumn:name="Distribution",type="string",JSONPath=".spec.distribution"
// +kubebuilder:printcolumn:name="DB_IMAGE",type="string",JSONPath=".spec.db.image"
// +kubebuilder:printcolumn:name="Deprecated",type="boolean",JSONPath=".spec.deprecated"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
type PostgresVersion struct {
metav1.TypeMeta `json:",inline,omitempty"`
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
Spec PostgresVersionSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
}
// PostgresVersionSpec is the spec for postgres version
type PostgresVersionSpec struct {
// Version
Version string `json:"version" protobuf:"bytes,1,opt,name=version"`
// Distribution
Distribution PostgresDistro `json:"distribution,omitempty" protobuf:"bytes,2,opt,name=distribution,casttype=PostgresDistro"`
//init container image
InitContainer PostgresVersionInitContainer `json:"initContainer,omitempty" protobuf:"bytes,3,opt,name=initContainer"`
// Database Image
DB PostgresVersionDatabase `json:"db" protobuf:"bytes,4,opt,name=db"`
// Exporter Image
Exporter PostgresVersionExporter `json:"exporter" protobuf:"bytes,5,opt,name=exporter"`
// Coordinator Image
Coordinator PostgresVersionCoordinator `json:"coordinator,omitempty" protobuf:"bytes,6,opt,name=coordinator"`
// Deprecated versions usable but regarded as obsolete and best avoided, typically due to having been superseded.
// +optional
Deprecated bool `json:"deprecated,omitempty" protobuf:"varint,7,opt,name=deprecated"`
// PSP names
PodSecurityPolicies PostgresVersionPodSecurityPolicy `json:"podSecurityPolicies" protobuf:"bytes,8,opt,name=podSecurityPolicies"`
// Stash defines backup and restore task definitions.
// +optional
Stash appcat.StashAddonSpec `json:"stash,omitempty" protobuf:"bytes,9,opt,name=stash"`
}
// PostgresVersionInitContainer is the Postgres init container image
type PostgresVersionInitContainer struct {
Image string `json:"image" protobuf:"bytes,1,opt,name=image"`
}
// PostgresVersionDatabase is the Postgres Database image
type PostgresVersionDatabase struct {
Image string `json:"image" protobuf:"bytes,1,opt,name=image"`
}
// PostgresVersionCoordinator is the Postgres leader elector image
type PostgresVersionCoordinator struct {
Image string `json:"image" protobuf:"bytes,1,opt,name=image"`
}
// PostgresVersionExporter is the image for the Postgres exporter
type PostgresVersionExporter struct {
Image string `json:"image" protobuf:"bytes,1,opt,name=image"`
}
// PostgresVersionPodSecurityPolicy is the Postgres pod security policies
type PostgresVersionPodSecurityPolicy struct {
DatabasePolicyName string `json:"databasePolicyName" protobuf:"bytes,1,opt,name=databasePolicyName"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// PostgresVersionList is a list of PostgresVersions
type PostgresVersionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// Items is a list of PostgresVersion CRD objects
Items []PostgresVersion `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"`
}
// +kubebuilder:validation:Enum=PostgreSQL;TimescaleDB
type PostgresDistro string
const (
PostgresDistroPostgres PostgresDistro = "PostgreSQL"
PostgresDistroTimescaleDB PostgresDistro = "TimescaleDB"
)