/
postgrest_types.go
90 lines (71 loc) · 3.03 KB
/
postgrest_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
/*
Copyright 2023.
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 v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
// PostgREST properties
type PostgrestSpec struct {
// Schema for this PostgREST instance
// +operator-sdk:csv:customresourcedefinitions:type=spec
Schema string `json:"schema,omitempty"` // PGRST_DB_SCHEMAS
// Tables to expose (only if anonymous role is auto-generated)
// +operator-sdk:csv:customresourcedefinitions:type=spec
Tables []string `json:"tables,omitempty"`
// Comma-separated string of permitted actions (only if anonymous role is auto-generated)
// +operator-sdk:csv:customresourcedefinitions:type=spec
Grants string `json:"grants,omitempty"`
// Role used by PostgREST to authenticate on the database; if not specified, it will be auto-generated as <CR name>_postgrest_role'
// +operator-sdk:csv:customresourcedefinitions:type=spec
AnonRole string `json:"anonRole,omitempty"` // PGRST_DB_ANON_ROLE
// Properties to connect to Postgres
// +operator-sdk:csv:customresourcedefinitions:type=spec
Connection ConnectionProperties `json:"connection,omitempty"`
}
type ConnectionProperties struct {
Host string `json:"host,omitempty"`
Port int `json:"port,omitempty"`
Database string `json:"database,omitempty"`
User string `json:"user,omitempty"`
Password string `json:"password,omitempty"`
// Additional connection properties as query parameters (e.g., sslmode=disable)
ExtraParams string `json:"extraParams,omitempty"`
// Alternative to user and password properties; secret will have to contain USER and PASSWORD, optionally POSTGRES_URL
SecretName string `json:"secretName,omitempty"`
}
// PostgREST status
type PostgrestStatus struct {
// +operator-sdk:csv:customresourcedefinitions:type=status
State string `json:"state,omitempty" patchStrategy:"merge"`
Message string `json:"message,omitempty" patchStrategy:"merge"`
}
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
// Schema for the postgrests API
type Postgrest struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec PostgrestSpec `json:"spec,omitempty"`
Status PostgrestStatus `json:"status,omitempty"`
}
//+kubebuilder:object:root=true
// List of Postgrest
type PostgrestList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Postgrest `json:"items"`
}
func init() {
SchemeBuilder.Register(&Postgrest{}, &PostgrestList{})
}