This repository has been archived by the owner on Mar 14, 2023. It is now read-only.
/
grafana_types.go
134 lines (110 loc) · 4.61 KB
/
grafana_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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
Copyright 2022.
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 v1beta1
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type OperatorStageName string
type OperatorStageStatus string
const (
OperatorStageGrafanaConfig OperatorStageName = "config"
OperatorStageAdminUser OperatorStageName = "admin user"
OperatorStagePvc OperatorStageName = "pvc"
OperatorStageServiceAccount OperatorStageName = "service account"
OperatorStageService OperatorStageName = "service"
OperatorStageIngress OperatorStageName = "ingress"
OperatorStagePlugins OperatorStageName = "plugins"
OperatorStageDeployment OperatorStageName = "deployment"
OperatorStageComplete OperatorStageName = "complete"
)
const (
OperatorStageResultSuccess OperatorStageStatus = "success"
OperatorStageResultFailed OperatorStageStatus = "failed"
OperatorStageResultInProgress OperatorStageStatus = "in progress"
)
// temporary values passed between reconciler stages
type OperatorReconcileVars struct {
// used to restart the Grafana container when the config changes
ConfigHash string
// env var value for installed plugins
Plugins string
}
// GrafanaSpec defines the desired state of Grafana
type GrafanaSpec struct {
// +kubebuilder:pruning:PreserveUnknownFields
Config map[string]map[string]string `json:"config,omitempty"`
Ingress *IngressNetworkingV1 `json:"ingress,omitempty"`
Route *RouteOpenshiftV1 `json:"route,omitempty"`
Service *ServiceV1 `json:"service,omitempty"`
Deployment *DeploymentV1 `json:"deployment,omitempty"`
PersistentVolumeClaim *PersistentVolumeClaimV1 `json:"persistentVolumeClaim,omitempty"`
ServiceAccount *ServiceAccountV1 `json:"serviceAccount,omitempty"`
Client *GrafanaClient `json:"client,omitempty"`
Jsonnet *JsonnetConfig `json:"jsonnet,omitempty"`
External *External `json:"external,omitempty"`
}
type External struct {
URL string `json:"url"`
ApiKey *v1.SecretKeySelector `json:"apiKey,omitempty"`
AdminUser *v1.SecretKeySelector `json:"adminUser,omitempty"`
AdminPassword *v1.SecretKeySelector `json:"adminPassword,omitempty"`
}
type JsonnetConfig struct {
LibraryLabelSelector *metav1.LabelSelector `json:"libraryLabelSelector,omitempty"`
}
// GrafanaClient contains the Grafana API client settings
type GrafanaClient struct {
// +nullable
TimeoutSeconds *int `json:"timeout,omitempty"`
// +nullable
PreferIngress *bool `json:"preferIngress,omitempty"`
}
// GrafanaStatus defines the observed state of Grafana
type GrafanaStatus struct {
Stage OperatorStageName `json:"stage,omitempty"`
StageStatus OperatorStageStatus `json:"stageStatus,omitempty"`
LastMessage string `json:"lastMessage,omitempty"`
AdminUrl string `json:"adminUrl,omitempty"`
Dashboards NamespacedResourceList `json:"dashboards,omitempty"`
Datasources NamespacedResourceList `json:"datasources,omitempty"`
Folders NamespacedResourceList `json:"folders,omitempty"`
}
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
// Grafana is the Schema for the grafanas API
type Grafana struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec GrafanaSpec `json:"spec,omitempty"`
Status GrafanaStatus `json:"status,omitempty"`
}
//+kubebuilder:object:root=true
// GrafanaList contains a list of Grafana
type GrafanaList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Grafana `json:"items"`
}
func init() {
SchemeBuilder.Register(&Grafana{}, &GrafanaList{})
}
func (in *Grafana) PreferIngress() bool {
return in.Spec.Client != nil && in.Spec.Client.PreferIngress != nil && *in.Spec.Client.PreferIngress
}
func (in *Grafana) IsInternal() bool {
return in.Spec.External == nil
}
func (in *Grafana) IsExternal() bool {
return in.Spec.External != nil
}