Adding CustomResourceDefinition Job and StatefulSet.
[ric-plt/ric-dep.git] / depRicKubernetesOperator / internal / controller / getStatefulSet.go
1 package controller\r
2 \r
3 import (\r
4         corev1 "k8s.io/api/core/v1"\r
5         metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
6 )\r
7 \r
8 \r
9 \r
10 func GetStatefulSet() []*appsv1.StatefulSet {\r
11 \r
12         statefulSet1 := &appsv1.StatefulSet{\r
13                 ObjectMeta: metav1.ObjectMeta{\r
14                         Namespace: "ricplt",\r
15                         Labels: map[string]string{\r
16                                 "app":      "ricplt-dbaas",\r
17                                 "chart":    "dbaas-2.0.0",\r
18                                 "heritage": "Helm",\r
19                                 "release":  "release-name",\r
20                         },\r
21                         Name: "statefulset-ricplt-dbaas-server",\r
22                 },\r
23                 Spec: appsv1.StatefulSetSpec{\r
24                         PodManagementPolicy: appsv1.PodManagementPolicyType("OrderedReady"),\r
25                         Replicas:            int32Ptr(1),\r
26                         Selector: &metav1.LabelSelector{\r
27                                 MatchLabels: map[string]string{\r
28                                         "app":     "ricplt-dbaas",\r
29                                         "release": "release-name",\r
30                                 },\r
31                         },\r
32                         ServiceName: "service-ricplt-dbaas-tcp",\r
33                         Template: corev1.PodTemplateSpec{\r
34                                 ObjectMeta: metav1.ObjectMeta{\r
35                                         Labels: map[string]string{\r
36                                                 "app":     "ricplt-dbaas",\r
37                                                 "release": "release-name",\r
38                                         },\r
39                                 },\r
40                                 Spec: corev1.PodSpec{\r
41                                         ImagePullSecrets: []corev1.LocalObjectReference{\r
42 \r
43                                                 corev1.LocalObjectReference{\r
44                                                         Name: "secret-nexus3-o-ran-sc-org-10002-o-ran-sc",\r
45                                                 },\r
46                                         },\r
47                                         ShareProcessNamespace:         boolPtr(true),\r
48                                         TerminationGracePeriodSeconds: int64Ptr(5),\r
49                                         Volumes: []corev1.Volume{\r
50 \r
51                                                 corev1.Volume{\r
52                                                         Name: "config",\r
53                                                         VolumeSource: corev1.VolumeSource{\r
54                                                                 ConfigMap: &corev1.ConfigMapVolumeSource{\r
55                                                                         LocalObjectReference: corev1.LocalObjectReference{\r
56                                                                                 Name: "configmap-ricplt-dbaas-config",\r
57                                                                         },\r
58                                                                 },\r
59                                                         },\r
60                                                 },\r
61                                         },\r
62                                         Containers: []corev1.Container{\r
63 \r
64                                                 corev1.Container{\r
65                                                         Command: []string{\r
66 \r
67                                                                 "redis-server",\r
68                                                         },\r
69                                                         EnvFrom: []corev1.EnvFromSource{\r
70 \r
71                                                                 corev1.EnvFromSource{\r
72                                                                         ConfigMapRef: &corev1.ConfigMapEnvSource{\r
73                                                                                 LocalObjectReference: corev1.LocalObjectReference{\r
74                                                                                         Name: "configmap-ricplt-dbaas-appconfig",\r
75                                                                                 },\r
76                                                                         },\r
77                                                                 },\r
78                                                         },\r
79                                                         LivenessProbe: &corev1.Probe{\r
80                                                                 PeriodSeconds: 5,\r
81                                                                 ProbeHandler: corev1.ProbeHandler{\r
82                                                                         Exec: &corev1.ExecAction{\r
83                                                                                 Command: []string{\r
84 \r
85                                                                                         "/bin/sh",\r
86                                                                                         "-c",\r
87                                                                                         "timeout 10 redis-cli -p 6379 ping",\r
88                                                                                 },\r
89                                                                         },\r
90                                                                 },\r
91                                                                 InitialDelaySeconds: 15,\r
92                                                         },\r
93                                                         Stdin: false,\r
94                                                         TTY:   false,\r
95                                                         VolumeMounts: []corev1.VolumeMount{\r
96 \r
97                                                                 corev1.VolumeMount{\r
98                                                                         MountPath: "/data",\r
99                                                                         Name:      "config",\r
100                                                                         ReadOnly:  false,\r
101                                                                 },\r
102                                                         },\r
103                                                         Args: []string{\r
104 \r
105                                                                 "/data/redis.conf",\r
106                                                         },\r
107                                                         Image: "nexus3.o-ran-sc.org:10002/o-ran-sc/ric-plt-dbaas:0.6.1",\r
108                                                         Name:  "container-ricplt-dbaas-redis",\r
109                                                         Ports: []corev1.ContainerPort{\r
110 \r
111                                                                 corev1.ContainerPort{\r
112                                                                         ContainerPort: 6379,\r
113                                                                         Name:          "redis",\r
114                                                                 },\r
115                                                         },\r
116                                                         ReadinessProbe: &corev1.Probe{\r
117                                                                 InitialDelaySeconds: 15,\r
118                                                                 PeriodSeconds:       5,\r
119                                                                 ProbeHandler: corev1.ProbeHandler{\r
120                                                                         Exec: &corev1.ExecAction{\r
121                                                                                 Command: []string{\r
122 \r
123                                                                                         "/bin/sh",\r
124                                                                                         "-c",\r
125                                                                                         "timeout 10 redis-cli -p 6379 ping",\r
126                                                                                 },\r
127                                                                         },\r
128                                                                 },\r
129                                                         },\r
130                                                         StdinOnce: false,\r
131                                                 },\r
132                                         },\r
133                                         HostIPC:     false,\r
134                                         HostNetwork: false,\r
135                                         HostPID:     false,\r
136                                 },\r
137                         },\r
138                         UpdateStrategy: appsv1.StatefulSetUpdateStrategy{\r
139                                 Type: appsv1.StatefulSetUpdateStrategyType("RollingUpdate"),\r
140                         },\r
141                 },\r
142                 TypeMeta: metav1.TypeMeta{\r
143                         APIVersion: "apps/v1",\r
144                         Kind:       "StatefulSet",\r
145                 },\r
146         }\r
147 \r
148         statefulSet2 := &appsv1.StatefulSet{\r
149                 ObjectMeta: metav1.ObjectMeta{\r
150                         Name: "redis-cluster",\r
151                 },\r
152                 Spec: appsv1.StatefulSetSpec{\r
153                         Replicas: int32Ptr(9),\r
154                         Selector: &metav1.LabelSelector{\r
155                                 MatchLabels: map[string]string{\r
156                                         "app.kubernetes.io/instance": "release-name",\r
157                                         "app.kubernetes.io/name":     "redis-cluster",\r
158                                 },\r
159                         },\r
160                         Template: corev1.PodTemplateSpec{\r
161                                 ObjectMeta: metav1.ObjectMeta{\r
162                                         Labels: map[string]string{\r
163                                                 "app.kubernetes.io/instance": "release-name",\r
164                                                 "app.kubernetes.io/name":     "redis-cluster",\r
165                                         },\r
166                                 },\r
167                                 Spec: corev1.PodSpec{\r
168                                         Volumes: []corev1.Volume{\r
169 \r
170                                                 corev1.Volume{\r
171                                                         Name: "conf",\r
172                                                         VolumeSource: corev1.VolumeSource{\r
173                                                                 ConfigMap: &corev1.ConfigMapVolumeSource{\r
174                                                                         DefaultMode: int32Ptr(493),\r
175                                                                         LocalObjectReference: corev1.LocalObjectReference{\r
176                                                                                 Name: "redis-cluster-cm",\r
177                                                                         },\r
178                                                                 },\r
179                                                         },\r
180                                                 },\r
181                                         },\r
182                                         Containers: []corev1.Container{\r
183 \r
184                                                 corev1.Container{\r
185                                                         Stdin:     false,\r
186                                                         StdinOnce: false,\r
187                                                         TTY:       false,\r
188                                                         Command: []string{\r
189 \r
190                                                                 "/conf/update-node.sh",\r
191                                                                 "redis-server",\r
192                                                                 "/conf/redis.conf",\r
193                                                         },\r
194                                                         Name: "redis",\r
195                                                         Ports: []corev1.ContainerPort{\r
196 \r
197                                                                 corev1.ContainerPort{\r
198                                                                         ContainerPort: 6379,\r
199                                                                         Name:          "client",\r
200                                                                 },\r
201                                                                 corev1.ContainerPort{\r
202                                                                         Name:          "gossip",\r
203                                                                         ContainerPort: 16379,\r
204                                                                 },\r
205                                                         },\r
206                                                         VolumeMounts: []corev1.VolumeMount{\r
207 \r
208                                                                 corev1.VolumeMount{\r
209                                                                         Name:      "conf",\r
210                                                                         ReadOnly:  false,\r
211                                                                         MountPath: "/conf",\r
212                                                                 },\r
213                                                                 corev1.VolumeMount{\r
214                                                                         MountPath: "/data",\r
215                                                                         Name:      "data",\r
216                                                                         ReadOnly:  false,\r
217                                                                 },\r
218                                                         },\r
219                                                         Env: []corev1.EnvVar{\r
220 \r
221                                                                 corev1.EnvVar{\r
222                                                                         Name: "POD_IP",\r
223                                                                         ValueFrom: &corev1.EnvVarSource{\r
224                                                                                 FieldRef: &corev1.ObjectFieldSelector{\r
225                                                                                         FieldPath: "status.podIP",\r
226                                                                                 },\r
227                                                                         },\r
228                                                                 },\r
229                                                         },\r
230                                                         Image:           "redis:5.0.1-alpine",\r
231                                                         ImagePullPolicy: corev1.PullPolicy("IfNotPresent"),\r
232                                                 },\r
233                                         },\r
234                                         HostIPC:     false,\r
235                                         HostNetwork: false,\r
236                                         HostPID:     false,\r
237                                         TopologySpreadConstraints: []corev1.TopologySpreadConstraint{\r
238 \r
239                                                 corev1.TopologySpreadConstraint{\r
240                                                         TopologyKey:       "kubernetes.io/hostname",\r
241                                                         WhenUnsatisfiable: corev1.UnsatisfiableConstraintAction("DoNotSchedule"),\r
242                                                         LabelSelector: &metav1.LabelSelector{\r
243                                                                 MatchLabels: map[string]string{\r
244                                                                         "app.kubernetes.io/instance": "release-name",\r
245                                                                         "app.kubernetes.io/name":     "redis-cluster",\r
246                                                                 },\r
247                                                         },\r
248                                                         MaxSkew: 1,\r
249                                                 },\r
250                                         },\r
251                                 },\r
252                         },\r
253                         VolumeClaimTemplates: []corev1.PersistentVolumeClaim{\r
254 \r
255                                 corev1.PersistentVolumeClaim{\r
256                                         ObjectMeta: metav1.ObjectMeta{\r
257                                                 Labels: map[string]string{\r
258                                                         "app.kubernetes.io/name":     "redis-cluster",\r
259                                                         "app.kubernetes.io/instance": "release-name",\r
260                                                 },\r
261                                                 Name: "data",\r
262                                         },\r
263                                         Spec: corev1.PersistentVolumeClaimSpec{\r
264                                                 AccessModes: []corev1.PersistentVolumeAccessMode{\r
265 \r
266                                                         corev1.PersistentVolumeAccessMode("ReadWriteOnce"),\r
267                                                 },\r
268                                                 Resources: corev1.ResourceRequirements{\r
269                                                         Requests: corev1.ResourceList{\r
270                                                                 "storage": resource.MustParse("1Gi"),\r
271                                                         },\r
272                                                 },\r
273                                         },\r
274                                 },\r
275                         },\r
276                 },\r
277                 TypeMeta: metav1.TypeMeta{\r
278                         APIVersion: "apps/v1",\r
279                         Kind:       "StatefulSet",\r
280                 },\r
281         }\r
282 \r
283         return []*appsv1.StatefulSet{statefulSet1, statefulSet2}\r
284 }